OO design principles & heuristics

29
1 OO Design Principles and Heuristics Dhaval Shah Dhaval Shah

Transcript of OO design principles & heuristics

Page 1: OO design principles & heuristics

1

OO Design Principles and Heuristics

Dhaval Dhaval ShahShah

Page 2: OO design principles & heuristics

2

AgendaAgenda What is OO Modeling?

Why OO Modeling?

Odors of rotting software

Basic OO Principles

OO Design Principles and Heuristics

Conclusion

Case Study

Page 3: OO design principles & heuristics

3

This session will not:This session will not: Make you an expert in OOAD

Turn you into a system architect

Provide instruction on UML

Page 4: OO design principles & heuristics

4

Warning!Warning! Most of these slides maps directly/indirectly to various articles available on the web, especially from objectmentor.com

Thanks Bob!

Page 5: OO design principles & heuristics

5

What is OO ModelingWhat is OO Modeling

Page 6: OO design principles & heuristics

6

Why OO ModelingWhy OO Modeling

To Manage Change

To Deliver Faster

To Deal with Complexity

Page 7: OO design principles & heuristics

7

Odors of rotting softwareOdors of rotting software

Rigidity

FragilityImmobility

Viscosity Needless Complexity

Needless Repetition

Opacity

Page 8: OO design principles & heuristics

8

OO Design Principles and Heuristics Single Responsibility Principle

Open Close Principle

Liskov Substitution Principle

Interface Segregation Principle

Dependency Inversion Principle

Page 9: OO design principles & heuristics

9

Single Responsibility PrincipleSingle Responsibility Principle

A class should have only one reason to change

Page 10: OO design principles & heuristics

10

Single Responsibility Principle [Contd.]

Page 11: OO design principles & heuristics

11

Single Responsibility Principle [Contd.]

Page 12: OO design principles & heuristics

12

Single Responsibility Principle Single Responsibility Principle [Contd.][Contd.] What is RESPONSIBILITY?

RESPONSIBILITY is reason for change

How to spot multiple RESPONSIBILITIES?

Page 13: OO design principles & heuristics

13

Single Responsibility Principle Single Responsibility Principle [Contd.][Contd.] Example-

Page 14: OO design principles & heuristics

14

Single Responsibility Principle Single Responsibility Principle [Contd.][Contd.] Going from multiple responsibilities to single responsibility -

Page 15: OO design principles & heuristics

15

Open Close PrincipleOpen Close PrincipleSoftware entities should be open for extension but closed for modification.

Page 16: OO design principles & heuristics

16

Open Close Principle [Contd.]Open Close Principle [Contd.] Example

Page 17: OO design principles & heuristics

17

Open Close Principle [Contd.]Open Close Principle [Contd.] Example

Page 18: OO design principles & heuristics

18

Liskov Substitution PrincipleLiskov Substitution PrincipleSubtypes must be substitutable for their base types.

LSP is all about inheritance – One must be able to substitute subclass by base class without things going terribly wrong

Page 19: OO design principles & heuristics

19

Liskov Substitution Principle Liskov Substitution Principle [Contd.][Contd.] Example

Page 20: OO design principles & heuristics

20

Liskov Substitution Principle Liskov Substitution Principle [Contd.][Contd.] Example

Board board = new 3DBoard();

Unit unit = board.getUnits(8,4);

Page 21: OO design principles & heuristics

21

Liskov Substitution Principle Liskov Substitution Principle [Contd.][Contd.] Solving 3DBoard problem

Page 22: OO design principles & heuristics

22

Interface Segregation PrincipleInterface Segregation Principle

Clients should not be forced to depend upon interfaces that they don't use.

Page 23: OO design principles & heuristics

23

Interface Segregation Principle Interface Segregation Principle [Contd.][Contd.] Example

Page 24: OO design principles & heuristics

24

Interface Segregation Principle Interface Segregation Principle [Contd.][Contd.] Separation Through Delegation

Page 25: OO design principles & heuristics

25

Interface Segregation Principle Interface Segregation Principle [Contd.][Contd.] Separation Through Multiple Inheritance

Page 26: OO design principles & heuristics

26

Dependency Inversion PrincipleDependency Inversion Principle

a.High-level modules should not depend on low-level modules. Both should depend on abstractions

b.Abstractions should not depend upon details. Details should depend upon abstractions

Page 27: OO design principles & heuristics

27

Interface Segregation Principle Interface Segregation Principle [Contd.][Contd.] Layering

Naive Layering Scheme

Page 28: OO design principles & heuristics

28

Interface Segregation Principle Interface Segregation Principle [Contd.][Contd.] Inverted Layering

Inverted Layers

Page 29: OO design principles & heuristics

29

ConclusionConclusion Good design is needed to successfully deal with change

The main forces driving your design should be high cohesion and low coupling

SOLID principles put you on the right path

WARNING : these principles cannot be applied blindly :)