3. Design Challenges
Design is a Wicked Problem
“Wicked” problem as one that could be clearly
defined only by solving it, or by solving part of
it.
Design is a Sloppy process (Even if it produces
a tidy result)
Design is about Tradeoffs and Priorities
Design involves Restrictions
Design is nondeterministic
4. Design is a heuristic process
Design involves trail and error
Design is emergent
A tidy way to summarizing these attributes of
design is to say that design is “emergent”
5. Key Design Concepts
• Software’s Primary Technical Imperative
– Managing Complexity
When projects do fail for reasons that are
primarily technical, the reason is often
uncontrolled complexity.
6. Desirable Characteristics of a Design
• Minimal complexity
• Ease of maintenance
• Loose coupling
• Extensibility
• Reusability
• Stratification (keep the level of decomposition
stratified)
9. Design Building Blocks
• Find Real-World objects
– Identify the objects and their attributes (methods
and data)
– Determine what can be done to each object
– Determine what each object is allowed to do to
other objects
– Determine which are the objects available in
public and private
14. Keep coupling loose
• Coupling describes how tightly a class or
routine is related to other classes or routine.
Coupling Criteria
– Size
– Visibility
– Flexibility
16. Look for common design pattern
• Design pattern provides the cores of ready-
made solutions that can be used to solve
many of software’s most common problems.
17.
18. Design Practices
• Iterate : Try different approaches.
• Divide and Conquer
• Top-Down an Bottom-Up design approaches
• Experimental Prototyping