coming up: what is the design phase? design (ch 8 and ch 12) dan fleck cs 421 george mason...

46
Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Upload: duane-bell

Post on 31-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Coming up: What is the design phase?Coming up: What is the design phase?

Design(Ch 8 and Ch 12)

Dan FleckCS 421

George Mason University

Page 2: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

What is the design phase?

• Analysis phase describes what the system should do

• Analysis has provided a collection of classes and descriptions of the scenarios that the objects will be involved in. These functions are clustered in groups with related behavior.

• The design phase is to work out how the system should do these things. This is the goal of the design phase.

Coming up: Analysis --> Design

Page 3: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Analysis --> Design

Coming up: Analysis --> Design

Page 4: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Analysis --> Design

Coming up: Analysis --> Design

Page 5: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Analysis --> Design

Coming up: Analysis --> Design

Page 6: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Analysis --> Design

Coming up: Oversimplification

Page 7: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Oversimplification

Analysis

ClassesAttributesOperationsRelationshipsBehavior

Design

ObjectsData StructsAlgorithmsMessagingControl

Coming up: The Design Spec

Page 8: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

The Design SpecArchitecture Design -

• Layers of the software (e.g.model, view, controller (MVC))

• Categories of classes (e.g. UI, Business logic, interfaces)

Component design - • Description of classes/methods/algorithms• State machines for classes• (Think: individual classes)

UI design• sample screens• UI guidelines/standards we’re using • detailed description of how UI components work

Data design - • database design • data structures we’re using.Coming up: The Design Spec

Page 9: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

The Design Spec

But really, how do I create a design spec?

Find examples and use what you think is helpful from them!

http://www.mhhe.com/engcs/compsci/pressman/graphics/Pressman5sepa/common/cs2/design.pdf

http://www.cmcrossroads.com/bradapp/docs/sdd.html

Coming up: The Design Spec

Page 10: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

The goal of design is to think with your brain, not your hands! - Dan Fleck

Coming up: Applied Design

Page 11: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Applied Design

We know what to do now, but that is just a set of documents..

How do we create a GOOD design?

Coming up: Good Design

Page 12: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Good Design

• Design Principles– What should you try to do.

• Design Patterns– How have people done it before you?

• Design Metrics– How do you know you have done it

well?

Coming up: Single Responsibility Principle

Page 13: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Single Responsibility Principle

• Each class should have a single overriding responsibility (high cohesion)

• Each class has only one reason for why it should change

Coming up: Single Responsability Example

Page 14: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Single Responsibility

Example

Coming up: Example: Paperboy and the Wallet

StudentnameaddressgradesfileToSavecalculate GPAstoreStudent

Why might this class definition change?

Why might this class definition change?

student namestudent name

student addressstudent address

gradesgrades

which file we store the information inwhich file we store the information in

Page 15: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Example: Paperboy and the Wallet

CustomergetFirstName()getLastName()getWallet()

WalletaddMoney(int a)subtractMoney(int

a)countMoney()

PaperBoy’s getPayment method:payment = 2.00; // “I want my two

dollars!” Wallet theWallet =

myCustomer.getWallet(); if (theWallet.getTotalMoney() >

payment) { theWallet.subtractMoney(payment);

} else { // come back later and get my money

} Coming up: Principle of Least Knowledge (aka Law of Demeter)

What is wrong with this? What is wrong with this?

Page 16: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Principle of Least Knowledge (aka Law of

Demeter)• “Only talk to your immediate friends”• Object O has a method M.

– M may call other methods in O– M may call methods of any object passed

into the method– M may call methods of any object it

creates– M can call methods on any object

contained in O

Purpose: Reduce CouplingComing up: Principle of Least Knowledge (aka Law of Demeter)

But

not

take

them

ap

art

But

not

take

them

ap

art

Page 17: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Principle of Least Knowledge (aka Law of

Demeter)Simplified:• I can play by myself• I can play with toys given to me• I can play toys I made myself • I can play with my own toys (but

not take them apart)

Purpose: Reduce CouplingComing up: Example: Paperboy and the Wallet

Page 18: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Example: Paperboy and the Wallet

CustomergetFirstName()getLastName()getWallet()

WalletaddMoney(int a)subtractMoney(int

a)countMoney()

Bad because the paperboy needs to know about the Wallet (violation of principle of least knowledge), and also the customer has to hand the wallet to the paperboy (unrealistic)

Bad because the paperboy needs to know about the Wallet (violation of principle of least knowledge), and also the customer has to hand the wallet to the paperboy (unrealistic)

Coming up: Example: Paperboy and the Wallet

What is wrong with this? What is wrong with this?

Page 19: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Example: Paperboy and the WalletCustomer

getFirstName()getLastName()getPayment(int

amt)

WalletaddMoney(int a)subtractMoney(int

a)countMoney()

PaperBoy’s getPayment method:payment = 2.00; // “I want my two

dollars!” int amt=

myCustomer.getPayment(payment);

if (amt >= payment) { // say thanks!

} else { // come back later and get my money

}

Better – paperboy only accesses what he needs and models the real world!

Better – paperboy only accesses what he needs and models the real world!

This example from: http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/demeter.pdf

Coming up: Interface Segregation Principle

Page 20: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Make

Page 21: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Interface Segregation Principle

• Don’t make large multipurpose interfaces – instead use several small focused ones.

• Don’t make clients depend on interfaces they don’t use.

• Class should depend on each other through the smallest possible interface.

• Why? When I change something I want to minimize changes for everyone else.

Coming up: Interface Segregation Principle

Page 22: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Interface Segregation Principle

public interface Worker {public void eat();

public void work();}

public class OfficeWorker implements Worker{public void work() {// ....working}public void eat() {// .... eating in lunch break}

}

Coming up: Interface Segregation Principle – Fixed!

How to add a robot?

public class RobotWorker implements Worker {

public void work() { // Do work }

public void eat() {throw new NotImplementedException();

}}

public class RobotWorker implements Worker {

public void work() { // Do work }

public void eat() {throw new NotImplementedException();

}}

Page 23: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Interface Segregation Principle – Fixed!

public interface Worker {public void work();

}

public interface Eater{public void eat();

}

public class OfficeWorker implements Worker, Eater{ … }

public class RobotWorker implements Worker{ …}

Coming up: Remove Cyclic Dependencies

Now each interface has one purpose

Now each interface has one purpose

Page 24: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Remove Cyclic Dependencies

• Do not have cyclic dependencies in your packages

• Decomposition into independent modules

• Why?GUI

Logic

UserLogic BusinessLogic

ErrorHandlingComing up: Design Patterns

Page 25: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Design Patterns • Proven solutions to common problems• Capture design expertise• Aid in meeting quality metrics

• Core patterns are from the “Gang of Four (GoF)”OOPSLA - 1994

Coming up: Singleton Pattern

Page 26: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Singleton Pattern

• Problem: I want to limit the application to only one instance of a particular class, but need global access to that class.

• Normally used to control access to key resources.

• Solution?

override new, make static accessor method.

Coming up: Singleton Pattern (in Java)

Page 27: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Singleton Pattern (in Java)

public class MySingleton {

private static MySingleton instance;

private MySingleton() { // do anything you need to do }

public static MySingleton getInstance() { if (instance == null) instance = new MySingleton(); return instance; }}

Coming up: Factory (GoF95)

Page 28: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Factory (GoF95)• Define an interface for a group of objects• Create a Factory to decide which specific object needs

to be instantiated

• The goal: decouple knowledge of the object instantiation from the Class that needs the object.

• Can also be used when a complex initialization of objects is necessary, for instance when aggregation is heavily used.

• Can also be used to take advantage of memory-optimization like object pools, cached objects, etc.

Coming up: Factory (GoF95)

ClientClient FactoryFactory ProductProductUsesUses Creates

Creates

Page 29: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Factory (GoF95)

• Example:– http://www.devdaily.com/java/java-

factory-pattern-example

Page 30: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Factory (GoF95)Encryption

encryptOutdecryptIn

DESEncryption RSAEncryption

Socket

EncryptedSocket

instance:IEncryptFactorycipher: Encryption

<<interface>>IEncryptFactory

CreateEncryption(Key): Encryption

RequestsCreation

EncryptionFactory

CreateEncryption(Key): EncryptionCreates

Encrypts/Decrypts with

Coming up: Factory (GoF95)

Client

Product

Factory

Page 31: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Factory (GoF95)Encryption

encryptOutdecryptIn

DESEncryption RSAEncryption

Socket

EncryptedSocket

instance:IEncryptFactorycipher: Encryption

<<interface>>IEncryptFactory

CreateEncryption(Key): Encryption

RequestsCreation

EncryptionFactory

CreateEncryption(Key): EncryptionCreates

Encrypts/Decrypts with

Coming up: Command (GoF95)

How do we add another encryption method?

How do we add another encryption method?

Client

Product

Factory

Page 32: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Concrete Command

Command (GoF95)• Encapsulate commands in objects, so

we can queue them, undo them or make macros.

• http://twit88.com/blog/2008/01/26/design-pattern-in-java-101-command-pattern-behavioral-pattern/Abstract Command

+doIt():bool+undoIt():bool MacroCommand

+doIt():bool+undoIt():bool +doIt():bool

+undoIt():bool

- data

*+ manager:CmdMgr

Coming up: Design Patterns Summary

Page 33: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Flyweight (GoF95)• I have a bunch of classes, each takes up a lot

of memory, so I need to minimize the number of them I am using.

• Instances of the objects contain the same information and can be used interchangeably

• Avoid the expense of multiple instances.

• Example: DocChar class used to hold characters in a line of text. Picture is stored once, location is stored for every instance.

Coming up: Visitor (GoF95)

Page 34: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor (GoF95)

• If you need to perform an operation in multiple objects in a complex structure you could create the logic in each class.

• OR…the visitor pattern creates a single class that implements the logic and knows how to “visit” each object in your complex structure

Coming up: Visitor (GoF95)

Page 35: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor (GoF95)• I need to apply different operations

to a collection of objects. • I want to centralize these operations • I want to reduce coupling • For example in a word processor,

grammar check, spell check, table of contents builder, outliner all need to traverse the document.– Solution: Create a Visitor to visit the

whole document and apply the operation given

Coming up: Visitor Traversal Example

Page 36: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor Traversal Example

• root.accept(theVisitor);• accept(Visitor visitor )

visitor.visit( this ); // Do operation for each child of mine

child.accept( visitor ) // Visit children

• All children are visited, but the caller doesn’t need to know “how”

• Supports multiple class types also…

Coming up: Visitor Traversal Example

Page 37: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor Traversal Example

• visit(Document node); • visit(Sentence node);• visit(Word w);

• The correct version is called based on the runtime type of the child! (Hello Polymorphism!)

Coming up: Visitor Diagram

Page 38: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor Diagram

Object withStructure

Individual ElementsVisitor

navigates

concretevisitor

concretevisitor

Coming up: Visitor Example – Different operation to collection of objects

Spell CheckBold

Page 39: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor Example – Different operation to collection of

objectspublic interface Visitor{

// Go through all datapublic void visitCollection(Collection collection);

// Handle specific types public void visitString(String string);

public void visitFloat(Float float);}

public interface Visitable{ public void accept(Visitor visitor);

}

Coming up: Visitor Example – Different operation to collection of objects

Page 40: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Visitor Example – Different operation to collection of objects

public class VisitableString implements Visitable { private String value; public VisitableString(String string) {

value = string; }

public void accept(Visitor visitor) { visitor.visitString(this); // Call correct method for this

object }}

// Do the same for other types (Float, etc…)

Coming up: What should you know

Page 41: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Design Patterns Summary

• Many design patterns exist• Implementations are usually

available in every language• Use them as guides where

appropriate and make sure you understand the tradeoffs for each one. They usually need to be modified for YOUR situation.

Coming up: What makes a design “bad”

Page 42: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

What makes a design “bad”

• Rigidity: It is hard to change because every change affects too many other parts of the system.

• Fragility: When you make a change, unexpected parts of the system break.

• Immobility: It is hard to reuse in another application because it cannot be disentangled from the current application.

Coming up: Design MetricsFrom: http://www.objectmentor.com/resources/articles/dip.pdfFrom: http://www.objectmentor.com/resources/articles/dip.pdf

Page 43: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Design Metrics

• Class Size• Methods per class• Lack of Cohesion (count of

methods with dissimilar purpose)• Coupling Between Classes (count of

other classes that this class refers to)• Depth of Inheritance Tree• Method Complexity - tools can do this

Coming up: Question

Page 44: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

Design Summary

• The design phase is when you plan HOW you implement your analysis

• Use – Design Principles– Design Patterns– Design Metrics

Coming up: References

Page 45: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

References• Luc Berthouze, University of Sussex,

http://www.informatics.sussex.ac.uk/users/lb203/se/SE08.pdf

• Robert Martin, Principles and Patterns, http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf

• Bob Waters, Georgia Tech, CS2340 Slides, http://www.cc.gatech.edu/classes/AY2007/cs2340_summer/

• http://www.surfscranton.com/architecture/VisitorPattern.htm

• http://www.oodesign.com/interface-segregation-principle.html

Coming up: Dependency Inversion Principle

Page 46: Coming up: What is the design phase? Design (Ch 8 and Ch 12) Dan Fleck CS 421 George Mason University

What should you know

• Analysis = what the system should do• Design = how it should do it• Meaning of the parts of the design spec• Design Principles:

– Single Responsibility Principle - write it– Law of Demeter. Describe it and state why it is good.– Why you need to remove cyclic dependencies

• Metrics– Definition of cohesion and coupling - what it means!

• Be able to describe patterns - singleton, factory, command

End of presentation