31
COP 3331 Object Oriented Analysis and Design 1 Object Design Object design is the process of adding details to the requirements analysis and making implementation decisions The object designer must choose among different ways to implement the analysis model with the goal to minimize execution time, memory and other measures of cost. Requirements Analysis: The functional model and the dynamic model deliver operations for the object model Object Design: We decide on where to put these operations in the object model Object design serves as the basis of implementation

Object Design

  • Upload
    efrat

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

Object Design. Object design is the process of adding details to the requirements analysis and making implementation decisions The object designer must choose among different ways to implement the analysis model with the goal to minimize execution time, memory and other measures of cost. - PowerPoint PPT Presentation

Citation preview

Page 1: Object Design

COP 3331 Object Oriented Analysis and Design 1

Object Design

Object design is the process of adding details to the requirements analysis and making implementation decisions

The object designer must choose among different ways to implement the analysis model with the goal to minimize execution time, memory and other measures of cost.

Requirements Analysis: The functional model and the dynamic model deliver operations for the object model

Object Design: We decide on where to put these operations in the object model

Object design serves as the basis of implementation

Page 2: Object Design

COP 3331 Object Oriented Analysis and Design 2

Object Design: Closing the Gap

Custom objects

Application objects

Off-the-shelf components

Solution objects

System Problem

Machine

System design gap

Object design gap

Requirements gap

Page 3: Object Design

COP 3331 Object Oriented Analysis and Design 3

Developers play different Roles during Object Design

Developer

Call Class

Class Extender

Class Implementor

Class User

Realize Class

Refine Class

Page 4: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 4

Class user versus Class Extender

Game

TicTacToe Chess

League

Tournament

1

*

Developers responsible for the implementation of League are

class users of Game

The developer responsible for the implementation of TicTacToe

is a class extender of Game

Developers responsible for the implementation of Game are

class implementors

Page 5: Object Design

COP 3331 Object Oriented Analysis and Design 5

Specifying Interfaces

Requirements analysis activities Identifying attributes and operations without specifying

their types or their parameters. Object design: Three activities

1. Add visibility information 2. Add type signature information3. Add contracts

Page 6: Object Design

COP 3331 Object Oriented Analysis and Design 6

1. Add Visibility Information

UML defines three levels of visibility: Private (Class implementor):

A private attribute can be accessed only by the class in which it is defined.

A private operation can be invoked only by the class in which it is defined.

Private attributes and operations cannot be accessed by subclasses or other classes.

Protected (Class extender): A protected attribute or operation can be accessed by the class in

which it is defined and on any descendent of the class. Public (Class user):

A public attribute or operation can be accessed by any class.

Page 7: Object Design

COP 3331 Object Oriented Analysis and Design 7

Implementation of UML Visibility in Java

public Tournament(League l, int maxNumPlayers)

public int getMaxNumPlayers() {…};public List getPlayers() {…};public void acceptPlayer(Player p) {…};public void removePlayer(Player p) {…};public boolean isPlayerAccepted(Player p)

{…};

Tournament- maxNumPlayers: int

+ acceptPlayer(p:Player)+ removePlayer(p:Player)

+ getMaxNumPlayers():int+ getPlayers(): List

+ isPlayerAccepted(p:Player):boolean

