call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
Design in construction
1. 5. Design in Construction
Code Complete
Author : Steven C. McConnell.
Prof. Asha N
1
2. Introduction
SOME PEOPLE MIGHT ARGUE THAT design isn’t really a
construction activity, but many activities are thought of as
construction, often including design.
A lot of design is done while the programmer sits at the
keyboard.
- “Design” might be just writing a class interface in pseudo
code before writing the details. It might be drawing diagrams of
a few class relationships before coding them.
Prof. Asha N
2
3. 5.1. Design Challenges
“software design” means the conception,
invention, or contrivance of a scheme for
turning a specification for a computer program
into an operational program.
that links requirements to coding and debugging.
A good top-level design provides a structure that
can safely contain multiple lower level designs.
Prof. Asha N
3
4. Design is a “Wicked” Problem
Prof. Asha N
“wicked” problem as one that
could be clearly defined only
by solving it, or by solving
part of it.
This paradox implies,
essentially, that you have to
“solve” the problem once in
order to clearly define it and
then solve it again to create a
solution that works.
4
5. Design is a Sloppy Process
Design is sloppy because a good solution is
often only subtly different from a poor one.
Design is also sloppy because it’s hard to know
when your design is “good enough.”
Since design is open-ended, the most common
answer to that question is
-“When you’re out of time.”
Prof. Asha N
5
6. Other Design Challenges
Design is About Trade-Offs and Priorities
Design Involves Restrictions
Design is Non-Deterministic
Design is a Heuristic Process
Design is Emergent
Prof. Asha N
6
7. 5.2 Design Concepts
Good design depends on understanding a handful of
key concepts.
The role of complexity.
desirable characteristics of designs.
levels of design.
Managing Complexity:
Two different classes of problems—the essential and the
accidental
the complexity of a problem is reduced by dividing the
system into subsystems.
Prof. Asha N
7
8. Design Concepts
Ineffective Design:
A complex solution to a simple problem
A simple, incorrect solution to a complex
problem
An inappropriate, complex solution to a
complex problem
Prof. Asha N
8
9. Design Concepts
How to Attack Complexity
Two-prong approach to managing Complexity:
1. Minimize the amount of essential complexity
that anyone’s brain has to deal with at any one
time.
2. Keep accidental complexity from needlessly
proliferating.
Prof. Asha N
9
10. Design Concepts
Desirable Characteristics of a Design
•
•
•
•
•
•
•
•
•
•
•
Minimal complexity
Ease of maintenance
Minimal connectedness
Extensibility
Reusability
High fan-in
Low-to-medium fan-out
Portability
Leanness
Stratification
Standard techniques
Prof. Asha N
10
12. Design Concepts
Levels:
The system (1) is first organized into subsystems (2).
The subsystems are further divided into classes (3), and
the classes are divided into routines and data (4).
The inside of each routine is also designed (5).
Prof. Asha N
12
13. 5.3 Design Building Blocks: Heuristics
design is non-deterministic, So skillful application of
an effective set of heuristics is the core activity in
good software design.
1.
Find Real-World Objects
The steps in designing with objects are
Identify the objects and their attributes (methods and data).
Determine what can be done to each object.
Determine what each object can do to other objects.
Determine the parts of each object that will be visible to other
objects— which parts will be public and which will be private.
Define each object’s public interface.
Prof. Asha N
13
15. Design Building Blocks: Heuristics
2.
Form Consistent Abstractions
• Abstraction allows
to focus on the
interface without
needing to worry
about the internal
workings of the
class.
•Abstraction allows
you to take a simpler
view of a complex
concept.
Prof. Asha N
15
16. Design Building Blocks: Heuristics
3. Encapsulate Implementation Details
Encapsulation says that, not
only are you allowed to take
a simpler view of a complex
concept, you are not allowed
to look at any of the details
of the complex concept.
Prof. Asha N
16
17. Design Building Blocks: Heuristics
4. Inherit When Inheritance Simplifies the
Design
Defining similarities and differences among objects
is called “inheritance”
5. Hide Secrets (Information Hiding)
Information hiding is characterized by the idea of
“secrets,” design and implementation decisions that
a software developer hides in one place from the rest
of a program.
Prof. Asha N
17
18. Design Building Blocks: Heuristics
6.
Secrets and the Right to Privacy
A good class interface is like
the tip of an iceberg, leaving
most of the class unexposed.
Two Categories of Secrets
● Hiding complexity so that your
brain doesn’t have to deal with it
unless you’re specifically
concerned with it
● Hiding sources of change so that
when change occurs the effects
are localized
Prof. Asha N
18
19. Design Building Blocks: Heuristics
7. Value of Information Hiding
Information hiding has unique heuristic power, a unique
ability to inspire effective design solutions.
8. Identify Areas Likely to Change
ability to anticipate change
few areas that are likely to change:
Business logic
Hardware dependencies
Input and output
Nonstandard language features
Difficult design and construction areas
Status variables
Data-size constraints
Prof. Asha N
19
20. Design Building Blocks: Heuristics
9. Anticipating Different Degrees of Change
design the system so that the effect or scope of the
change is proportional to the chance that the change
will occur.
10. Keep Coupling Loose
Coupling describes how tightly a class or routine is
related to other classes or routines. The goal is to
create classes and routines with small, direct, visible,
and flexible relations to other classes and routines
(loose coupling).
Prof. Asha N
20
21. Design Building Blocks: Heuristics
Coupling Criteria
Size
Visibility
Flexibility
Kinds of Coupling
Simple-data-parameter coupling
Simple-object coupling
Object-parameter coupling
Semantic coupling
Prof. Asha N
21
22. Look for Common Design Patterns
Patterns reduce complexity by providing
ready-made abstractions
Patterns reduce errors by institutionalizing
details of common solutions
Patterns provide heuristic value by
suggesting design alternatives
Patterns streamline communication by
moving the design dialog to a higher level
Prof. Asha N
22
23. Other Heuristics
Aim for Strong Cohesion
Build Hierarchies
Formalize Class Contracts
Assign Responsibilities
Design for Test
Avoid Failure
Choose Binding Time Consciously
Make Central Points of Control
Consider Using Brute Force
Draw a Diagram
Keep Your Design Modular
Prof. Asha N
23
24. 5.4 Design Practices
Iterate
Divide and Conquer
Top-Down and Bottom-Up Design Approaches
Argument for Top Down
Argument for Bottom Up
Experimental Prototyping
Collaborative Design
How Much Design is Enough?
Capturing Your Design Work
Prof. Asha N
24