1.3 Design Concepts Flashcards
What is design?
deliberative, purposive planning
What is software design?
The process of building a program while satisfying a problem’s functional requirements and not violating its non-functional requirements.
It’s a question of tradeoffs/
What are the two phases of software design?
- Architectural design
- Detail design
What is architectural design?
The process of identifying and assigning the responsibility of behavior to various modules or components of a software program.
What is detail design?
The process of specifying the behavior of each of the system components that you’ve identified during architectural design. e.g., data structures and algorithms.
What are the some examples of design notation?
Pseudo code; Program Design Language (PDL)
- keywords, free syntax of natural language, data declaration, subprogram definition and calling
Structured programming
- set of control structures that allow you to sequence, condition, repetition; chunking
Flowcharts; call graphs
- directed graphs: node is computational unit; arc is flow of control
Decision tables
- rules, conditions, actions
What is a design method?
A systematic sequence of steps that a design team uses to solve a problem.
Issues with design validation
- independence of validators (people who did the designs should not be the people who do the review)
- dependence on design method
- on-going versus after-the-fact
other design issues
- architectural vs detail design
- functional behavior vs non-functional constraints
- specification/what versus design/how
- application specificity
Traditional Design Documentation
- Subcomponents: process/activities, data/data flows
- Control flow: control regime
- Performance
- Resources
supplementary requirements: IEEE standard 1016
What is coupling?
The extent to which two components depend on each other for successful execution.
Low coupling is good.
Making a change in a system with high coupling is hard b/c a change to one component means a change to another component and so on…
What is cohesion?
The extent to which a component has a single purpose or function.
High cohesion is good.
Highly cohesive modules are easy to reuse b/c they have a single purpose.
Information hiding
encapsulating the capabilities a module has behind an abstract interface.
allows you to change the implementation details later without breaking the caller
abstraction mechanisms
- Declarative: what, not how
- Aggregation: container, not contents
- Generalization: class, not individuals
- Parameterization: binding details later
- Non-determinim: leaving choices unspecified