Design Process Overview. At Each Level of Abstraction. Design Phases. Design Phases James M. Bieman

Similar documents
Software Design Fundamentals. CSCE Lecture 11-09/27/2016

An Introduction to Patterns

An Introduction to Patterns

Architectural Design

5/9/2014. Recall the design process. Lecture 1. Establishing the overall structureof a software system. Topics covered

Design Concepts and Principles

Object-Oriented Design

Design Patterns. Observations. Electrical Engineering Patterns. Mechanical Engineering Patterns

Appendix A - Glossary(of OO software term s)

ADVANCED SOFTWARE DESIGN LECTURE 4 SOFTWARE ARCHITECTURE

CAS 703 Software Design

Patterns Architectural Styles Archetypes

Architectural Design

Modellistica Medica. Maria Grazia Pia, INFN Genova. Scuola di Specializzazione in Fisica Sanitaria Genova Anno Accademico

Software Design. Software design is a blueprint or a plan for a computerbased solution for system

Socket attaches to a Ratchet. 2) Bridge Decouple an abstraction from its implementation so that the two can vary independently.

Software Architecture

DS 2009: middleware. David Evans

be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate

CHAPTER 9 DESIGN ENGINEERING. Overview

Design Patterns V Structural Design Patterns, 2

ACRONYMS AND GLOSSARY

Design Pattern. CMPSC 487 Lecture 10 Topics: Design Patterns: Elements of Reusable Object-Oriented Software (Gamma, et al.)

System Design. Design: HOW to implement a system

Modellistica Medica. Maria Grazia Pia, INFN Genova. Scuola di Specializzazione in Fisica Sanitaria Genova Anno Accademico

Chapter 6 Architectural Design. Lecture 1. Chapter 6 Architectural design

Design Concepts. Slide Set to accompany. Software Engineering: A Practitioner s Approach, 7/e by Roger S. Pressman

Introduction to Software Engineering 10. Software Architecture

Design Pattern What is a Design Pattern? Design Pattern Elements. Almas Ansari Page 1

Summary of the course lectures

Establishing the overall structure of a software system

Software Paradigms (Lesson 10) Selected Topics in Software Architecture

CS342: Software Design. November 21, 2017

System Design. Design Issues. System Design. System Design. Design: HOW to implement a system. Strategic vs. Local Design Decisions.

Design: HOW to implement a system

DESIGN PATTERN - INTERVIEW QUESTIONS

Software Design Patterns. Background 1. Background 2. Jonathan I. Maletic, Ph.D.

System types. Distributed systems

Architectural Design

Objectives. Architectural Design. Software architecture. Topics covered. Architectural design. Advantages of explicit architecture

Architectural Design. Architectural Design. Software Architecture. Architectural Models

The Strategy Pattern Design Principle: Design Principle: Design Principle:

Lecture 1. Chapter 6 Architectural design

What are the characteristics of Object Oriented programming language?

Produced by. Design Patterns. MSc in Communications Software. Eamonn de Leastar

INTERNAL ASSESSMENT TEST III Answer Schema

SDC Design patterns GoF

Component Design. Systems Engineering BSc Course. Budapest University of Technology and Economics Department of Measurement and Information Systems

Software Design COSC 4353/6353 D R. R A J S I N G H

CSE 70 Final Exam Fall 2009

Object Oriented Paradigm

02 - Distributed Systems

Introduction to System Design

Trusted Components. Reuse, Contracts and Patterns. Prof. Dr. Bertrand Meyer Dr. Karine Arnout

Software Engineering (CSC 4350/6350) Rao Casturi

Using Design Patterns in Java Application Development

System Design. Acknowledge: Atlee and Pfleeger (Software Engineering: Theory and Practice)

UNIT III. Software Design

Design Engineering. Overview

SOFTWARE PATTERNS. Joseph Bonello

1 Software Architecture

Topics in Object-Oriented Design Patterns

OO Frameworks. Introduction. Using Frameworks

INTRODUCTION TO Object Oriented Systems BHUSHAN JADHAV

Lectures 24 and 25 Introduction to Architectural Styles and Design Patterns

Software Design and Analysis CSCI 2040

Idioms and Design Patterns. Martin Skogevall IDE, Mälardalen University

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Distributed and Agent Systems

Darshan Institute of Engineering & Technology for Diploma Studies

Implementation Architecture

Overview of Patterns: Introduction

An Introduction to Software Architecture. David Garlan & Mary Shaw 94

Communication. Distributed Systems Santa Clara University 2016

