P67 [def] design activity: 1. Activity that acts as a bridge between requirements and the implementation of the software 2. Activity that gives a structure to the artifact e.g., a requirements specification P68 Two important goals: 1. Design for change (Parnas) 2. Product families (Parnas) P68 Main Criteria for decomposing a system into modules: Information hiding Basis for design (i.e. module decomposition) Implementation secrets are hidden to clients They can be changed freely if the change does not affect the interface Golden design principle ------------------------------------------------------ P70 [def] software design software architecture (See P146) 粗略的结构,如pipeline,blackboard等。而不是在design后对系统的细分 - Shows gross structure and organization of the system to be defined - Often a software architecture is produced prior to a software design P71 [def] implement ------------------------------------------------------ P78 [def] architectural design, detailed design P79 [def] Module A well-defined component of a software system A part of a system that provides a set of services to other modules P79 hierachy - DAG P80 USES relation: A uses B - A requires the correct operation of B - A can access the services exported by B through its interface - it is “statically” defined - A depends on B to provide its services example: A calls a routine exported by B - A is a client of B; B is a server - should be a hierarchy P81 [def] level P82 keep fan-out low, keep fan-in high P83 IS_COMPONENT_OF <-> COMPRISES IMPLMENTS <-> IS_COMPOSED_OF P86 interface, implementation P87 information hiding Bad Example: 4.1 P92 Mechanism, Policy Design Notations: P94: Textual Design Notation P98: Graphical Design Notation P143: Unified Modeling Language (for OO) Categories of Modules: P101: procedural abstractions libraries common pools of data More Abstract: P102 Abstract Object (has state) P104 Abstract Data Type (exports a type) P106 Generic Module (parameterized abstract object or data type) P111 stepwise refinement: A systematic, iterative program design technique that unfortunately may lead to software that is hard to evolve How to transform it into IS_COMPOSED_OF relation (add control flow glue) useful in a single module, but not decomposing the large system P117 Top-down vs. bottom-up Information hiding proceeds bottom-up Iterated application of IS_COMPOSED_OF proceeds top-down in practice, people proceed in both directions (yo-yo design) organizing documentation as a top-down flow may be useful for reading purposes ------------------------------------------------------ P119 exception handling Concurrent Software P117 monitor based (concurrent accessed objects as passive entities) P129 rendezvous based (active objects) *nondeterministic* P133 real-time software P139 Middleware Layer residing between the network operating system and the application Helps building network applications Provides useful services Name services, to find processes or resources on the network Communication services, such as message passing or RPC (or RMI) Corba, a typical standard middleware spec P140 A further relation - inheritance P143 - 146 UML notation USES relationship is replaced by a variety of relations: inheritance, association, and aggregation.