http://blog.sanaulla.info/2008/06/26/cohesion-and-coupling-two-oo-design-principles/
good OO design should be loosely coupled and highly cohesive.
The aim of the design should be to make the application:
easier to develop
easier to maintain
easier to add new features
less Fragile.
Coupling is the degree to which one class knows about another class.
Cohesion is used to indicate the degree to which a class has a single, well-focused purpose. Coupling is all about how classes interact with each other, on the other hand cohesion focuses on how single class is designed. Higher the cohesiveness of the class, better is the OO design.
Highly cohesive classes are much easier to maintain and less frequently changed.
Such classes are more usable than others as they are designed with a well-focused purpose.
Apart from that your client class knows that HttpReader is used for this and FileReader for that, so you are giving away the type related information about the instance you are using and thereby the client code gets tightly coupled with this type information.
One thing to keep in mind is that encapsulation is not only data hiding but also hiding the type related information from the user.
good OO design should be loosely coupled and highly cohesive.
The aim of the design should be to make the application:
easier to develop
easier to maintain
easier to add new features
less Fragile.
Coupling is the degree to which one class knows about another class.
Cohesion is used to indicate the degree to which a class has a single, well-focused purpose. Coupling is all about how classes interact with each other, on the other hand cohesion focuses on how single class is designed. Higher the cohesiveness of the class, better is the OO design.
Highly cohesive classes are much easier to maintain and less frequently changed.
Such classes are more usable than others as they are designed with a well-focused purpose.
10 | if(source contains "http://") |
11 | { |
12 | //its a web document, create a HttpReader |
13 | myReader = new HttpReader(source); |
14 | } |
15 | else |
16 | { |
17 | myReader = new FileReader(source); |
18 | } |
Apart from that your client class knows that HttpReader is used for this and FileReader for that, so you are giving away the type related information about the instance you are using and thereby the client code gets tightly coupled with this type information.
06 | public static getReader(String source) |
07 | { |
08 | if( source contains http) |
09 | { |
10 | return new HttpReader(source); |
11 | } |
12 | else if(someother condition) |
13 | { |
14 | return new SomeReader(source); |
15 | } |
16 | else |
17 | { |
18 | return new FileReader(source); |
19 | } |
20 | } |
31 | Reader myReader = ReaderFacotry.getReader(source); |