Application Architectures, Design Patterns

Chapter 6 Architectural Design. Chapter 6 Architectural design

Patterns for polymorphic operations

Software Architecture Patterns

APPLYING DESIGN PATTERNS TO SCA IMPLEMENTATIONS

Lecture 20: Design Patterns II

From Module To Objects

The Design Patterns Matrix From Analysis to Implementation

09. Component-Level Design

Architectural Design. CSCE Lecture 12-09/27/2016

Software Engineering Fall 2015 (CSC 4350/6350) TR. 5:30 pm 7:15 pm. Rao Casturi 11/03/2015

Engr. M. Fahad Khan Lecturer Software Engineering Department University Of Engineering & Technology Taxila

Distributed Object-Based Systems The WWW Architecture Web Services Handout 11 Part(a) EECS 591 Farnam Jahanian University of Michigan.

Software Metrics and Design Principles. What is Design?

Keywords: Abstract Factory, Singleton, Factory Method, Prototype, Builder, Composite, Flyweight, Decorator.

UNIT I. 3. Write a short notes on process view of 4+1 architecture. 4. Why is object-oriented approach superior to procedural approach?

OODP Session 4. Web Page: Visiting Hours: Tuesday 17:00 to 19:00

Architectural Design. Topics covered. Architectural Design. Software architecture. Recall the design process

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

Component-Level Design. Slides copyright 1996, 2001, 2005, 2009 by Roger S. Pressman. For non-profit educational use only

Hospitality Industry Technology Integration Standards Glossary of Terminology

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 6: Design Patterns

Introduction to Software Engineering: Object Design I Reuse & Patterns

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

02 - Distributed Systems

Software Architecture

Architectural Blueprint The 4+1 View Model of Software Architecture. Philippe Kruchten

Transcription:

CS314, Colorado State University Software Engineering Notes 4: Principles of Design and Architecture for OO Software Focus: Determining the Overall Structure of a Software System Describes the process of software design. Provides guidelines to develop & assess high-quality software designs & design components. Overview of architectural structures & control options. Design Patterns. 4-1 4-2 Design Process Overview Software design involves deriving a solution to the problem to be solved via a software system. Software design: an abstract model of the system to be built to solve the problem. The development of a solution involves model derivation at several levels of abstraction. We move from an informal design towards a fully formal implementation. At Each Level of Abstraction 1. Study and understand the problem. 2. Identify one or more solutions. Choose a solution based on a designer's experience and available resources. 3. Describe the solution abstractions or models. Use graphical,formal, or other notations. 4-3 4-4 Design Phases Design Phases System architecture: define connections between the system & external entities. Architectural design: identify subsystems. Interface design: sub-system interfaces. Component design: decompose subsystems into components. Data structure design: data structures to represent state information. Algorithm design: component implementations. 4-5 4-6 4-1

Design Quality Goals Most efficient: make the most efficient use of resources. Cheapest: minimize development cost. Use a minimum of development time. Most maintainable: the system design is easy to understand and easy to modify. Maintenance costs predominate. Design Principles [Al Davis] Consider alternatives. Don't just use the first design idea. Don't reinvent the wheel. Minimize intellectual distance from the problem. 4-7 4-8 Design Principles [Al Davis] The design should exhibit uniformity. The design structure should accommodate change. Structure the design so that it can degrade gently. Review the design to minimize conceptual errors. Components & Their Context Component: a piece of a design. A class or a collection of classes. A unit of composition with contractually specified interfaces & explicit context dependencies [Szyperski 1998]. 4-9 4-10 Component Parts 1. Interface: contract between component & users. 2. Secrets: hidden from component users. Component Design Quality: Cohesion Do component parts belong together? A design component should implement a single logical entity or functionality. When components are cohesive, change can be localized. A change can be limited to a single component. We aim for strong cohesion. 4-11 4-12 4-2

Cohesion Levels: From Weakest to Strongest. Cohesion Levels: From Weakest to Strongest. 1. Coincidental cohesion (weak): unrelated parts are bundled together. 2. Logical association (weak): component parts with similar functionality are grouped together. 3. Temporal cohesion (weak): component parts that run at the same time are grouped. 4. Procedural cohesion (weak): component parts make up a single control sequence. 5. Communicational cohesion (medium): component elements operate on the same input or produce the same output. 6. Sequential cohesion (medium): output of one component part is the input to another part. 4-13 4-14 Cohesion Levels: From Weakest to Strongest. 7. Functional cohesion (strong): each component part is necessary for the execution of a single function. 8. Object cohesion (strong): each operation provides functionality that allows object attributes to be modified or inspected. Coincidental Cohesion Example int f(int i, float x, float y) { count++; println("sum is: " + (x+y)); return(i + count); } 4-15 4-16 Temporal Cohesion Example Communicational Cohesion void initialize {...} void cleanup {...} void a2c(file data, char choice) { switch (choice) case `a':... read data...; break; case `b':... write data to disk...; break; case `c':... generate data reports;... } 4-17 4-18 4-3

