The document discusses the three main goals of software design: flexibility, extensibility, and maintainability. It highlights the importance of understanding object-oriented design and its benefits, while also addressing the challenges and strategies for achieving these goals. Key principles include minimizing code repetition, ensuring clear responsibilities, and promoting proper use of design patterns.
Goals of goodsoftware design This micro workshop discusses the three main goals of software design. Please use the music cues to advance the slide show. Presentation By: Parag Shah Adaptive Software Solutions
2.
Goals of goodsoftware design What is object oriented design? What is it all about? What are it's benefits? What are it's costs? It may seem silly to ask these questions in a day and age when virtually every software developer is using an object oriented language of some kind. Yet the question is important because, it seems to me, that most of us use those languages without knowing why, and without knowing how to get the the most benefit out of them. -- Uncle Bob
3.
Goals of goodsoftware design The main goals Flexibility Extensibility Maintainability
4.
Goals of goodsoftware design - Flexibility What is flexibility? Actions for change Identify Change Test
5.
Goals of goodsoftware design - Flexibility Detractors of flexibility Complex code Lack of clear responsibilities for classes and methods Unreadable code Repetitions in code Uncontained functionality
6.
Goals of goodsoftware design - Flexibility Design decisions that promote flexibility DRY (Don't repeat yourself) KISS (Keep it simple) No tricks Loose coupling Encapsulation Note: Minimize testing
7.
Goals of goodsoftware design - Extensibility What is extensibility? The ability to add new functionality with ease Change actions Badly designed system Same as flexibility Well designed system Add classes and refactor client code Detractors Same as flexibility Promoters All in flexibility Proper use of inheritance and polymorphism Design patterns
8.
Goals of goodsoftware design - Maintainability What is maintainability? Maintainability = Flexibility + Externsibility + Bug fixes + Refactorings Detractors Everything that applies to flexibility & extensibility Anything that leads to buggy code (more concerned with process) Promoters Everything applicable to flexibility & extensibility Proper test cases Good documentation Conscientious coding
9.
Summary Three maingoals of software design Flexibility Extensibility Maintainability Other goals