Design: HOW to implement a system Goals: Satisfy the requirements Satisfy the customer Reduce development costs Provide reliability Support maintainability Plan for future modifications Topic Design Issues Architecture User Interface Operations Data Representations Data Types Topic Algorithms Design System Focus on architecture Identification of subsystems Object Topic design (high level design) design (lower level design) Modules and their implementations Focus on data representations and algorithms System Design Choose high-level strategy for solving problem and building solution Decide how to organize the system into subsystems Identify concurrency / tasks Allocate subsystems to HW and SW components Topic System Design Major conceptual and policy decisions Approach for management of data stores Access mechanism for global resources Software control mechanism Handle boundary conditions Prioritize trade-offs Topic Design Principles Consider alternative approaches Do pro and con analysis Delay decisions until superior choice is clear Isolate decisions so alternative implementations can be evaluated later Avoid unnecessary embellishments But don’t oversimplify Topic Design Principles (cont.) Make design traceable to requirements Use uniform documentation style Reuse existing designs when possible Keep design simple unless performance, maintainability, etc. DEMAND otherwise Topic Design Principles (cont.) Define interfaces between modules carefully Consider how to handle the unexpected Don’t code!! Document decisions Review, review, review . . . Topic System Architecture Overall organization of system into subsystems Decide basic interaction patterns Numerous architectural styles for different applications Architecture provides context for detailed design decisions Topic Subsystem Identification Divide system into a manageable number of components Each major component is a subsystem Subsystem groups components with common properties/function Topic Subsystem Collection of Classes Associations Operations Events Topic Constraints Interrelated Good cohesion Well-defined, small interface with other subsystems Low coupling Identified by the service it provides Subsystem Discussion Provide services for other subsystems Group of related functions Share a common purpose Divide system into components (>20) Subsystems are decomposed . . . Topic Module is the lowest level of subsystem Subsystem Relationships Client-Server relationship Client subsystems actively drive the system by requesting services provided by a server subsystem Peer-to-peer relationship Topic Subsystems interact and communicate to accomplish a common goal Client-Server Relationship Server supplies services for clients Need not know identity of clients Need not know interface of clients Client calls server Topic Client knows interface of server Server performs some service and returns a result Peer-to-Peer Relationship Subsystems call one another The results of/responses to calls may not be immediately visible Subsystems must know the interfaces of other subsystems More likely to have communication dependencies Topic Strategies for Decompositions Layers: Horizontal decomposition Open Closed Partitions: Vertical decomposition System topology: General Topic decompositions Layered Subsystems Set of “virtual” worlds Each layer is defined in terms of the layer(s) below it Knowledge is one way: Layer knows about layer(s) below it Objects within layer can be independent Lower layer (server) supplies services for objects (clients) in upper layer(s) Topic Example: Layered architecture Interactive Graphics Application Windows Operations Screen Operations Pixel Operations Device I/O Operations Topic Closed Architectures Each layer is built only in terms of the immediate lower layer Reduces dependencies between layers Facilitates Topic change Open Architectures Layer can use any lower layer Reduces the need to redefine operations at each level More efficient /compact code System is less robust/harder to change Topic Properties of Layered Architectures Top and bottom layers specified by the problem statement Top layer is the desired system Bottom layer is defined by available resources (e.g. HW, OS, libraries) Easier to port to other HW/SW platforms Topic Partitioned Architectures Divide system into weakly-coupled subsystems Each provides specific services Vertical Topic decomposition of problem Ex: Partitioned Architecture Operating System Virtual File Process Memory Device System Control Manage- Control ment Topic Typical Application Architecture Application package Window graphics User dialogue control Screen graphics Pixel graphics Operating system Computer hardware Topic Simulation package System Topology Describe information flow Can use DFD to model flow Some common topologies Pipeline Star Topic (batch) topology Ex: Pipeline Topology Compiler: source program Lexical analyzer token stream Semantic analyzer abstract syntax tree Code generator Topic code sequence Code optimizer object code Ex: Star Toplogy Monitoring system: Alarm Sensors sensor status commands, SafeHome data software Control panel Topic display information On/Off signals, alarm type Telephone line number tones Modularity Organize modules according to resources/objects/data types Provide cleanly defined interfaces operations, methods, procedures, ... Hide implementation details Simplify program understanding Simplify program maintainance Topic Abstraction Control abstraction structured control statements exception handling concurrency constructs Procedural abstraction procedures and functions Data abstraction Topic user defined types Abstraction (cont.) Abstract data types encapsulation Abstract of data objects subtyping generalization/inheritance Topic Cohesion Contents of a module should be cohesive Improves maintainability Easier to understand Reduces complexity of design Supports reuse Topic (Weak) Types of cohesiveness Coincidentally cohesive Logically cohesive contiguous lines of code not exceeding a maximum size all output routines Temporally cohesive Topic all initialization routines (Better) Types of cohesiveness Procedurally cohesive Communicationally cohesive routines called in sequence work on same chunk of data Functionally cohesive Topic work on same data abstraction at a consistent level of abstraction Example: Poor Cohesion package Output is procedure DisplayDice( . . .); procedure DisplayBoard( . . .); I/O device Topic Dice Output Board Example: Good Cohesion package Dice is procedure Display ( . . .); procedure Roll( . . .); Dice I/O device Board Topic Coupling Connections between modules Bad coupling Global variables Flag parameters Direct manipulation of data structures by multiple classes Topic Coupling (cont.) Good coupling Procedure calls Short argument lists Objects as parameters Good coupling improves maintainability Topic Easier to localize errors, modify implementations of an objects, ... Information Hiding Hide decisions likely to change Data representations, algorithmic details, system dependencies Black box Input is known Output is predictable Mechanism is unknown Improves maintainability Topic Information Hiding Topic Abstract data types Modules (Classes, packages) Encapsulate data structures and their operations Good cohesion implement Good coupling pass abstract objects as parameters Black boxes hide Topic a single abstraction data representations and algorithms Identifying Concurrency Inherent concurrency May involve synchronization Multiple objects receive events at the same time with out interacting Example: User may issue commands through control panel at same time that the sensor is sending status information to the SafeHome system Topic Determining Concurrent Tasks Thread of control Path through state diagram with only one active object at any time Threads of control are implemented as tasks Interdependent objects Examine state diagram to identify objects that can be implemented in a task Topic Management of Data Stores Data stores permit separations between subsystems Internal or external Common types of data stores Files Databases Topic File Data Stores When to use a database Require access to voluminous data at fine levels of detail by multiple users Access can be efficiently managed with DBMS commands Application must port across many HW and OS platforms Store is to be accessed by multiple application programs Topic Database Data Stores Advantages Infrastructure support Common interface Standard access language (SQL) Disadvantages Performance penalty Awkward programming language Topic File Data Stores When to use file data stores Data does not fit structure of DBMS Voluminous data that is low in information density “Raw” data Volatile data only Topic retained for a short time Global Resources Identify global resources and determine access patterns Examples physical units (processors, tape drives) available space (disk, screen, buttons) logical names (object IDs, filenames) access to shared data (database, file) Topic Software Control Mechanism How SW will control interactions between objects Internal control flow of control within a process External control flow of externally-visible events among objects Uniform control style for objects Topic Internal Control Under control of programmer Structured for convenience efficiency, clarity, reliability, . . . Common types of control flow Procedure calls Quasi-concurrent inter-task calls Concurrent inter-task calls Topic External Control Procedure-driven Event-driven Concurrent Topic systems systems systems Procedure-driven systems Control resides within the program code procedure issues request, waits for reply, then continues execution System Topic state defined by program counter, stack of procedure calls, local variables Event-Driven Systems Control resides within a central dispatcher calls to the dispatcher send output or enable input dispatcher invokes procedures when events occur (“call back”) state maintained using global variables, or by dispatcher for procedures Topic Concurrent Systems Control resides concurrently in independent tasks Events are implemented as messages between tasks OS Topic schedules tasks for execution Boundary Conditions Initialization Constants, parameters, global variables, tasks, guardians, class hierarchy Termination Release external resources, notify other tasks Failure Topic Clean up and log failure info Identify Trade-off Priorities Establish priorities for choosing between incompatible goals Implement minimal functionality initially and embellish as appropriate Isolate decision points for later evaluation Trade efficiency for simplicity, reliability, . . . Topic