Component Coupling How strong are the interconnections between components? Loose (or weak) coupling: a change to one component is not likely to affect other components. Shared variables or control information exchange leads to tight (or strong) coupling. Aim for weak coupling. Coupling in the CIV System 60 Classes 10 KLOC 150 Classes with 3rd party classes. 4-19 4-20 Detailed Call-Graph of CIV CIV Class Inheritance Graph Shows 3% of the entire call graph. Shows 20% of the entire graph. 4-21 4-22 AdventureGame Design-level Class Model Revised AdventureGame Design 4-23 4-24 4-4

An Architectural View of the AdventureGame Design Tight Coupling Due to Shared Data Shared Data Module A Module B Module C 4-25 4-26 Loose Coupling Through Message Passing Module A A s Data A s Services Module B B s Data B s Services Module C C s Data C s Services No shared data. Classes are also coupled to their super-classes. Aim for weak or loose coupling. Aim for less coupling. Minimize the number of couplings and avoid promiscuity! Coupling 4-27 4-28 Coupling Levels: From Weak to Strong Coupling Coupling Levels: From Weak to Strong Coupling 1. No coupling: modules have no links. 2. Data coupling (low): modules are coupled via simple argument lists. 3. Stamp coupling (low): modules are coupled via a portion of an argument's data structure. 4. Control coupling (moderate): A control flag is passed as a parameter. 5. External coupling (high): modules are coupled to an external environment. 4-29 4-30 4-5

Coupling Levels: From Weak to Strong Coupling 6. Common coupling (high): common references to a global variable. 7. Content coupling (highest): module uses information inside another module, or branches into the middle of a module. Increasing Cohesion & Reducing Coupling 1. Evaluate the first iteration of a program. Explode (split) or implode (merge) modules to improve cohesion or coupling. 2. Minimize structures with high fan-out; Strive for fan-in. Fan-out: the other modules affected by a module. Fan-in: the modules that affect a module. 3. Keep the scope of module effect within the scope of the control of that module. 4-31 4-32 Increasing Cohesion & Reducing Coupling 4. Evaluate module interfaces to reduce complexity, redundancy, and improve consistency. 5. Define modules whose function is predictable, but avoid modules that are overly restrictive. 6. Strive for controlled entry modules. Seek Module Understandability Can a module be understood on its own? Good designs: Use meaningful names; names should reflect the intent of a construct, not its implementation. Have accurate design documentation. Avoid complexity. A module must be understood in its design context. 4-33 4-34 Architectural Configurations Pipeline Architecture Example: Compiler Design Hierarchical (tree) structures are common: inheritance & composition. Pipeline architectures: compilers. Layered: operating systems. Client servers. Source code Lexical Analyzer tokens Syntax Analyzer parse tree Semantic Analyzer Executable code 4-35 4-36 4-6

Layered or Abstract-Machine Architecture Distributed Architectures: Client/Server Systems Level 1 Data base Level 0 OS Level 2 Application Client: service user. Server: service provider. Clients & Servers can reside on different computers. Key concern: the interface connecting clients and servers. 4-37 4-38 Linking C/S Components Client/Server Components Pipes: used in UNIX/Linus systems. Remote procedure/method calls: invoke program on a different machine. rmi in Java Client/server SQL interaction: for database queries. GUI: usually runs on the client. Application: may run on either client or server. Database management: usually runs on server. Middleware: connects client & servers. Network OS support. Object-request brokers. Communication management. 4-39 4-40 Object-Request Broker (ORB) CORBA Architecture Client object sends message to encapsulated server object. An ORB intercepts the message & manages the communication. Finds the server object. Invokes server object methods. Passes data between client & server. Client IDL ORB ORB IDL Client Obj Impl IDL Client Obj Impl IDL IDL ORB ORB IDL Obj Impl 4-41 4-42 4-7

