- software design: process of defining and implementing software solutions to one or more sets of problems
- software architecture: the structures needed to reason about a software system, which compromises software elements, relations between them, and properties of both
- architectural design: process of identifying and assigning responsibilities for aspects of behavior to various modules of a system
- Domain Model (Conceptual Model)
- represents real world objects and behaviors
- conceptual classes
- visual dictionary
- Data Model
- depicts persistent data objects
- classes, as in OOP
- names inspired by domain model
- defined with a symbol (name), intension (idea), extension (examples),
- does not assume any implementation technology
- Class
- hidden, attributes (concept), types/data implement, methods (API)
- Associations between classes
- relationships between classes
- multiplicity: how many objects can be associated (cardinality)
- Aggregation and Composition
- aggregation: part of a whole, can exist independently
- open diamond
- composition: part of a whole, cannot exist independently
- filled diamond
- aggregation: part of a whole, can exist independently
- Generalization
- inheritance
- derivation
- parent/class
- open triangle (arrow) for generalization