public class MovieLister { public List findAll() { ... } }
public class MovieFinder { private MovieLister lister; public void
moviesDirectedBy(String title) { List allMovies = lister.findAll();
... } } Dependency
class Lecture Class Standard Grader Dependency C o d e Rev i
ew
C o d e Rev i ew
class Lecture Class Standard Grader Dependency Class PassFail
Grader
Coupling
= Coupling
Object A
Object B
Dependency
= Coupling
Object A
Object B
Dependency
Coupling
OO
Goal
= Coupling
Object A
Object B
Dependency
Tight Coupling?
class Lecture Class Standard Grader Dependency P ro bl e m
Class Dependency
P ro bl e m
class Lecture Class Standard Grader Dependency Class PassFail
Grader Class
P ro bl e m
class Lecture Class Standard Grader Dependency Class PassFail
Grader Tight Coupling Dependency
S o l u t i o n
class Lecture Class Standard Grader Class PassFail Grader
Dependency Abstraction Loose Coupling
S o l u t i o n
class Lecture Class Standard Grader Class PassFail Grader
Dependency Abstract Class interface Loose Coupling
S o l u t i o n
class Lecture Dependency Abstract Class interface Loose
Coupling
Interface? Discussion
Behavior Discussion
class Lecture grade() Lecture
Grade
Discussion class class class
class Lecture grade() Lecture
Grade
Discussion class class class
class Lecture grade() Lecture
Discussion class class class
class Lecture grade() Lecture
Discussion class class class
class Lecture grade() Lecture
Discussion class class class
class Lecture grade() ,
Lecture
Discussion class class class
class Lecture grade() Lecture
Discussion class class class
Program to an interface, not implementation
class Lecture grade() Java interface Discussion class class
class interface
Refactoring
P ro bl e m
class Lecture Class StandardGrader Class PassFailGrader
interface Grader Create Dependency Dependency Use Tight Coupling
Class Dependency
S o l u t i o n
class Lecture Class StandardGrader Class PassFailGrader
interface Grader Create Dependency Dependency Use Separate Use From
Construction
S o l u t i o n
class Lecture Class StandardGrader Class PassFailGrader
interface Grader Create Dependency Dependency Use Client Dependency
Use Separate Use From Construction
S o l u t i o n
class Lecture Class StandardGrader Class PassFailGrader
interface Grader Dependency Use Client Dependency Use Separate Use
From Construction Create Dependency
S o l u t i o n
class Lecture Class StandardGrader Class PassFailGrader
interface Grader Dependency Use Client Dependency Use Separate Use
From Construction Create Dependency inject Dependency
class Lecture Class StandardGrader Class PassFailGrader
interface Grader Dependency Use Client Dependency Use Dependency
Injection Framework inject Dependency
Spring
@Controller public class ManageBookController { @Autowired
private BookstoreService bookstoreService; @Autowired private
CategoryService categoryService;