0
SOLID Software Design Abbas Raza
Software Design <ul><li>“  […] the design of a software project is documented primarily by its source code .” Robert C. Ma...
Software Design <ul><li>Code is Design - Seminal Paper by Jack Reeves </li></ul><ul><li>http://www.developerdotstar.com/ma...
What is Software Design <ul><li>The source code  is  the design </li></ul>
The root cause <ul><li>Abandoned code  rots </li></ul>
The effect <ul><li>The rotten code  smells </li></ul>
What is a Design Smell <ul><li>A design smell is a symptom of the violation of design principles. </li></ul>
<ul><li>How does it smell? </li></ul>
Rigidity <ul><li>The tendency for software to be difficult to change, even in simple ways. The design is hard to change. <...
Fragility <ul><li>The tendency of a program to break in many places when a single change is made. The design is easy to br...
Immobility <ul><li>It is hard to disentangle the system into components that can be reused in other systems. The design is...
Viscosity - Software <ul><li>Design -preserving methods vs. Hacks </li></ul>
Viscosity - Environment <ul><li>Slow and inefficient development environment like very long compile times, hours to check-...
Needless Complexity <ul><li>Elements not currently needed in the design. Overdesign. </li></ul>
Needless Repetition <ul><li>The design contains repeating structures that could be unified under a single abstraction. </l...
Opacity <ul><li>The tendency of a module to be difficult to understand. </li></ul>
<ul><li>SOLID Design Principles help fix the smells. </li></ul>
 
 
<ul><li>A class should have one, and only one, reason to change. </li></ul>
 
<ul><li>You should be able to extend a classes behavior, without modifying it. </li></ul>
 
<ul><li>Derived classes must be substitutable for their base classes. </li></ul>
 
<ul><li>Make fine grained interfaces that are client specific. </li></ul>
 
<ul><li>Depend on abstractions, not on concretions. </li></ul>
References <ul><li>Agile Principles, Practices, and Patterns by Robert Martin </li></ul><ul><li>SOLID Posters from  http:/...
<ul><li>Thank You!! </li></ul>
Upcoming SlideShare
Loading in...5
×

Solid Software Design

1,748

Published on

SOLID Software Design Principles as outlined by Uncle Bob. Presented to software artists.

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

No Downloads
Views
Total Views
1,748
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
57
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Solid Software Design"

  1. 1. SOLID Software Design Abbas Raza
  2. 2. Software Design <ul><li>“ […] the design of a software project is documented primarily by its source code .” Robert C. Martin </li></ul>
  3. 3. Software Design <ul><li>Code is Design - Seminal Paper by Jack Reeves </li></ul><ul><li>http://www.developerdotstar.com/mag/articles/reeves_design.html </li></ul>
  4. 4. What is Software Design <ul><li>The source code is the design </li></ul>
  5. 5. The root cause <ul><li>Abandoned code rots </li></ul>
  6. 6. The effect <ul><li>The rotten code smells </li></ul>
  7. 7. What is a Design Smell <ul><li>A design smell is a symptom of the violation of design principles. </li></ul>
  8. 8. <ul><li>How does it smell? </li></ul>
  9. 9. Rigidity <ul><li>The tendency for software to be difficult to change, even in simple ways. The design is hard to change. </li></ul>
  10. 10. Fragility <ul><li>The tendency of a program to break in many places when a single change is made. The design is easy to break. </li></ul>
  11. 11. Immobility <ul><li>It is hard to disentangle the system into components that can be reused in other systems. The design is hard to reuse. </li></ul>
  12. 12. Viscosity - Software <ul><li>Design -preserving methods vs. Hacks </li></ul>
  13. 13. Viscosity - Environment <ul><li>Slow and inefficient development environment like very long compile times, hours to check-in, several minutes to deploy </li></ul>
  14. 14. Needless Complexity <ul><li>Elements not currently needed in the design. Overdesign. </li></ul>
  15. 15. Needless Repetition <ul><li>The design contains repeating structures that could be unified under a single abstraction. </li></ul>
  16. 16. Opacity <ul><li>The tendency of a module to be difficult to understand. </li></ul>
  17. 17. <ul><li>SOLID Design Principles help fix the smells. </li></ul>
  18. 20. <ul><li>A class should have one, and only one, reason to change. </li></ul>
  19. 22. <ul><li>You should be able to extend a classes behavior, without modifying it. </li></ul>
  20. 24. <ul><li>Derived classes must be substitutable for their base classes. </li></ul>
  21. 26. <ul><li>Make fine grained interfaces that are client specific. </li></ul>
  22. 28. <ul><li>Depend on abstractions, not on concretions. </li></ul>
  23. 29. References <ul><li>Agile Principles, Practices, and Patterns by Robert Martin </li></ul><ul><li>SOLID Posters from http://lostechies.com </li></ul>
  24. 30. <ul><li>Thank You!! </li></ul>
  1. A particular slide catching your eye?

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

×