0
SOLID Object Oriented Design
Craig Berntson
www.craigberntson.com
craig@craigberntson.com
Twitter: @craigber
A little about me
 Independent consultant in Salt Lake City
 Currently developing database software for
sale to hospital...
Today’s session
 Review basic OOP and smells
 SOLID principles
 Other agile/OOP principles
Basic OOP
 Polymorphism
 Encapsulation
 Inheritance
 Cohesion
 Coupling
Refactoring code smells
 Duplicate code
 Long method
 Large class
 Temporary field
 Switch statements
 Parallel inhe...
Design smells
 Rigidity
 Software is difficult to change
 Fragility
 Program breaks in many places when a change
made ...
Design smells
 Viscosity
 Design-preserving methods are more difficult to use
than the hacks
 Development environment i...
Why does software rot?
 Waterfall methodology
 Requirements change
 Code wants to be chaotic
 We don’t take time to re...
Technical Debt
 The cost to fix rotting code
 Interest charges build over time
 The longer we take to remove the smells...
SOLID
 Single Responsibility Principle (SRP)
 Open-Closed Principle (OCP)
 Liskov Substitution Principle (LSP)
 Interf...
Where does SOLID come from?
Jenga
A real example
Single Responsibility Principle (SRP)
A class should have
only one reason to
change
Responsibility
 What a class does
 The more a class does, the more likely it will
change
 The more a class changes, the...
Cohesion and Coupling
 Cohesion – How closely related are the
different responsibilities of a module
 Coupling – How muc...
EXAMPLE CODE
Single Responsibility Principle
Demo
 Single Responsibility Principle
Open Closed principle (OCP)
Software entities (classes,
modules, functions, etc.)
should be open for
extension but closed ...
Conforming to OCP
 Open for extension
 Behavior of the module can be extended
 We are able to change what the module do...
Does not conform to OCP
Client is not open and closed
Strategy pattern
Client is both open and closed
Conforming to OCP
 Rely on abstractions
 Interfaces
 Abstract classes
EXAMPLE CODE
Open Closed Principle
Liskov Substitution Principle (LSP)
Subtypes must be
substitutable for
their base types
IS-A
 Basic OOP discusses inheritance with “IS-A”
 LSP says that “IS-A” refers to behavior
 Behavior is what software i...
Substitution
 Calling code should not know that one
module is different from its substitute
EXAMPLE CODE
Liskov Substitution Principle
Interface Segregation Principle (ISP)
Clients should not be
forced to depend on
methods they do not use
EXAMPLE CODE
Interface Segregation Principle
Dependency Inversion Principle (DIP)
High-level modules should not
depend on low-level modules. Both
should depend on abs...
EXAMPLE CODE
Dependency Inversion Principle
Other principles
 Keep It Simple Stupid (KISS)
 You Ain’t Gonna Need It (YAGNI)
 Don’t Repeat Yourself (DRY)
Today’s session
 Review basic OOP and smells
 Single Responsibility Principle (SRP)
 Open-Closed Principle (OCP)
 Lisk...
Questions?
 Motivational posters courtesy of Derick
Bailey through the Creative Commons
License
 Contact me
 Email: cra...
Solid
Solid
Solid
Solid
Solid
Solid
Upcoming SlideShare
Loading in...5
×

Solid

169

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
169
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Solid"

  1. 1. SOLID Object Oriented Design Craig Berntson www.craigberntson.com craig@craigberntson.com Twitter: @craigber
  2. 2. A little about me  Independent consultant in Salt Lake City  Currently developing database software for sale to hospitals  Microsoft MVP  INETA Community Speaker  Author
  3. 3. Today’s session  Review basic OOP and smells  SOLID principles  Other agile/OOP principles
  4. 4. Basic OOP  Polymorphism  Encapsulation  Inheritance  Cohesion  Coupling
  5. 5. Refactoring code smells  Duplicate code  Long method  Large class  Temporary field  Switch statements  Parallel inheritance hierarchies
  6. 6. Design smells  Rigidity  Software is difficult to change  Fragility  Program breaks in many places when a change made in a single place  Immobility  Parts could be useful in other systems, but effort and risk to separate from original system is too great
  7. 7. Design smells  Viscosity  Design-preserving methods are more difficult to use than the hacks  Development environment is slow and inefficient  Needless complexity  Contains elements that aren’t currently useful  Needless repetition  System has lots of repeated code elements  Opacity  A module is difficult to understand
  8. 8. Why does software rot?  Waterfall methodology  Requirements change  Code wants to be chaotic  We don’t take time to refactor  We suck at OO design  Designs and practices are at fault
  9. 9. Technical Debt  The cost to fix rotting code  Interest charges build over time  The longer we take to remove the smells, the more it will cost
  10. 10. SOLID  Single Responsibility Principle (SRP)  Open-Closed Principle (OCP)  Liskov Substitution Principle (LSP)  Interface Segregation Principle (ISP)  Dependency Inversion Principle (DIP)
  11. 11. Where does SOLID come from?
  12. 12. Jenga
  13. 13. A real example
  14. 14. Single Responsibility Principle (SRP) A class should have only one reason to change
  15. 15. Responsibility  What a class does  The more a class does, the more likely it will change  The more a class changes, the more likely we will introduce bugs
  16. 16. Cohesion and Coupling  Cohesion – How closely related are the different responsibilities of a module  Coupling – How much one module relies on another  Goal is low coupling and high cohesion
  17. 17. EXAMPLE CODE Single Responsibility Principle
  18. 18. Demo  Single Responsibility Principle
  19. 19. Open Closed principle (OCP) Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification
  20. 20. Conforming to OCP  Open for extension  Behavior of the module can be extended  We are able to change what the module does  Closed for modification  Extending behavior does not result in changes to source, binary, or code of the module
  21. 21. Does not conform to OCP Client is not open and closed
  22. 22. Strategy pattern Client is both open and closed
  23. 23. Conforming to OCP  Rely on abstractions  Interfaces  Abstract classes
  24. 24. EXAMPLE CODE Open Closed Principle
  25. 25. Liskov Substitution Principle (LSP) Subtypes must be substitutable for their base types
  26. 26. IS-A  Basic OOP discusses inheritance with “IS-A”  LSP says that “IS-A” refers to behavior  Behavior is what software is really all about
  27. 27. Substitution  Calling code should not know that one module is different from its substitute
  28. 28. EXAMPLE CODE Liskov Substitution Principle
  29. 29. Interface Segregation Principle (ISP) Clients should not be forced to depend on methods they do not use
  30. 30. EXAMPLE CODE Interface Segregation Principle
  31. 31. Dependency Inversion Principle (DIP) High-level modules should not depend on low-level modules. Both should depend on abstractions Abstractions should not depend on details. Details should depend upon abstractions
  32. 32. EXAMPLE CODE Dependency Inversion Principle
  33. 33. Other principles  Keep It Simple Stupid (KISS)  You Ain’t Gonna Need It (YAGNI)  Don’t Repeat Yourself (DRY)
  34. 34. Today’s session  Review basic OOP and smells  Single Responsibility Principle (SRP)  Open-Closed Principle (OCP)  Liskov Substutution Principle (LSP)  Interface Segregation Principle (ISP)  Dependency Inversion Principle (DIP)  Other agile/OOP principles
  35. 35. Questions?  Motivational posters courtesy of Derick Bailey through the Creative Commons License  Contact me  Email: craig@craigberntson.com  Blog: www.craigberntson.com/blog  Twitter: @craigber
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×