Top-down and bottom-up design Bottom-up design Make decisions about reusable low-level utilities Then decide how these will be put together to create high-level constructs A mix of top-down and bottom-up approaches are normally used: Top-down design is almost always needed to give the system a good structure Bottom-up design is normally useful so that reusable components can be created www.oseng.com O Lethbridge/Laganiere 2001 Chapter 9: Architecting and designing software
© Lethbridge/Laganière 2001 Chapter 9: Architecting and designing software 11 Top-down and bottom-up design Bottom-up design • Make decisions about reusable low-level utilities. • Then decide how these will be put together to create high-level constructs. A mix of top-down and bottom-up approaches are normally used: • Top-down design is almost always needed to give the system a good structure. • Bottom-up design is normally useful so that reusable components can be created
Different aspects of design Architecture design The division into subsystems and components How these will be connected How they will interact Their interfaces lass aesign The various features of classes Userinterface design Algorithmdesign The design of computational mechanisms Protocol design -The design of communications protocol www.oseng.com O Lethbridge/Laganiere 2001 Chapter 9: Architecting and designing software
© Lethbridge/Laganière 2001 Chapter 9: Architecting and designing software 12 Different aspects of design • Architecture design: —The division into subsystems and components, - How these will be connected. - How they will interact. - Their interfaces. • Class design: —The various features of classes. • User interface design • Algorithm design: —The design of computational mechanisms. • Protocol design: —The design of communications protocol
9.2 Principles leading to good design Overall goals of good design: Increasing profit by reducing cost and increasing revenue Ensuring that we actually conform with the requirements Accelerating development Increasing qualities such as - Usability efficiency -Reliability Maintainability -Reusability www.oseng.com O Lethbridge/Laganiere 2001 Chapter 9: Architecting and designing software 13
© Lethbridge/Laganière 2001 Chapter 9: Architecting and designing software 13 9.2 Principles Leading to Good Design Overall goals of good design: • Increasing profit by reducing cost and increasing revenue • Ensuring that we actually conform with the requirements • Accelerating development • Increasing qualities such as —Usability —Efficiency —Reliability —Maintainability —Reusability
Design principle 1: Divide and conquer Trying to deal with something big all at once is normally much harder than dealing with a series of smaller things Separate people can work on each part An individual software engineer can specialize Each individual component is smaller, and therefore easier to understand Parts can be replaced or changed without having to replace or extensively change other parts www.oseng.com O Lethbridge/Laganiere 2001 Chapter 9: Architecting and designing software 14
© Lethbridge/Laganière 2001 Chapter 9: Architecting and designing software 14 Design Principle 1: Divide and conquer Trying to deal with something big all at once is normally much harder than dealing with a series of smaller things • Separate people can work on each part. • An individual software engineer can specialize. • Each individual component is smaller, and therefore easier to understand. • Parts can be replaced or changed without having to replace or extensively change other parts
Ways of dividing a software system a distributed system is divided up into clients and servers a system is divided up into subsystems a subsystem can be divided up into one or more pacKages a package is divided up into classes a class is divided up into methods www.oseng.com O Lethbridge/Laganiere 2001 Chapter 9: Architecting and designing software 15
© Lethbridge/Laganière 2001 Chapter 9: Architecting and designing software 15 Ways of dividing a software system • A distributed system is divided up into clients and servers • A system is divided up into subsystems • A subsystem can be divided up into one or more packages • A package is divided up into classes • A class is divided up into methods