Control Options Centralized Control: Call - Return Model Centralized control: Call-return model uses a hierarchy of components. Manager model for concurrent systems. Controller that spawns tasks. Broadcast event-driven control: Subsystems register interest in events. Event handler notifies registered entities when an event occurs. Main C1 C2 C3 C1.1 C1.2 C3.1 4-43 4-44 Centralized Control: Manager Model for Concurrent Systems Broadcast Model for Event - Driven Control Sensor Process Actuator Process Event Handler System Controller Computation Process User Interface Fault Handler Subsystem 1 Subsystem 2 Subsystem N 4-45 4-46 Interrupt-Driven Mechanism Interrupt handler for each type of interrupt. Each interrupt type is associated to a specific memory location. A hardware switch transfers control to a handler. Switching is very fast. Very difficult to test & validate. Object-Oriented Design Patterns Design pattern: Each pattern describes a problem which occurs over and over again and then describes the core of the solution [Christopher Alexander]. Design patterns focus on flexible designs --- designs that can be more easily adapted and reused. 4-47 4-48 4-8

Design Patterns What is a Design Pattern? We learn from experience. Design pattern purpose: codify good solutions to common design problems. Allows us to take advantage of the experiences of other software engineers. Idioms for structuring objectoriented designs. Pattern structure: 1. Pattern name. 2. Problem solved by the pattern. 3. Solution. 4. Consequences. 4-49 4-50 Façade Design Pattern Façade Example Provides a unified interface to a set of interfaces in a subsystem. Defines a higher level interface for use by external clients. Minimizes dependencies between subsystems. A Façade object, rather than internal subsystem objects, becomes the client of all external clients. Clients need not know or depend upon details of the subsystems design. Client 1 Client 2 System Without Façade Client 1 Client 2 Façade System With Façade 4-51 4-52 Façade in the AdventureGame Design Model-View-Controller (MVC) Pattern A computer should look like an appliance: A TV, radio, calculator, microwave, etc. Appliances have: A view: TV screen, radio dial, etc. Controls: switches, buttons dials. Functional parts: the model. 4-53 4-54 4-9

MVC Pattern For GUI Software MVC Components User interfaces are commonly modified. New functionality requires new & updated menus. User interfaces are often adapted for specific customers. User interfaces are often ported to new platforms. User interfaces should not be tightly coupled to the functional code. Model: the core functionality of the system. This functionality is independent of the output representation or the input behavior. Registers views and controllers. Notifies them when the model state changes. 4-55 4-56 MVC Components MVC Components View: components that display information. Multiple views are allowed. View objects register with the model. They retrieve data from the model when notified of an update. Controller: the input component. There may be a controller for each view. The controller receives input. It interprets mouse movement, buttons, and/or keyboard input. Inputs are received as events, which are translated by the controller into requests for service. Service requests are sent to the model or view. Users interact solely via controllers. 4-57 4-58 Model-View-Controller Views Are Easily Changed 50 20 30 OK Monitor 50 20 30 View 2 Controller View 1 50 20 30 Model Change a menu into a GUI. Add a new display device. Change appearance of screens. No need to change the main functionality (the model). 4-59 4-60 4-10

MVC Class Model MVC Scenario 1 User input changes the model, views, & controller. 1. Controller accepts user input & requests services of the model. 2. Model performs the service changing model data. 3. Model notifies all registered views & controllers. 4. Views request changed data from model & redisplays changed data & updates menus. 5. Control return to original controller. 4-61 4-62 MVC Scenario 2 Simplified MVC MVC initialization: 1. Model instance is created & its data. 2. For each view: 1. View object is created; It has a reference to the model. 2. View registers with the model. 3. View creates its controller, passing a reference to the model & itself. 4. Controller registers with the model. 3. The application begins to respond to events. Full MVC may not be needed. Key: separate the MVC functionalities. Simple MVC for AdventureGame.java: View object wrapper with a View.displayText() method. Add View attributes to Classes that need it, which are set when initializing the model. CaveGame object acts as the controller. 4-63 4-64 Abstract Factory Pattern Abstract Factory Implementation Mechanisms Allows us to construct an object configuration, without specifying the components. Provides an interface for creating families of related objects without specifying their concrete classes. Supports: Systems that should be independent of how its products are created, composed, and represented. Configuring a system with one of multiple families of products. The method that constructs the configuration has a factory object as a parameter. The factory object actually instantiates the objects. Client knows only about abstract classes (or interface). 4-65 4-66 4-11

