150 likes | 261 Views
High Quality Code – Style Matters. Chapter 5. Design in Construction Chapter 31. Layout and Style. Software Construction by Jeff Nogy. Chapter 5. Design in Construction. Introduction 5.1. Design Challenges 5.2. Key Design Concepts 5.3. Design Building Blocks: Heuristics
E N D
High Quality Code – Style Matters • Chapter 5. Design in Construction • Chapter 31. Layout and Style Software Construction by Jeff Nogy
Chapter 5. Design in Construction • Introduction • 5.1. Design Challenges • 5.2. Key Design Concepts • 5.3. Design Building Blocks: Heuristics • 5.4. Design Practices • 5.5. Comments on Popular Methodologies
5. Introduction • Process of building • The hands-on part • Coding or Programming • Construction = Programming
5.1. Design Challenges • Design Is a Wicked Problem • Wicked problem • Solve the problem once, then solve it again • Tacoma Narrows Bridge • Design Is a Sloppy Process (Even If it Produces a Tidy Result) • False steps and go down many blind alleys • Good Enough?
5.1. Design Challenges • Design Is About Tradeoffs and Priorities • Ideal world vs. Real world • Design Involves Restrictions • Create possibilities and Restrict possibilities
5.1. Design Challenges • Design Is Nondeterministic • More than one way to skin a cat • Design Is a Heuristic Process • Trial and Error • Design Is Emergent • Evolve and Improve
5.2. Key Design Concepts • Software's Primary Technical Imperative: Managing Complexity • Essential and Accidental Difficulties • Importance of Managing Complexity • How to Attack Complexity
5.2. Key Design Concepts • Desirable Characteristics of a Design • Levels of Design • Level 1: Software System • Level 2: Division into Subsystems or Packages • Level 3: Division into Classes • Level 4: Division into Routines • Level 5: Internal Routine Design
5.3. Design Building Blocks: Heuristics • Find Real-World Objects • Form Consistent Abstractions • Encapsulate Implementation Details • Inherit—When Inheritance Simplifies the Design
5.3. Design Building Blocks: Heuristics • Hide Secrets (Information Hiding) • Secrets and the Right to Privacy • Value of Information Hiding • Identify Areas Likely to Change • Keep Coupling Loose • Coupling Criteria • Kinds of Coupling
5.3. Design Building Blocks: Heuristics • Look for Common Design Patterns • Patterns provide several benefits • Other Heuristics • Things to aim for • Guidelines for Using Heuristics
5.4. Design Practices • Iterate • Divide and Conquer • Top-Down and Bottom-Up Design Approaches • Experimental Prototyping -------------------- • Collaborative Design • How Much Design Is Enough? • Capturing Your Design Work
5.5. Comments on Popular Methodologies • “Treat design as a wicked, sloppy, heuristic process. Don't settle for the first design that occurs to you. Collaborate. Strive for simplicity. Prototype when you need to. Iterate, iterate, and iterate again. You'll be happy with your designs.”
Conclusion • Software complexity • Simplicity is achieved in two general ways • Design is heuristic • Good design is iterative • Information hiding • The first priority of visual layout • Looking good is secondary • Pure blocks and Pure-block emulation • Structuring code is important • Religious issues