public class Tournament {private int maxNumPlayers;

Page 8: Object Design

COP 3331 Object Oriented Analysis and Design 8

Information Hiding Heuristics

Carefully define the public interface for classes as well as subsystems (façade)

Always apply the “Need to know” principle. Only if somebody needs to access the information, make it publicly

possible, but then only through well defined channels, so you always know the access.

Fewer public operations less likely class will be affected by any changes the easier the class can be changed

Trade-off: Information hiding vs efficiency Accessing a private attribute might be too slow (for example in real-

time systems or games)

Page 9: Object Design

COP 3331 Object Oriented Analysis and Design 9

Information Hiding Design Principles

Only the operations of a class are allowed to manipulate its attributes

Access attributes only via operations. Hide external objects at subsystem boundary

Define abstract class interfaces which mediate between system and external world as well as between subsystems

Do not apply an operation to the result of another operation. Write a new operation that combines the two operations.

Page 10: Object Design

COP 3331 Object Oriented Analysis and Design 10

2. Add Type Signature Information

Hashtable

+put(key:Object,entry:Object)+get(key:Object):Object

+remove(key:Object)+containsKey(key:Object):boolean+size():int

-numElements:int

Hashtable

+put()+get()+remove()+containsKey()+size()

-numElements:int

Attributes and operationswithout type information

are acceptable during analysis

Page 11: Object Design

COP 3331 Object Oriented Analysis and Design 11

3. Add Contracts Contracts on a class enable caller and callee to share the same

assumptions about the class. Contracts include three types of constraints: Invariant:

A predicate that is always true for all instances of a class. Invariants are constraints associated with classes or interfaces.

Precondition: Preconditions are predicates associated with a specific operation

and must be true before the operation is invoked. Preconditions are used to specify constraints that a caller must meet before calling an operation.

Postcondition: Postconditions are predicates associated with a specific operation

and must be true after an operation is invoked. Postconditions are used to specify constraints that the object must ensure after the invocation of the operation.

Page 12: Object Design

COP 3331 Object Oriented Analysis and Design 12

Expressing constraints in UML Models OCL (Object Constraint Language)

OCL allows constraints to be formally specified on single model elements or groups of model elements

A constraint is expressed as an OCL expression returning the value true or false. OCL is not a procedural language (cannot constrain control flow).

OCL expressions for Hashtable operation put(): Invariant:

context Hashtable inv: numElements >= 0

OCL expressionContext is a class

operation put Precondition:

context Hashtable::put(key, entry) pre:!containsKey(key) Post-condition:

context Hashtable::put(key, entry) post: containsKey(key) and get(key) = entry

Page 13: Object Design

COP 3331 Object Oriented Analysis and Design 13

Expressing Constraints in UML Models

A constraint can also be depicted as a note attached to the constrained UML element by a dependency relationship.

<<precondition>>!containsKey(key)

<<precondition>>containsKey(key)

<<precondition>>containsKey(key)

<<postcondition>>get(key) == entry

<<postcondition>>!containsKey(key)

<<invariant>>numElements >= 0

HashTable

put(key,entry:Object)get(key):Objectremove(key:Object)containsKey(key:Object):booleansize():int

numElements:int

Page 14: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 14

Contract for acceptPlayer in Tournament

context Tournament::acceptPlayer(p) pre:not isPlayerAccepted(p)

context Tournament::acceptPlayer(p) pre:getNumPlayers() < getMaxNumPlayers()

context Tournament::acceptPlayer(p) post:isPlayerAccepted(p)

context Tournament::acceptPlayer(p) post:getNumPlayers() = @pre.getNumPlayers() + 1

Page 15: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 15

Contract for removePlayer in Tournament

context Tournament::removePlayer(p) pre:isPlayerAccepted(p)

context Tournament::removePlayer(p) post:not isPlayerAccepted(p)

context Tournament::removePlayer(p) post:getNumPlayers() = @pre.getNumPlayers() - 1

Page 16: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 16

Annotation of Tournament classpublic class Tournament {

/** The maximum number of players * is positive at all times. * @invariant maxNumPlayers > 0 */private int maxNumPlayers;

/** The players List contains   * references to Players who are * are registered with the * Tournament. */private List players;

/** Returns the current number of * players in the tournament. */public int getNumPlayers() {…}

/** Returns the maximum number of * players in the tournament. */public int getMaxNumPlayers() {…}

/** The acceptPlayer() operation * assumes that the specified * player has not been accepted * in the Tournament yet. * @pre !isPlayerAccepted(p) * @pre getNumPlayers()<maxNumPlayers * @post isPlayerAccepted(p) * @post getNumPlayers() = * @pre.getNumPlayers() + 1 */public void acceptPlayer (Player p) {…}

/** The removePlayer() operation * assumes that the specified player * is currently in the Tournament. * @pre isPlayerAccepted(p) * @post !isPlayerAccepted(p) * @post getNumPlayers() = @pre.getNumPlayers() - 1 */public void removePlayer(Player p) {…}

}

Page 17: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 17

Constraints can involve more than one class

How do we specify constraints on more than one class?

Page 18: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 18

3 Types of Navigation through a Class Diagram

Tournamentstart:Date

end:Date

League

Player Tournament

League1. Local attribute 2. Directly related class 3. Indirectly related class

*

*

*

*

Player*

Any OCL constraint for any class diagram can be built using only a combination of these three navigation types!

Page 19: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 19

ARENA Example: League, Tournament and Player

players

* tournaments{ordered}

Tournament+start:Date

+end:Date+acceptPlayer(p:Player)

*League

+start:Date+end:Date

+getActivePlayers()

* Player+name:String+email:String

* players

tournaments*

Page 20: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 20

Model Refinement with 3 additional Constraints

A Tournament’s planned duration must be under one week. Players can be accepted in a Tournament only if they are

already registered with the corresponding League. The number of active Players in a League are those that have

taken part in at least one Tournament of the League.

To better understand these constraints we instantiate the class diagram for a specific group of instances

2 Leagues, 2 Tournaments and 5 Players

Page 21: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 21

Instance Diagram: 2 Leagues, 2 Tournaments, and 5 Players

alice:Player

bob:Player

marc:Player

winter:Tournament

tttExpert:League

joe:Player

xmas:Tournament

chessNovice:League

start=Dec 21end=Dec 22 start=Dec 23

end=Dec 25

zoe:Player

Page 22: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 22

Specifying the Model Constraints (see Slide 20)

Local attribute navigationcontext Tournament inv:

end - start <= Calendar.WEEK

players

* tournaments{ordered}

Tournament+start:Date

+end:Date+acceptPlayer(p:Player)

*League

+start:Date+end:Date

+getActivePlayers()

* Player+name:String+email:String

* players

tournaments*

Directly related class navigationcontext Tournament::acceptPlayer(p)

pre:league.players->includes(p)

Page 23: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 23

Specifying the Model Constraints (see Slide 20)

Local attribute navigationcontext Tournament inv:

end - start <= Calendar.WEEK

Directly related class navigationcontext Tournament::acceptPlayer(p) pre:

league.players->includes(p)

Indirectly related class navigationcontext League::getActivePlayers post:

result = tournaments.players->asSet

players

* tournaments{ordered}

Tournament+start:Date

+end:Date+acceptPlayer(p:Player)

*League

+start:Date+end:Date

+getActivePlayers()

* Player+name:String+email:String

* players

tournaments*

Page 24: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 24

OCL supports Quantification

OCL forall quantifier/* All Matches in a Tournament occur within the Tournament’s

time frame */

context Tournament inv:matches->forAll(m:Match |

m.start.after(t.start) and m.end.before(t.end))

OCL exists quantifier/* Each Tournament conducts at least one Match on the first

day of the Tournament */

context Tournament inv:matches->exists(m:Match | m.start.equals(start))

Page 25: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 25

Summary

There are three different roles for developers during object design

Class user, class implementor and class extender During object design - and only during object design - we

specify visibility rules Constraints are boolean expressions on model elements Contracts are constraints on a class enable class users,

implementors and extenders to share the same assumption about the class (“Design by contract”)

OCL is a language that allows us to express constraints on UML models

Complicated constratins involving more than one class, attribute or operation can be expressed with 3 basic navigation types.

Page 26: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 26

Additional Slides

Page 27: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 27

ARENA’s object model identified during the analysis

TournamentControl

Playerplayers*

Tournamentname

1

1

applyForTournament()

Match

playMove()getScore()

matches*

startstatus

selectSponsors()advertizeTournament()acceptPlayer()announceTournament()

startend

11

*

matches *

TournamentForm

*

*

acceptPlayer()removePlayer()schedule()

Advertisersponsors *

**

*

*

Page 28: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 28

Adding type information to ARENA’s object model

TournamentControl

Playerplayers*

Tournament

1

1

+applyForTournament()

Match

+playMove(p,m)+getScore():Map

matches*

+start:Date+status:MatchStatus

+name:String+start:Date+end:Date

1 1

*

matches *

TournamentForm

*

*

+acceptPlayer(p)+removePlayer(p)+schedule()

Advertisersponsors *

**

*

*

+selectSponsors(advertisers):List+advertizeTournament()+acceptPlayer(p)+announceTournament()+isPlayerOverbooked():boolean

Page 29: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 29

Pre- and post-conditions for ordering operations on TournamentControl

context TournamentControl::selectSponsors(advertisers) pre: interestedSponsors->notEmpty and

tournament.sponsors->isEmptycontext TournamentControl::selectSponsors(advertisers) post:

tournament.sponsors.equals(advertisers)

context TournamentControl::advertiseTournament() pre:tournament.sponsors->isEmpty and

not tournament.advertisedcontext TournamentControl::advertiseTournament() post:

tournament.advertised

context TournamentControl::acceptPlayer(p) pre:tournament.advertised and

interestedPlayers->includes(p) andnot isPlayerOverbooked(p)

context TournamentControl::acceptPlayer(p) post:tournament.players->includes(p)

TournamentControl

+selectSponsors(advertisers):List+advertizeTournament()+acceptPlayer(p)+announceTournament()+isPlayerOverbooked():boolean

Page 30: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 30

Specifying invariants on Tournament and Tournament Control

All Matches of in a Tournament must occur within the time frame of the Tournament

context Tournament inv:matches->forAll(m|

m.start.after(start) and m.start.before(end))

No Player can take part in two or more Tournaments that overlap

context TournamentControl inv:tournament.players->forAll(p|

p.tournaments->forAll(t|t <> tournament implies

not t.overlap(tournament)))

Page 31: Object Design

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 31

Specifying invariants on Match

A match can only involve players who are accepted in the tournamentcontext Match inv:

players->forAll(p|p.tournaments->exists(t|

t.matches->includes(self)))context Match inv:

players.tournaments.matches.includes(self)

Playerplayers* Tournament

Matchmatches*

*tournaments

players *