starting point identify key domain abstractions … classes integrating: attributes behavior...

30
Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence between client and object Polymorphism providing physical independence between client and implementation Consider relationships … integrating classes and objects to form higher levels of abstraction Association (“Uses, Needs”) Aggregation (“Has-A”) Inheritance (“Is-A”)

Upload: randell-stewart

Post on 27-Dec-2015

222 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Starting Point

• Identify key domain abstractions … classes integrating:• Attributes • Behavior (responsibilities, methods) • Messaging

• providing logical independence between client and object

• Polymorphism• providing physical independence between client and

implementation

• Consider relationships … integrating classes and objects to form higher levels of abstraction• Association (“Uses, Needs”) • Aggregation (“Has-A”) • Inheritance (“Is-A”)

Page 2: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Initial Modeling Results

• List of use cases, describing system requirements

• Domain model, capturing your understanding of the business process and key domain classes

• Design model, realizing both the information in the domain objects and the behavior described in the use cases

• Add classes in the design model that actually do the work and also provide a reusable architecture for future extensions

Page 3: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

UML Notation Baseline

Diagram Name Type Phase

Use Case Static* Analysis

Class Static Analysis

Activity Dynamic** Analysis

State-Transition Dynamic Analysis

Event Trace (Interaction)

Dynamic Design

Sequence Static Design

Collaboration Dynamic Design

Package Static Delivery

Deployment Dynamic Delivery

*Static describes structural system properties**Dynamic describes behavioral system properties.

Page 4: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Classes

Box contains three compartments: 1. The name compartment (required) contains the class name and other documentation-related information: E.g.:Some_class «abstract»Guillemets identify stereotypes. E.g.: «utility», «abstract» «JavaBean». Can use graphic instead of word.Access privileges (see below) can precede nameInner (nested) classes identify outer class as prefix of class name: (Outer.Inner or Outer::Inner)

2. The attributes compartment (optional): During Analysis: identify the attributes (i.e. defining characteristics) of the object.During Design: identify a relationship to a stock class.

3. The operations compartment (optional) contains method definitions: message_name( arguments ): return_type

If attributes and operations are both omitted, a more-complete definition is assumed to be on another sheet.

This

Not this

Page 5: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Associations

Associated classes are connected by lines.

The relationship is identified, if necessary, with a < or > to indicate direction (or use solid arrowheads).

The role that a class plays in the relationship is identified on that class's side of the line.

Stereotypes (like «friend») are appropriate.

Unidirectional message flow can be indicated by an arrow (but is implicit in situations where there is only one role)

Cardinality:

1 - (usually omitted if 1:1)

N - (unknown at compile time, but bound)

0..1 - (1..2 1..n)

1..* - (1 or more)

* - (0 or more)

Page 6: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Implementation Inheritance (Generalize/Specialize)

Identifies derivation with the derived class as the base class and with additional (or modified) properties. Derived (sub) class is a specialization of (extends) the base (super) class.

Variations include:

Page 7: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Interface Inheritance (Specifies/Refines)

A contract that specifies a set of methods that must be implemented by the derived class. In C++, an interface is a class containing nothing but pure virtual methods. Java supports them directly. (c.f.. "abstract class," which can contain method and field definitions in addition to the abstract declarations.)

Interfaces contain no attributes, so the "attributes" compartment is always empty.

The "inheritance" relationship line is dashed if the base class is an interface.

Page 8: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Dependency

User uses Resource, but Resource is not a member of the User class. If Resource is modified, some method of User might need to be modified. Resource is typically a local variable or argument of some method in User.

Page 9: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Aggregation

Aggregation (comprises) relationship. Destroying the "whole" does not destroy the parts

Page 10: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Composition

Composition (has) relationship. The parts are destroyed along with the "whole." Doesn't really exist in Java. In C++: class Container{ Item item1; // both of these are Item *item2; // "composition"public: Container() { item2 = new Item; } ~Container(){ delete item2; }}

Page 11: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Navigability

Messages flow in direction of arrow (only). Implicit when no role present: if an object doesn't have a role in some relationship, then there's no way to send messages to it.

Page 12: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Constraint

A constrained relationship requires some rule to be applied. (e.g. \{ordered}) Often combined with aggregation, composition, etc.

Page 13: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation -

In the case of the or, only one of the indicated relationships will exist at any given moment (a C++ union).

Subset does the obvious.

In official UML, put arbitrary constraints that affect more than one relationship in a "comment" box, as shown.

Page 14: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Qualified Association

Qualified Association (hash-table, associative array, "dictionary").

class User

{ // A Hashtable is an associative array,

// indexed by some key and containing

// some value.

private Hashtable bag = new HashTable();

private void add(String key, Item value)

{ bag.put( key, value );

}

}

Page 15: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Association Class

Use when a class is required to define a relationship.

Somewhere, an additional relationship is required to show ownership. (The one between Person and Ticket in the current example.)

Page 16: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Static Notation - Summary

Dependency

Aggregation

Composition

Navigability

Constraint

Or

Subset

Page 17: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Dynamic Notation - Objects and Messages

Vertical lines represent objects, not classes. May optionally add a ":class" to the box if it makes the diagram more readable. represents synchronous message. (message handler doesn't return until done).

represents return. (Label arrow with name/type of returned object.) Return arrows are essential in UML style, otherwise control flow is ambiguous

Sending object's class must have: An association of some sort with receiving-object's class. The receiver-side class's "role" must be the same as the name of the receiving object.

Page 18: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Dynamic Notation - Object Creation

Name box appears at point of creation.

«creates» form for automatic creation, e.g.. in C++: class Creator1 { Object1 the_object; // not a reference }

(There is no equivalent operation in Java)

If message shown instead of «creates», then the message handler creates the object. Think of new Fred() as Fred.new(). Method does not have to be new().

Page 19: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Dynamic Notation - Conditions, Loops, Grouping

Message sent only if condition in brackets is true.

An asterisk next to the condition signifies iteration.

An asterisk without a condition means "every," when receiver is an aggregate.

The box at the bottom of the diagram is UML's Grouping notation (awkward when you try to group all indirect messages). A * indicates a loop.

Page 20: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Dynamic Notation - Asynchronous Messages

Half arrowhead means "asynchronous."

Widening of line means "activated" (thread is running).

Large X means object deleted (in this case, it's self deleting). An external kill is represented as:

Page 21: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Use Case

A use case is a relatively large end-to-end process description that typically includes many steps or transactions; it is not normally an individual step or activity in a process.

Page 22: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Use Case Diagrams

• Show the external actors and their connection to the functionality (use cases) of the system

• Use cases provide the basis of communication among sponsors/customers and implementers in the planning of a project• Capture some user-

visible function • May be small or large • Achieves a discrete goal

for the user

Page 23: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Class Diagrams

• Show the static structure of the domain abstractions (classes) of the system

• Describe the types of objects in the system and the various kinds of static relationships that exist among them• Associations • Derivations

• Show the attributes and operations of a class and the constraints for the way objects collaborate

Page 24: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Activity Diagrams

• Show the sequential flow of activities• typically in an operation • also in a use case or event

trace

• Complement the class diagram by showing the workflow of the business (aka “Flowchart”)

• Encourage discovery of parallel processes which helps eliminate unnecessary sequences in business processes• Confirm Availability for

each chosen course • Attend Class

Page 25: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Activity Diagrams - Starting and Stopping

Page 26: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Activity Diagrams - Synchronization (Fork/Join)

When several activities can go on in parallel, indicates when all activities must be finished in order to continue. The heavy bar at the top is a fork. After the fork, all activities can (but are not required to) go on in parallel. Progress cannot continue past the bar on the bottom (a join) until all the activities that feed into the join complete. A join is an AND operation.

Page 27: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Activity Diagrams - Guards (tests)

This path is used only if the text in the brackets is true.

Page 28: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Activity Diagrams - Decision (Branch/Merge)

A decision activity, the guard labels the decision that was made. The diamond with outgoing arrows (the branch) specifies an OR operation, with a condition imposed by the guard. The diamond with incoming arrows (a merge) simply provides an end to the OR operation. A merge can occur without an associated branch if the diagram has multiple start states.

Page 29: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Activity Diagrams - Swim Lanes

Activities are arranged into vertical zones delimited with dashed lines. Each zone represents a broad area of responsibilities, typically implemented by a set of classes or objects. For example, the swim lane labeled accounting could represent objects of several classes (Bookkeeper, Clerk, MailRoom, Accountant) working in concert to perform the single "cut paycheck" activity.

Page 30: Starting Point Identify key domain abstractions … classes integrating: Attributes Behavior (responsibilities, methods) Messaging providing logical independence

Dynamic Notation - State Transition

• Show all the possible states that objects of the class can have and which events cause them to change

• Show how the object’s state changes as a result of events that are handled by the object

• Good to use when a class has complex lifecycle behavior