Analogy Abstract Factory Structure We need to build a car, but don t know what kind of car you are building. Cars are built the same way: all have engines, wheels, seats, brakes, etc. The specific parts differ between models. We specify the construction, but not the specific parts using Abstract Factory. 4-67 4-68 Example For Adventure Cave Object Configuration Cave configuration may remain the same, but we may have different kinds of rooms, walls, etc. for different levels. We describe the cave labyrinth in terms of abstract entities or interfaces. We define a different concrete factory for each level. Possible Code Structure interface CaveFactory { Door makedoor(cavesite in, Key k, CaveSite out); Wall makewall(); Room makeroom(); Player makeplayer(); Key makekey(); } 4-69 4-70 Building a Cave Configuration public class Labyrinth{ public Room createlabyrinth(cavefactory f) { Room outside = f.makeroom(); Room cell = f.makeroom(); Key k = f.makekey(); } Door d = f.makedoor(outside, k, cell);. return cell; Use a different CaveFactory for each level Level 1 Concrete Cave Factory Class Level1CaveFactory implements CaveFactory { // Builds Level 1 rooms, walls, doors, Door makedoor(cavesite in, Key k, CaveSite out){ } Wall makewall() { } Room makeroom() { } Player makeplayer() { } Key makekey() { } } 4-71 4-72 4-12

Level 2 Concrete Cave Factory Class Level2CaveFactory implements CaveFactory { // Builds Level 2 rooms, walls, doors, Door makedoor(cavesite in, Key k, CaveSite out){ } Wall makewall() { } Room makeroom() { } Player makeplayer() { } Key makekey() { } } With Abstract Factory Pattern You don t have to modify code in the basic cave system structure to change levels. A Concrete Factory can extend another Concrete Factory. A Level n+1 factory can extend a Level n factory. 4-73 4-74 Broker Pattern for Client/Server Architectures Broker Components Decouples clients and servers. Servers register with the brokers. Clients send brokers requests for services. Brokers locate an appropriate server, forwards request to server, and transmits results back to the client. Clients don t deal with low-level communication details. Allows dynamic change, addition, deletion, & relocation of objects. Clients: access servers. Example: WWW browsers. Need not know the location of servers. Servers: implements objects. Export interfaces: interface definition language (IDL) or a binary standard. Example: WWW servers give access to HTML pages, CGI scripts, applets. 4-75 4-76 Broker Components Broker Components Brokers: Transmits requests from client to server & results from server to client. Must have a way to locate & activate servers. Offers: APIs to clients & servers. operations to register servers. Operations to invoke server methods. May pass a request to a remote broker. Client-side proxies: layer between clients and the broker. Allows a remote object to appear to be local. Hides implementation details from client. Server-side proxies: layer between servers & broker. Unpack incoming messages. Bridges: hide implementation details when 2 brokers communicate. 4-77 4-78 4-13

Broker Pattern Structure Broker Scenario 1 Server registers with the local broker: 1. Broker is initialized, then enters event loop. 2. User starts a server application. It registers with the broker. 3. The broker receives the registration request, records & acknowledges it. 4. Server waits for incoming client requests. 4-79 4-80 Broker Scenario 2 Broker Scenario 2 Client sends a request to a local server: 1. Client invokes a remote server object method. 2. Client-side proxy packages parameters into a message and sends it to the local broker. 3. The broker finds location of the server & sends the message to the server-side proxy. 4. Server-side proxy unpacks parameters etc and invokes the requested service. 5. Server returns result to server-side proxy, which packages it into a message & sends it to the broker. 6. The broker forwards the response to the client-side proxy. 7. The client-side proxy unpacks the results & returns it to the client. 4-81 4-82 Broker Scenario 3 Broker Pattern Examples Interaction between remote brokers using bridges: 1. Broker A receives an incoming request. It locates the remote server & forwards the request to a remote broker. 2. Bridge Message is passed from Broker A to Bridge A. 3. A converts the message to a common protocol & sends the message to Bridge B at the server site. 4. Bridge B maps the request into a Broker B format. 5. Broker B handles the request. CORBA: common object request broker architecture, an Object Management Group (OMG) standard, with an Interface Definition Language (IDL). IBM SOM/DSOM. Microsoft OLE: defines a binary standard for accessing server interfaces. The WWW. 4-83 4-84 4-14

Summary The design process aims to refine solution models until they can run. Design quality involves modules with high cohesion and weak coupling. Architectures represent coherent highlevel views of system structure. Overall structure: hierarchical, pipelines, layers, client/server. Control structure: centralized, decentralized. Architectural design patterns: Model-View-Controller. Broker. Abstract Factory. 4-85 4-15