240 likes | 356 Vues
This content provides a detailed recap of class diagrams, CRC cards, and UML notations essential for designing object-oriented systems. It covers initial and refined class lists, class responsibilities, associations, and notations used in UML. Key concepts include dependency, generalization, interface implementation, and common stereotypes. Through practical examples like the Switch-Motor system, the content illustrates the application of information hiding, class relationships, and architectural styles, contributing to a robust understanding of system design and structure.
E N D
Recap: CRC Cards Process • Initial class list • Refined class list • while (More use case scenarios left) • do • Take a use case scenario • Assign responsibilities to classes • Find super- and sub-classes • Find collaborators • od
Today’s Lecture • Class Diagrams Basics • Class Diagram Notations • Classifier, attributes, operations • Interface implementation, subclassing • Dependency • Associations (multiplicities) • Application of information hiding and DSMs
Example: Switch-Motor System • Scenario: Motor can run, when the Switch state is on • Class list: Switch and Motor • R1: Store the decision condition • R2: Make a decision • R3: Run the motor
Class Diagram • UML Design Notation • Shows classes, their attributes and methods • Interfaces • Collaborations • Dependency, Generalization, Relationships • Remember: Design - complete description of structure and partial description of function • A class diagram describes the structure
Class Diagram View Motor Switch 1 -switch:Switch -state:bool switch +run() +getState():bool
Common Stereotypes • <<interface>> • <<type>> structure & behavior • <<enumeration>> collection of discrete values • <<implementationClass>> helper class • <<class>> is assumed by default
Attribute Name, Types Motor - switch : Switch +run() Visibility Attribute Type Attribute Name * Also multiplicity, default value, and property
Visibility • public → + • private → - • protected → # • package → ~ • derived → /
Alternative Notation Motor +run() Switch -state:bool +getState():bool Multiplicity 1 switch Association (Containment)
Operations: Visibility, Args, Return Types Switch -state : bool +getState(): bool +setState(bool) Return Type Visibility Operations Argument Type
A Slightly Complex Example <<interface>> ISort <<interface>> IStorage +sort(IStorage) +add(int) +length():int +itemAt(int):int +setAt(int, int) +createNew():IStorage MergeSort QuickSort … … +sort(IStorage) +sort(IStorage) Array LinkedList … … +add(int) … +add(int) … SortingApplication storage:IStorage sort:ISort 1 sort storage +Main(string[]):int 1
Hiding Design Decision <<interface>> IElement IntElement <<interface>> ISort item:int <<interface>> IStorage +get():int +set(int) +sort(IStorage) +add(IElement) +length():int +itemAt(int):IElement +setAt(int, IElement) +createNew():IStorage MergeSort QuickSort … … +sort(IStorage) +sort(IStorage) Array LinkedList … … +add(IElement) … +add(IElement) … SortingApplication 0..* 1 storage:IStorage sort:ISort 1 sort storage +Main(string[]):int 1
Additional Dependencies <<interface>> IElement IntElement <<interface>> ISort item:int <<interface>> IStorage +get():int +set(int) +sort(IStorage) +add(IElement) +length():int +itemAt(int):IElement +setAt(int, IElement) +createNew():IStorage MergeSort QuickSort … … +sort(IStorage) +sort(IStorage) Array LinkedList … … +add(IElement) … +add(IElement) … 0..* 1 sort SortingApplication 1 1 storage:IStorage sort:ISort storage +Main(string[]):int
Architectural Style: Layered <<interface>> IElement IntElement <<interface>> ISort item:int <<interface>> IStorage +get():int +set(int) SortingApplication +sort(IStorage) storage:IStorage sort:ISort +add(IElement) +length():int +itemAt(int):IElement +setAt(int, IElement) +createNew():IStorage +Main(string[]):int MergeSort QuickSort … … +sort(IStorage) +sort(IStorage) Array LinkedList … … +add(IElement) … +add(IElement) … 0..* 1 1 storage sort 1 Layer 2 Layer 1
Architectural Style: 3-tiered UI <<interface>> IElement app:SortingApplication IntElement +Main(string[]):int <<interface>> ISort item:int <<interface>> IStorage +get():int +set(int) SortingApplication +sort(IStorage) storage:IStorage sort:ISort +add(IElement) +length():int +itemAt(int):IElement +setAt(int, IElement) +createNew():IStorage +sort(…):IStorage MergeSort QuickSort … … +sort(IStorage) +sort(IStorage) Array LinkedList … … +add(IElement) … +add(IElement) … 0..* 1 1 1 app storage sort 1 Layer 3 Layer 2 Layer 1
Summary • Class diagrams represent design structure • Three parts: name, attribute, operations • Visibility, attribute type, multiplicity • Association, association multiplicity • Generalization i.e. interface impl, subclassing • Composition i.e. class A contains class B • Applied information hiding, DSM, layering
R1: Ask the user for an input list of numbers; R2: Ask the user for the choice of storage technique for the numbers. Two storage techniques are supported Array that inherits from java.util.ArrayList and Linked List that inherits from java.util.LinkedList, R3: Ask the user for the choice of sorting algorithm. Two sorting algorithms merge sort and quick sort, are supported. R4: Sort the numbers, and R5: Output the sorted numbers. Problem Description: design and implement a sorting application for positive integers. This application must: Initial Class List: Refined Class List: