design ch 8 and ch 12 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Design (Ch 8 and Ch 12) PowerPoint Presentation
Download Presentation
Design (Ch 8 and Ch 12)

Loading in 2 Seconds...

play fullscreen
1 / 46

Design (Ch 8 and Ch 12) - PowerPoint PPT Presentation


  • 97 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Design (Ch 8 and Ch 12)' - tivona


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
design ch 8 and ch 12

Design(Ch 8 and Ch 12)

Dan Fleck

CS 421

George Mason University

Coming up: What is the design phase?

what is the design phase
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

analysis design
Analysis --> Design

Coming up: Analysis --> Design

analysis design1
Analysis --> Design

Coming up: Analysis --> Design

analysis design2
Analysis --> Design

Coming up: Analysis --> Design

analysis design3
Analysis --> Design

Coming up: Oversimplification

oversimplification
Oversimplification

Analysis

Classes

Attributes

Operations

Relationships

Behavior

Design

Objects

Data Structs

Algorithms

Messaging

Control

Coming up: The Design Spec

the design spec
The Design Spec

Architecture 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

the design spec1
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

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

Coming up: Applied Design

applied design
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

good design
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

single responsibility principle
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

single responsibility example
Single Responsibility Example

Student

name

address

grades

fileToSave

calculate GPA

storeStudent

student name

student address

grades

which file we store the information in

Why might this class definition change?

Coming up: Example: Paperboy and the Wallet

example paperboy and the wallet
Example: Paperboy and the Wallet

Customer

getFirstName()

getLastName()

getWallet()

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

}

Wallet

addMoney(int a)

subtractMoney(int a)

countMoney()

What is wrong with this?

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

principle of least knowledge aka law of demeter
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

But not take them apart

Purpose: Reduce Coupling

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

principle of least knowledge aka law of demeter1
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 Coupling

Coming up: Example: Paperboy and the Wallet

example paperboy and the wallet1
Example: Paperboy and the Wallet

Customer

getFirstName()

getLastName()

getWallet()

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)

Wallet

addMoney(int a)

subtractMoney(int a)

countMoney()

What is wrong with this?

Coming up: Example: Paperboy and the Wallet

example paperboy and the wallet2
Example: Paperboy and the Wallet

Customer

getFirstName()

getLastName()

getPayment(int amt)

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

}

Wallet

addMoney(int a)

subtractMoney(int a)

countMoney()

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

interface segregation principle
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

interface segregation principle1
Interface Segregation Principle

How to add a robot?

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}

}

public class RobotWorker implements Worker {

public void work() {

// Do work }

public void eat() {

throw new NotImplementedException();

}

}

Coming up: Interface Segregation Principle – Fixed!

interface segregation principle fixed
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{ …}

Now each interface has one purpose

Coming up: Remove Cyclic Dependencies

remove cyclic dependencies
Remove Cyclic Dependencies
  • Do not have cyclic dependencies in your packages
  • Decomposition into independent modules
  • Why?

GUI

Logic

BusinessLogic

UserLogic

ErrorHandling

Coming up: Design Patterns

design patterns
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

singleton pattern
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)

singleton pattern in java
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)

factory gof95
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.

Client

Uses

Factory

Creates

Product

Coming up: Factory (GoF95)

factory gof951
Factory (GoF95)
  • Example:
    • http://www.devdaily.com/java/java-factory-pattern-example
factory gof952

<<interface>>

IEncryptFactory

CreateEncryption(Key): Encryption

Socket

Factory (GoF95)

Product

EncryptedSocket

Encryption

instance:IEncryptFactorycipher: Encryption

Encrypts/Decrypts with

encryptOut

decryptIn

Client

EncryptionFactory

RSAEncryption

Requests

Creation

DESEncryption

CreateEncryption(Key): Encryption

Creates

Factory

Coming up: Factory (GoF95)

factory gof953

<<interface>>

IEncryptFactory

CreateEncryption(Key): Encryption

Socket

Factory (GoF95)

Product

EncryptedSocket

Encryption

instance:IEncryptFactorycipher: Encryption

Encrypts/Decrypts with

encryptOut

decryptIn

Client

EncryptionFactory

RSAEncryption

Requests

Creation

DESEncryption

CreateEncryption(Key): Encryption

Creates

Factory

How do we add another encryption method?

Coming up: Command (GoF95)

command gof95

Abstract Command

MacroCommand

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/

+ manager:CmdMgr

*

Concrete Command

+doIt():bool

+undoIt():bool

- data

+doIt():bool

+undoIt():bool

+doIt():bool

+undoIt():bool

Coming up: Design Patterns Summary

flyweight gof95
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)

visitor gof95
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)

visitor gof951
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

visitor traversal example
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

visitor traversal example1
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

visitor diagram
Visitor Diagram

Object with

Structure

Bold

Spell Check

concrete

visitor

concrete

visitor

navigates

Individual

Elements

Visitor

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

visitor example different operation to collection of objects
Visitor Example – Different operation to collection of objects

public interface Visitor{

// Go through all data

public 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

visitor example different operation to collection of objects1
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

design patterns summary
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”

what makes a design bad
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.

From: http://www.objectmentor.com/resources/articles/dip.pdf

Coming up: Design Metrics

design metrics
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

design summary
Design Summary
  • The design phase is when you plan HOW you implement your analysis
  • Use
    • Design Principles
    • Design Patterns
    • Design Metrics

Coming up: References

references
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

what should you know
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