Applying software design principles in practice

34
How to apply design principles in practice? Ganesh Samarthyam Consultant, ZineMind LLC [email protected]

description

How to develop high quality software? What are the key/fundamental principles for software design? What is the relationship between principles, bad smells, design patterns, and refactoring? This presentation answers all this and more. Don't miss it!

Transcript of Applying software design principles in practice

Page 1: Applying software design principles in practice

How to apply design principles in practice?

Ganesh Samarthyam!Consultant, ZineMind [email protected]

Page 2: Applying software design principles in practice

“Applying design principles is the key to creating high-quality software!”

Architectural principles: !Axis, symmetry, rhythm, datum, hierarchy, transformation

Page 3: Applying software design principles in practice

Technology changes fast => FOMO

Page 4: Applying software design principles in practice

Often frustrating to develop quality software!

Page 5: Applying software design principles in practice

There must be a better way!“Here is Edward Bear,

coming downstairs now, bump, bump, bump,

on the back of his head, behind Christopher Robin.

It is, as far as ... !

It is, as far as he knows, the only way of coming downstairs,

but sometimes he feels that there really is another way,

if only he could stop bumping for a moment and think of it!”

!- A.A. Milne

Page 6: Applying software design principles in practice

Think, think, think!

Page 7: Applying software design principles in practice

Focus on software design is the key!

Page 8: Applying software design principles in practice

Real scenario #1Initial design

Page 9: Applying software design principles in practice

Real scenario #1

❖ How will you refactor such that:!

❖ A specific DES, AES, TDES, … can be “plugged” at runtime?!

❖ Reuse these algorithms in new contexts? !

❖ Easily add support for new algorithms in Encryption? !

Next change: smelly design

Page 10: Applying software design principles in practice

Time to refactor!Three strikes and you

refactor

Martin Fowler

Page 11: Applying software design principles in practice

Potential solution #1?Broken

hierarchy!

Yuck! !Your solution smells

Page 12: Applying software design principles in practice

Potential solution #2?Algorithms not

reusable!

Hmm, can be better. !Better luck next time…

Page 13: Applying software design principles in practice

Potential solution #3?

Wow!!What a nice solution :)

Page 14: Applying software design principles in practice

Can you identify the pattern?

Page 15: Applying software design principles in practice

You’re right: Its Strategy pattern!

Page 16: Applying software design principles in practice

Real scenario #2

Initial design

Page 17: Applying software design principles in practice

Real scenario #2

How to add support for new content types and/or algorithms?

Yuck! !This design smells

Page 18: Applying software design principles in practice

How about this solution?

Wow!!What a nice solution :)

Page 19: Applying software design principles in practice

Can you identify the pattern structure?

Page 20: Applying software design principles in practice

You’re right: Its Bridge pattern!

Page 21: Applying software design principles in practice

Wait, what principle did we apply?

Page 22: Applying software design principles in practice

Open Closed Principle (OCP)

Bertrand Meyer

Software entities should be open for extension, but closed for modification

Page 23: Applying software design principles in practice

Variation Encapsulation Principle (VEP)

Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides

Encapsulate the concept that varies

Page 24: Applying software design principles in practice

Fundamental principle: Encapsulation

The principle of encapsulation advocates separation of concerns and!information hiding through techniques such as hiding implementation!

details of abstractions and hiding variations

Page 25: Applying software design principles in practice

Enabling techniques for encapsulation

Page 26: Applying software design principles in practice

Other fundamental principles?

Principles*

Abstrac/on*

Encapsula/on*

Modulariza/on*

Hierarchy*

Page 27: Applying software design principles in practice

Applying principles in practice

EncapsulationViolating!

encapsulationAdherence to !encapsulation

Applying !encapsulation

Page 28: Applying software design principles in practice

Applying principles in practice

PrincipleViolating!principles

Adherence to !principles

Refactoring

Bad design !(with smells)

Good design (with patterns)

Page 29: Applying software design principles in practice

Design determines qualities

Understandability Changeability Extensibility

Reusability Testability Reliability

DESIGNimpacts

impactsimpacts

Page 30: Applying software design principles in practice

“Applying design principles is the key to creating high-quality software!”

Architectural principles: !Axis, symmetry, rhythm, datum, hierarchy, transformation

Page 31: Applying software design principles in practice

Presentation sourceForewords by

Grady Booch and Dr. Stephane Ducasse

Page 32: Applying software design principles in practice

What are your takeaways?

Page 33: Applying software design principles in practice

Image/video credits❖ http://en.wikipedia.org/wiki/Fear_of_missing_out!❖ http://lesliejanemoran.blogspot.in/2010_05_01_archive.html!❖ http://javra.eu/wp-content/uploads/2013/07/angry_laptop2.jpg!❖ https://www.youtube.com/watch?v=5R8XHrfJkeg!❖ http://womenworld.org/image/052013/31/113745161.jpg!❖ http://www.fantom-xp.com/wallpapers/33/I'm_not_sure.jpg!❖ https://www.flickr.com/photos/31457017@N00/453784086 !❖ https://www.gradtouch.com/uploads/images/question3.jpg!❖ http://gurujohn.files.wordpress.com/2008/06/bookcover0001.jpg !❖ http://upload.wikimedia.org/wikipedia/commons/d/d5/Martin_Fowler_-_Swipe_Conference_2012.jpg!❖ http://www.codeproject.com/KB/architecture/csdespat_2/dpcs_br.gif !❖ http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/Bertrand_Meyer_IMG_2481.jpg/440px-

Bertrand_Meyer_IMG_2481.jpg !❖ http://takeji-soft.up.n.seesaa.net/takeji-soft/image/GOF-OOPLSA-94-Color-75.jpg?d=a0 !❖ https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/OOP_ObjC/Art/watchcalls_35.gif!❖ http://www.pluspack.com/files/billeder/Newsletter/25/takeaway_bag.png !❖ http://cdn1.tnwcdn.com/wp-content/blogs.dir/1/files/2013/03/design.jpg

Page 34: Applying software design principles in practice