131
Thiết kế Class Dương Anh Đức 1 Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML Thiết kế Class

Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

  • Upload
    melita

  • View
    91

  • Download
    0

Embed Size (px)

DESCRIPTION

Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML. Thiết kế Class. Mục tiêu. Tìm hiểu mục đích của bước thiết kế Class và vị trí của công đoạn này trong qui trình Xác định bổ sung các class và quan hệ của chúng cần để hỗ trợ cho việc cài đặt các cơ chế kiến trúc đã chọn - PowerPoint PPT Presentation

Citation preview

Page 1: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 1

Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế Class

Page 2: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 2

Mục tiêu

Tìm hiểu mục đích của bước thiết kế Class và vị trí của công đoạn này trong qui trình

Xác định bổ sung các class và quan hệ của chúng cần để hỗ trợ cho việc cài đặt các cơ chế kiến trúc đã chọn

Xác định và phân tích việc chuyển đổi trạng thái các đối tường trong các class kiểm soát được trạng thái

Tinh chỉnh các quan hệ, operation, và thuộc tính

Page 3: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 3

Vị trí của Thiết kế Class

Architect

Designer

ArchitecturalAnalysis

ArchitectureReviewer

Review theDesign

Review theArchitecture

Use-CaseAnalysis

ArchitecturalDesign

DescribeConcurrency

DescribeDistribution

ClassDesign

Subsystem Design

Use-Case Design

DesignReviewer

Page 4: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 4

Tổng quan về Class

SupplementarySpecifications

ClassDesign

Architecture Document

Design Model

DesignGuidelines

Use-Case Realization

Design Classes

Design Classes

Page 5: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 5

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 6: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 6

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 7: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 7

Các khảo sát khi thiết kế Class

Class stereotype Boundary Entity Control

Các design pattern khả dụng Các cơ chế kiến trúc

Persistence Distribution …

Page 8: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 8

Một class phải có một mục tiêu rõ ràng.

Một class phải làm một việc gì đó và phải làm tốt điều

này !

Cần bao nhiêu Class ?

Nếu nhiều class đơn giản. Nghĩa là mỗi class: Đóng gói một phần ít hơn trên toàn bộ hệ thống Nhiều khả năng dùng lại hơn Dễ cài đặt hơn

Nếu nhiều class phức tạp. Nghĩa là mỗi class: Đóng gói một phần nhiều hơn trên toàn bộ hệ thống Ít khả năng dùng lại hơn Khó cài đặt hơn

Page 9: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 9

MainForm

SubWindow

DropDownListButton

MainWindow

Thiết kế các Boundary Class

Các User interface (UI) boundary class Công cụ xây dựng giao diện người dùng nào sẽ được sử

dụng? Bao nhiêu giao diện có thể được xây dựng bởi công cụ?

Các External system interface boundary class Thường được mô hình như subsystem

Page 10: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 10

Analysis DesignFatClass

- transientBookeeping

+ getCommonlyUsedAtt1()+ getCommonlyUsedAtt2()+ getRarelyUsedAtt3()+ getRarelyUsedAtt4()

FatClassDataHelper

+ commonlyUsedAtt1+ commonlyUsedAtt2

FatClassLazyDataHelper

+ rarelyUsedAtt3+ rarelyUsedAtt4

1 1

FatClass- transientBookeeping+ commonlyUsedAtt1+ commonlyUsedAtt2+ rarelyUsedAtt3+ rarelyUsedAtt4

<< entity >>

Thiết kế các Entity Class

Các Entity object thường thụ động và persistent Các yêu cầu về hiệu năng có thể buộc ta phải tái xây dựng Xem thêm bước xác định Persistent Class

Page 11: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 11

Thiết kế Control Class

Chuyện gì xảy ra với các Control Class? Chúng thật sự cần thiết? Có phải tách chúng ra không?

Dựa vào đâu để quyết định? Độ phức tạp Khả năng thay đổi Tính phân tán và hiệu năng Transaction management

Page 12: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 12

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 13: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 13

Mọi thể hiện của class đều đòi hỏi phải lưu giữ trạng thái của nó

Các Persistent class được gán với cơ chế persistence

ClientClass

Persistency

AnalysisMechanism

(Conceptual)

DesignMechanism(Concrete)

ImplementationMechanism

(Actual)

OODBMS

RDBMS JDBC to Ingres

ObjectStore

Legacy Data

New Data

Course

StudentPersistency

Xác định Persistent Class

Page 14: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 14

ClassDesign

DatabaseDesign

Class

Database DesignerData Model

Designer

Database Design Preview

Chiến lược Persistence phải nhất quán Ở đây, nhớ rằng các class đều persistent

Page 15: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 15

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 16: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 16

Định nghĩa các Operation

Mục đích Ánh xạ các nhiệm vụ đã xác định ơ mức phân tích thành

các operation thực hiện chúng Những cái cần xem xét:

Tên Operation, signature, và mô tả Operation visibility Tầm vực Operation

• Class operation hay instance operation

Page 17: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 17

Nhắc lại: Operation là gì ?

CourseOffering

addStudent deleteStudentgetStartTimegetEndTime

Class

Operation

Page 18: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 18

:ClassA

// Perform responsibility

:ClassB :ClassA

performResponsibility():result

:ClassB

Operation: Tìm chúng ở đâu?

Các thông điệp trong các interaction diagram

Các chức năng phụ thuộc vào cài đặt khác Các chức năng quản trị Các nhu cầu sao chép class Các nhu cầu kiểm tra bằng, khác nhau, …

Page 19: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 19

Đặt tên và mô tả các Operation

Các tên thích hợp cho operation Chỉ rõ kết quả của operation Đứng dưới góc nhìn của client Nhất quán qua tất cả các class

Định nghĩa operation signature operationName(parameter : class,..) : returnType

Cung cấp một mô tả ngắn, bao gồm ý nghĩa của tất cả các tham số

Page 20: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 20

Guidelines: Thiết kế Operation Signatures

Khi thiết kế operation signatures phải bảo đảm hàm chứa: Các tham số truyền theo giá trị hay tham số? Các tham số có bị thay đổi bởi operation? Các tham số là optional? Tham số có giá trị mặc định? Miền tham số hợp lệ?

Càng ít tham số càng tốt Truyền các object thay vì “data bits”

Page 21: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 21

Phát hiện Additional Classes và Relationships

Additional classes và relationships có thể được thêm vào để hỗ trợ signature

ClassA Class2

op1(var1:Class2): Class3

Class3

Page 22: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 22

Public operations

Protected operations

Private operations

Operation Visibility

Tính khả kiến được dùng để cung cấp tính đóng gói Giá trị có thể là public, protected, hay private

Page 23: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 23

Class

- privateAttribute# protectedAttribute

+publicOp()# protectedOp()- privateOp()

Ký hiệu tính khả kiến?

Các ký hiệu sau được dùng: + Public access # Protected access - Private access

Page 24: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 24

Class

- classifierScopeAttribute

classifierScopeOperation()

- instanceScopeAttribute

instanceScopeOperation()

Tầm vực

Xác định số lượng thể hiện của attribute / operation Instance: 1 instance cho mỗi class instance Classifier: 1 instance cho tất cả class instance

Tầm vực mức Classifier được ký hiệu bằng cách gạch dưới tên attribute/operation

Page 25: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 25

Ví dụ: Scope

Student- name- address

- nextAvailID : int

+ addSchedule(theSchedule : Schedule, forSemester : Semester)+ getSchedule(forSemester : Semester) : Schedule+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean# passed(theCourseOffering : CourseOffering) : boolean+ getNextAvailID() : int

<<entity>>

- studentID

Page 26: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 26

MathFunctions<<utility>>

Utility Classes

Thế nào là một Utility Class? Utility là một class stereotype Dùng để chỉ các class chứa một bộ các chương trình con

miễn phí Tại sao lại dùng chúng?

Để cung cấp các dịch vụ có thể hữu dụng trong các ngữ cảnh khác nhau

Để gói các hàm thư viện hay các ứng dụng phi đối tượng

Page 27: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 27

Ví dụ: Utility Classes

<<utility>> MathPack

-randomSeed : long = 0randomSeed : long = 0--pi : double = 3.14159265358979pi : double = 3.14159265358979

+sin (angle : double) : double+cos (angle : double) : double+random() : double

Page 28: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 28

Ví dụ: Định nghĩa các Operation

CourseOffering(from University Artifacts)

<<entity>>

Student.

+ getTuition() : double+ addSchedule(theSchedule : Schedule)+ getSchedule(forSemester : Semester) : Schedule+ deleteSchedule(forSemester : Semester)+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean# passed(theCourseOffering : CourseOffering) : boolean<<class>> + getNextAvailID() : int+ getStudentID() : int+ getName() : string+ getAddress() : string

(from University Artifacts)

<<entity>>

RegistrationController

+ submitSchedule()+ saveSchedule()+ getCourseOfferings() : CourseOfferingList+ getCurrentSchedule(forStudent : Student, forSemester : Semester) : Schedule+ deleteCurrentSchedule()<<class>> + new(forStudent : string)+ getStudent(withID : string) : Student

(from Registration)

<<control>>

Schedule(from University Artifacts)

<<entity>>

0..1

0..1+registrant

0..*

1

0..10..1

+currentSchedule

0..*

0..*

+primaryCourses

0..4

+alternateCourses

0..2

ICourseCatalogSystem

+ getCourseOfferings()+ initialize()

(from External System Interfaces)

<<Interface>>

10..*

Page 29: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 29

(còn tiếp)

Bài tập: Định nghĩa các Operation

Hãy cho biết: Các architectural layers, các package và các phụ thuộc của

chúng Các Design class cho một use case cụ thể

Page 30: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 30

(còn tiếp)

Bài tập: Define Operations (tt.)

Với các design class, hãy xác định: Các Operation và mô tả hoàn chỉnh của chúng Operation scope và visibility Mọi mối quan hệ và các class bổ sung để hỗ trợ cho các

operation đã định nghĩa

Page 31: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 31

Bài tập: Định nghĩa các Operation (tt.)

Xây dựng lược đồ sau: VOPC class diagram, chứa tất cả các operation, operation

signature, và các quan hệ

Page 32: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 32

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 33: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 33

Nhắc lại: Package Element VisibilityPackageA

Class A1

Class A3

Class A2A

BPackageB

+Class B1-Class B2

Public visibility

Private visibility

Chỉ có thể tham chiếu tới các public class từ

bên ngoài package chứa nó

OO Principle: Encapsulation

Page 34: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 34

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 35: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 35

Định nghĩa các Method

Method là gì ? Mô tả cài đặt của operation

Mục đích Định nghĩa các khía cạnh đặc biệt của operation

implementation Những gì cần xem xét:

Các thuật toán đặc biệt Các object và các operation khác cần sử dụng Cách cài đặt và sử dụng các attribute và các tham số Cách cài đặt và sử dụng các mối quan hệ

Page 36: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 36

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 37: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 37

Định nghĩa các trạng thái

Mục đích Thiết kế ảnh hưổng của trạng thái đối tượng lên hành vi của

nó Phát triển statecharts để mô hình các hành vi này

Những gì cần xem xét: Những object nào có trạng thái đáng kể? Cách xác định các trạng thái của một object? Cách ánh xạ statechart với phần còn lại của mô hình?

Page 38: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 38

State Name

stateVar : type = value

entry/ entry actiondo/ activityexit/ exit action

event(args) [guard condition] / operation(args) ^target.sendEvent(args)

State Event

Transition

Action

Activity

Statechart là gì?

Là 1 đồ thị có hướng với các node là các trạng thái nối với nhau bới các transition

Mô tả lịch sử đời sống của đối tượng

Page 39: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 39

Trang thái bắt đầu (Initial state) Là trạng thái khi mới được khởi tạo của object Mang tính bắt buộc Chỉ có thể có 1 initial state

Trang thái kết thúc (Final state) Chỉ vị trí kết thúc đời sống của object Optional Có thể có nhiều Final state

Initial state

Các trạng thái đặc biệt

Page 40: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 40

Qui trình suy dẫn ra Statecharts

Xác định và định nghĩa các trạng thái Xác định các event Xác định các transition (hồi đáp lại các event) Thêm các activity và các action

Page 41: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 41

Significant, dynamic attributes

Sự tồn tại và không tồn tại của các link

numStudents < 100

Open

Số sinh viên tối đa trong 1 lớp là 100

numStudents > = 100

Closed

Assigned Unassigned

Link to ProfessorExists

Link to ProfessorDoesn’t Exist

Professor

CourseOffering

0..*

0..1

Xác định và định nghĩa các trạng thái

Page 42: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 42

+instructor

CourseOffering+ addProfessor()+ removeProfessor()

<<entity>>

Professor<<entity>>0..10..*

Events: addProfessor, removeProfessor

Xác định các Event

Xem xét các class interface operation

Page 43: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 43

Unassigned

Assigned

removeProfessor

addProfessor

+instructor

CourseOffering+ addProfessor()+ removeProfessor()

<<entity>>

Professor<<entity>>0..10..*

Xác định các Transition

Với mỗi trạng thái, xác định events nào gây ra transitions đến trạng thái nào, bao gồm các điều kiện kiểm soát, nếu cần

Transitions mô tả điều gì xảy ra khi đối tượng hồi đáp lại một event nhân được

Page 44: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 44

State A

State Bdo: activity

event[ condition ] / action

State Cactivity

action

entry: action

Thêm Activities và Actions

Activities Kết hợp với một trạng thái Bắt dầu khi trạng thái bắt đầu Cần thời gian để hoàn tất Có thể ngắt

Actions Kết hợp với 1 transition Cần thời gian không đáng kể để hoàn tất Không thể ngắt ngang

Page 45: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 45

Gửi Events

Một event có thể gây ra việc gửi một event khác Một activity cùng có thể gửi event đến object khác

State B

do: ^TargetObject.event

State A

event ^TargetObject.event

Page 46: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 46

Ví dụ: Statechartadd student / numStudents = numStudents + 1

Unassigned

Assigned

Full

Cancelleddo: Send cancellation notices

Committeddo: Generate class roster

closeRegistration [ has Professor assigned ]

close

/ numStudents = 0

addProfessor

closeRegistration

remove student / numStudents = numStudents - 1

cancel

removeProfessor

[ numStudents = 10 ]

close[ numStudents < 3 ]

closeRegistration[ numStudents >= 3 ]

close[ numStudents >= 3 ]

add student /numStudents = numStudents + 1

cancel

remove student / numStudents = numStudents - 1

close

[ numStudents = 10 ] cancel

Page 47: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 47

Ví dụ: Statechart với các trạng thái lồng nhausuperstate

substate

add student /numStudents = numStudents + 1

Open

Unassigned

Assigned

H

add a professor

Closed

Cancelleddo: Send cancellation notices

Full

Committeddo: Generate class roster

closeRegistration

close

remove a professorclose[ numStudents < 3 ]

[ numStudents = 10 ]

closeRegistration[ numStudents >= 3 ]

close[ numStudents >= 3 ]

closeRegistration [ has Professor assigned ]

close

/ numStudents = 0

remove student / numStudents = numStudents - 1

cancelcancel

Page 48: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 48

Những Object có Significant State?

Các Object có vai trò thể hiện rõ bởi state transitions Các use case phức tạp là state-controlled Không cần mô hình hóa tất cả các object

Các Object dễ dàng cài đặt Các Object không thuộc loại state-controlled Các Object chỉ với một trạng thái

Page 49: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 49

Open Full

add student /numStudents = numStudents + 1

[numStudents = 10]

CourseOffering

/- numStudents

+ addStudent()(Stay tuned for derived attributes)

Cách Statecharts gắn với phần còn lại? Các Event biến thành các operation Các Method phải được cập nhật với các thông tin đặc thù cho

các trạng thái Các trạng thái được biểu diễn bởi attributes

Chúng là input cho bước định nghĩa Attribute

Page 50: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 50

Bài tập: Định nghĩa States (optional)

Hãy cho biết: Tất cả các design classe

Hãy xác định: Các Class vứi significant state-controlled behavior Các trạng thái và transitions quan trong của class

Hãy xây dựng lược đồ: Statechart của một class

Page 51: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 51

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 52: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 52

Định nghĩa Attributes

Mục đích Formalize definition of attributes

Những gì cần xem xét: Persistency Visibility Tên gọi, kiểu, và giá trị mặc định

Page 53: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 53

Nhắc lại: Thế nào là Attribute?

:CourseOfferingnumber = 101startTime = 900endTime = 1100

:CourseOfferingnumber = 104startTime = 1300endTime = 1500

CourseOfferingnumberstartTime endTime

Class

Attribute

Object

Attribute Value

Page 54: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 54

Cách tìm ra các Attribute?

Khảo sát mô tả của các method Khảo sát các trạng thái Bất kỳ thông tin nào mà class cần duy trì

Page 55: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 55

Biểu diễn Attribute

Mô tả name, type, và giá trị mặc định attributeName : Type = Default

Tuân thủ qui ước đặt tên của NNLT và dự án Type phải là KDL cơ sở trong NNLT cài đặt

Các KDL định sẵn, người dùng đ/n Mô tả tình khả kiến

Public: ‘+’ Private: ‘-’ Protected: ‘#’

Page 56: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 56

Các Derived Attribute

Thế nào là derived attribute? Một attribute mà giá trị co thể tính từ giá trị của các attribute

khác Khi nào dùng chúng?

Khi không đủ thời gian để tính lại giá trị mỗi khi cần thiết Dung hòa giữa thời gian thực hiện và bộ nhớ sử dụng

Page 57: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 57

Ví dụ: Define Attributes

Student.

- name : string- address : string<<class>> - nextAvailID : int- studentID : int- dateofBirth : Date

(from University Artifacts)

<<entity>>

RegistrationController(from Registration)

<<control>>

Schedule

- semester : Semester(from University Artifacts)

<<entity>>

CourseOffering

- number : String = "100"- startTime : Time- endTime : Time- days : string/- numStudents : int = 0

(from University Artifacts)

<<entity>>

ICourseCatalogSystem(from External System Interfaces)

<<Interface>>

0..1

0..1

+registrant0..*

1

0..1

0..1

+currentSchedule

0..*

0..*

+primaryCourses

0..4

+alternateCourses

0..2

Page 58: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 58

(còn tiếp)

Bài tập: Define Attributes (optional)

Hãy cho biết: Các architectural layers, các package và phụ thuộc của

chúng Các Design class của một use case cụ thể

Page 59: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 59

(còn tiếp)

Bài tập: Define Attributes (tt.)

Với các design class hãy xác định: Các Attribute và mô tả đầy đủ của nó Tầm vực và tính khả kiến của Attribute Mọi mối quan hệ và class bổ sung để hỗ trợ cho việc định

nghĩa các attribute và attribute signatures

Page 60: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 60

Bài tập: Define Attributes (cont.)

Xây dựng lược đồ: VOPC class diagram, chứa tất cả các attribute và mối quan

hệ

Page 61: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 61

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 62: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 62

Dependency là gì? Là một loại quan hệ giữa hai object

Mục đích Xác định những nơi KHÔNG cần đến các mối quan hệ cấu

trúc Những gì cần xem xét :

Những gì buộc supplier trở nên nhìn thấy được bởi client

Client Supplier

Định nghĩa Dependency

Page 63: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 63

Association là quan hệ câu trúc Dependency là quan hệ phi cấu trúc Để “nói chuyện” được, object phải khả kiến

Tham chiếu đến biến cục bộ Tham chiếu đến tham số Tham chiếu toàn cục Tham chiếu đến trường dữ liệu (Field)

AssociationClient

Supplier1

Supplier2

Dependency

So sánh Dependency và Association

Page 64: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 64

ClassA

op1 ()

ClassB

Local Variable Visibility

Operation op1() chứa một biến cục bộ có kiểu ClassB

Page 65: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 65

ClassA

op1 (param1: ClassB)

ClassB

Parameter Visibility

Thể hiện của ClassB được truyền đến cho thể hiện của ClassA

Page 66: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 66

ClassUtility

utilityOp ()

ClassA

op1 ()

Global Visibility

Thể hiện của ClassUtility khả kiến với mọi dối tượng vì nó là toàn cục (global)

Page 67: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 67

Bám vào các quan hệ trong thế giới thực Bám váo các quan hệ yếu nhất (dependency) Quan hệ là “thường trực”? Dùng association (field visibility) Quan hệ là “nhất thời”? Dùng dependency

Nhiều object chia sẻ chung 1 instance• Truyền instance như tham số (parameter visibility)• Đặt instance là global (global visibility)

Các object không chia sẻ cùng 1 instance (local visibility) Cần bao nhiêu thời gian để create/destroy?

Chi phí ? Dùng field, parameter, hoặc global visibility

Chọn lựa nào đúng? CÒN TÙY

Xác định Dependency

Page 68: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 68

Ví dụ: Trước khi định nghĩa Dependency

ICourseCatalogSystem

+ getCourseOfferings(forSemester : Semester) : CourseOfferingList

(from External System Interfaces)

<<Interface>>

Student

- name- address- StudentID : int

+ addSchedule(theSchedule : Schedule, forSemester : Semester)+ getSchedule(forSemester : Semester) : Schedule+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean# passed(theCourseOffering : CourseOffering) : boolean

(from University Artifacts)

<<entity>>

RegistrationController

+ // submit schedule()+ // save schedule()+ // create schedule with offerings()+ // getCourseOfferings(forSemester) : CourseOfferingList

(from Registration)

<<control>>

0..1

0..1registrant

0..*1

courseCatalog

Schedule

- semester

+ submit()+ // save()# any conflicts?()+ // create with offerings()

(from University Artifacts)

<<entity>>

0..*

1

0..1 0..1

currentSchedule

CourseOffering

- number : String = "100"- startTime : Time- endTime : Time- days : Enum

+ addStudent(studentSchedule : Schedule)+ removeStudent(studentSchedule : Schedule)+ new()+ setData()

(from University Artifacts)

<<entity>>

0..*

0..4

primaryCourses

0..*

0..2alternateCourses

Page 69: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 69

Ví dụ: Sau khi định nghĩa Dependency

Global visibility

Parameter visibility

ICourseCatalogSystem

+ getCourseOfferings(forSemester : Semester) : CourseOfferingList

(from External System Interfaces)

<<Interface>>

Student

- name- address- StudentID : int

+ addSchedule(theSchedule : Schedule, forSemester : Semester)+ getSchedule(forSemester : Semester) : Schedule+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean# passed(theCourseOffering : CourseOffering) : boolean

(from University Artifacts)

<<entity>>

RegistrationController

+ // submit schedule()+ // save schedule()+ // create schedule with offerings()+ // getCourseOfferings(forSemester) : CourseOfferingList

(from Registration)

<<control>>

0..1

0..1registrant

Schedule

- semester

+ submit()+ // save()# any conflicts?()+ // create with offerings()

(from University Artifacts)

<<entity>>

0..*

1

0..1 0..1

currentSchedule

CourseOffering

- number : String = "100"- startTime : Time- endTime : Time- days : Enum

+ addStudent(studentSchedule : Schedule)+ removeStudent(studentSchedule : Schedule)+ new()+ setData()

(from University Artifacts)

<<entity>>

0..*

0..4

primaryCourses

0..*

0..2alternateCoursesField visibility

Field visibility

Page 70: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 70

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 71: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 71

Định nghĩa Associations

Mục đích Tinh chỉnh các association còn lại

Những gì cần xem xét : Cân nhắc giữa Association và Aggregation Cân nhắc giữa Aggregation và Composition Cân nhắc giữa Attribute và Association Chiều của quan hệ (Navigability) Thiết kế Association class Thiết kế bản số (Multiplicity design)

Page 72: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 72

Whole Part

Whole

Aggregation

Part

Nhắc lại: Composition là gì ?

Là một dạng của aggregation với tính sở hữu cao và trùng khớp về chu kỳ sống “Bộ phận” không thể tồn tại lâu hơn “toàn thể”

Page 73: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 73

Shared Aggregation

Non-shared Aggregation

1

Whole Part1..* 0..*

Bản số > 1

Whole Part1 0..*

Bản số = 1

Theo định nghĩa, composition là non-shared aggregation

Whole Part0..*

Bản số = 1

Composition

Aggregation: Shared hay không shared

Page 74: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 74

aggregation

composition

Class1

Class1

Class2

Class2

Aggregation hay Composition?

Xem xét Chu kỳ sống của Class1 và Class2

Page 75: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 75

Ví dụ: Composition

Student Schedule1 0..*

RegisterForCoursesForm 1 1 RegistrationController

Page 76: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 76

Cân nhắc giữa Attributes và Composition

Dùng composition khi Các thuộc tính cần được nhận dạng độc lập Nhiều class có chung các thuộc tính Các thuộc tính có cấu trúc phức tạp và bản thân chúng cũng

có thuộc tính riêng Các thuộc tính có hành vi riêng (phức tạp) Các thuộc tính có quan hệ riêng

Các trường hợp còn lại dùng attributes

Page 77: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 77

Ví dụ: Attributes/Composition

Composition of separate class

Attributes

0..*11

Student- name- address<<classifier scope>> - nextAvailID : int- StudentID : int- dateofBirth : Date

+ addSchedule()+ getSchedule()+ delete schedule()+ hasPrerequisites()# passed()

<<entity>>

Schedule

+ submit()+ // save()# any conflicts?()+ // create with offerings()+ new()+ passed()

<<entity>>

- Semester

Page 78: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 78

?

Schedule CourseOffering

0..40..*

primaryCourses

Schedule CourseOffering

0..40..*

primaryCourses Schedule CourseOffering

0..40..*

primaryCourses

Chiều của quan hệ

Khảo sát các interaction diagram Ngay cả khi cả 2 chiều đều có vẻ cần thiết, vẫn có thể chỉ 1

chiều hoạt động Một chiều quan hệ ít xảy ra Số thể hiện của một class ít

Page 79: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 79

Ví dụ: Tinh chỉnh chiều quan hệ

Tổng số Schedule nhỏ, hay Không bao giờ cần một list

Schedule có CourseOffering xuất hiện trên đó

Tổng số CourseOffering nhỏ, hay

Không bao giờ cần một list CourseOffering có Schedule xuất hiện trên đó

Tổng số CourseOffering và Schedule đều không nhỏ

Phải quan tâm đến cả 2 chiều

Schedule CourseOffering

0..40..*

primaryCourses

Schedule CourseOffering

0..40..*

primaryCourses

Schedule CourseOffering

0..40..*

primaryCourses

Page 80: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 80

Ví dụ: Thiết kế Association Class

Schedule CourseOffering

0..40..*

primaryCourses

PrimaryScheduleOfferingInfo- grade: char = I

alternateCourses

0..20..*

0..*

Schedule CourseOffering

11 0..4

0..20..*alternateCourses

primaryCourseOfferingInfo PrimaryScheduleOfferingInfo- grade: char = I

Design Decisions

Page 81: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 81

Bản số = 1, hay = 0..1 Có thể cài đặt đơn giản như một giá trị hay pointer Không cần thiết kế gì thêm

Bản số > 1 Không thể dùng giá trị đơn hay pointer Cần thực hiện thêm một số công việc thiết kế

Professor CourseOffering

0..*0..1

Professor CourseOffering

0..*0..1

instructor

instructor

Thiết kế bản số

Cần một container

Page 82: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 82

Multiplicity Design Options

Mô hình hóa tường minh một container class

Ghi chú

instructorProfessor CourseOffering

0..*0..1

CourseOffering<<entity>>

Professor<<entity>>

CourseOfferingList

+ new()+ add()

1

0..*

0..10..1

+instructor

Professor CourseOffering

0..*0..1

instructor

List

Page 83: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 83

Item

ListParameterizedClass

Formal arguments

Parameterized Class (template) là gì?

Là một class dùng để định nghĩa các class khác Thường dùng cho các container class

Một số container class thông dụng:• Set, list, dictionary, stack, queue, …

Page 84: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 84

Thể hiện của Parameterized Class

Instantiated Class <actual arguments>

<<bind>> <actual arguments>

ParameterizedClass

Formal arguments

Instantiated Class

HAY

Kết buộc ẩnKết buộc tường minh

Page 85: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 85

Ví dụ: Thể hiện của Parameterized Class

CourseOffering<<entity>>CourseOfferingList

1 0..*

Trước

Sau

<<bind>> <CourseOffering>

List

Item

CourseOfferingList CourseOffering

List <CourseOffering> CourseOfferingHAY

Page 86: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 86

CourseOfferingProfessor

isTeaching( ) : Boolean 0..1 0..* hasInstructor( ) : Boolean

Multiplicity Design: Optionality

Nếu một link là tùy chọn, hãy cèn thêm một operation để kiểm tra sự tồn tại của link

Page 87: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 87

Bài tập: Đ/n Dependency và Association

Hãy cho biết: Use-case realization của 1 use case và chi tiết thiết kế của 1

subsystem Thiết kế của tất cả các design element

Page 88: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 88

Bài tập: Đ/n Dependenc và Association (tt.)

Hãy xác định: Chiều của mỗi quan hệ Mọi class cần bổ sung để hỗ trợ cho việc thiết kế quan hệ Mọi association được tinh chỉnh thành dependency Mọi association được tinh chỉnh thành aggregation hoặc

composition Mọi tinh chỉnh liên quan đến bản số

Page 89: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 89

Bài tập: Đ/n Dependency và Association (tt.)

Xây dựng lược đồ Một bản cập nhật của VOPC, bao gồm cả các tinh chỉnh

quan hệ

Page 90: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 90

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 91: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 91

Định nghĩa quan hệ tổng quát hóa

Mục đích Xác định các khả năng dùng lại Tinh chỉnh cây kế thừa để có thể cài đặt hiệu quả

Những gì cần xem xét: So sánh Abstract classes với concrete classes Bài toán đa kế thừa So sánh Generalization và Aggregation Tổng quát hóa để hỗ trợ tái sử dụng trong cài đặt Tổng quát hóa để hỗ trợ đa xạ (polymorphism) Tổng quát hóa để hỗ trợ đa hình (metamorphosis) Mô phỏng tổng quát hóa

Page 92: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 92

Nhắc lại: Generalization

Một class chi sẻ cấu trúc và hành vi của một hay nhiều class Là quan hệ “Là một dạng của” Trong phân tích, ít khi dùng đến Account

balancenamenumber

Withdraw()CreateStatement()

Checking Savings

GetInterest()

Superclass (parent)

Subclasses

Generalization Relationship

descendents

ancestor

Page 93: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 93

Lion

talk ()

Tiger

talk ()

Animal{abstract}

talk () {abstract}

Không có thể hiện của Animal

Tất cả các object đều hoặc là Lion hoặc là Tiger

Abstract class

Abstract operationCommunication

Chuyên biệt hóa

Abstract và Concrete Class

Abstract class không có bất kỳ thể hiện nào Concrete classes có thể có thể hiện (object)

Page 94: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 94

Airplane Helicopter Wolf Horse

FlyingThing Animal

Bird

multipleinheritance

Dùng đa kế thức chỉ khi thật cần thiết, và phải luôn cẩn thận !

Nhắc lại: Đa kế thừa

Một class có thể kế thừa từ nhiều class

Page 95: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 95

Tên của attribute hay operation bị trùng

Lặp lại việc kế thừa

FlyingThingcolor

getColor

Animalcolor

getColor

Bird

FlyingThing Animal

Bird

AnimateObjectcolor

Các vấn đề của đa kế thừa

Lời giải của các vấn đề trên phụ thuộc cài đặt cụ thể

Page 96: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 96

Các ràng buộc của quan hệ tổng quát hóa

Complete (Hoàn chỉnh) Kết thúc toàn bộ cây kế thừa trong thiết kế

Incomplete (Không hoàn chỉnh ) Cây kế thừa có thể mở rộng

Disjoint (Phân tách) Các Subclass loại trừ lần nhau Không hỗ trợ đa kế thừa

Overlapping (Chồng lắp) Các Subclass không loại trừ lẫn nhau Hỗ trợ đa kế thừa

Page 97: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 97

Ví dụ: Generalization Constraints

Asset

RealEstate

Bank Account Security

Saving Checking Stock Bond

{disjoint}

{disjoint,complete}{disjoint}

Kết thúc cây kế thừa

Không hỗ trợ

đa kế thừa

Page 98: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 98

Ví dụ: Generalization Constraints (tt.)

Vehicle

WaterVehicle

LandVehicle

Amphibious Vehicle

{overlapping}

Hoã trôï

ña keá thöøa

Page 99: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 99

Window

WindowWithScrollbar

Scrollbar

Có đúng không?

Chọn Generalization hay Aggregation

Rất dễ nhầm lẫm giữa Generalization và aggregation Generalization biểu diễn quan hệ “là một” hay “dạng của” Aggregation biểu diễn quan hệ “một bộ phận của”

Page 100: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 100

Scrollbar

Window

WindowWithScrollbar11

Window

WindowWithScrollbar

Scrollbar

Một WindowWithScrollbar “là một” WindowMột WindowWithScrollbar “chứa một” Scrollbar

Chọn Generalization hay Aggregation

Page 101: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 101

Sử dụng quan hệ tổng quát hóa

Chia sẻ các thuộc tính và hành vi chung Chia sẻ cài đặt Cài đặt cơ chế Polymorphism Cài đặt cơ chế Metamorphosis

Page 102: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 102

Sử dụng quan hệ tổng quát hóa Chia sẻ các thuộc tính và hành vi chung Chia sẻ cài đặt Cài đặt cơ chế Polymorphism Cài đặt cơ chế Metamorphosis

Page 103: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 103

List

insertTop (Item)insertBottom (Item)removeTop ()removeBottom ()insert (Item, position)

Stack

Animal

talk ()

Lion Tiger

talk () talk ()

Các class trên có tuân thủ IS-A style of programming?

Chia sẻ các thuộc tính và hành vi chung

Tuân thủ qui tắc lập trình “Là một dạng của” Khả năng thay thể Class

Page 104: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 104

Animal

talk ()

Lion Tiger

talk () talk ()

Chia sẻ các thuộc tính và hành vi chung (tt)

List

insertTop (Item)insertBottom (Item)removeTop ()removeBottom ()insert (Item, position)

Stack

Page 105: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 105

Sử dụng quan hệ tổng quát hóa Chia sẻ các thuộc tính và hành vi chung Chia sẻ cài đặt Cài đặt cơ chế Polymorphism Cài đặt cơ chế Metamorphosis

Page 106: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 106

List

insertBottom (Item)removeBottom ()insert (Item, position)

Stack

SequentialContainer

insertTop (Item)removeTop ()

List

insertTop (Item)insertBottom (Item)removeTop ()removeBottom ()insert (Item, position)

Stack

Chia sẻ cài đặt: Factoring (phân chia)

Hỗ trợ khả năng dùng lại khi cài đặt class khác Không thể dùng nếu class bạn muốn “dùng lại” không thể thay

đổi

Page 107: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 107

List

insertBottom (Item)removeBottom ()insert (Item, position) remove (position)

Stack

push (Item)pop (): Item 11

List

insertTop (Item)insertBottom (Item)removeTop ()removeBottom ()insert (Item, position)

Stack

Chia sẻ cài đặt: Delegation (đại diện)

Hổ trợ khả năng dùng lại khi cài đặt class khác Không thể dùng nếu class bạn muốn “dùng lại” không thể thay

đổi

Page 108: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 108

List

insertBottom (Item)removeBottom ()insert (Item, position)remove (position)insertTop (Item)

Stack

push (Item)pop ()

push() and pop() có thể truy cập đến các method của List nhưng các thể hiện của Stack thì không

<<implementation>>

Quan hệ kế thừa dạng <<implementation>>

Các public operation, attribute và relationship của tổ tiên không nhìn thấy được bởi các client của các thể hiện của các class con cháu

Các class con cháu phải định nghĩa các truy cập đến operations, attributes, và relationships của tổ tiên

Page 109: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 109

Sử dụng quan hệ tổng quát hóa Chia sẻ các thuộc tính và hành vi chung Chia sẻ cài đặt Cài đặt cơ chế Polymorphism Cài đặt cơ chế Metamorphosis

Page 110: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 110

Manufacturer AManufacturer B

Manufacturer C

OO Principle:Encapsulation

Nhắc lại: Polymorphism là gì ?

Khả năng che dấu nhiều cài đặt bên dưới một interface duy nhất

Page 111: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 111

Cài đặt Polymorphism

Không có Polymorphism Có Polymorphism

Animal

talk ()

Lion Tiger

talk () talk ()

if animal = “Lion” thendo the Lion talk

else if animal = “Tiger” thendo the Tiger talk

end

do the Animal talk

Page 112: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 112

So sánh Interface và Generalization

Các Interface hỗ trợ biểu diễn độc lập với cài đặt của polymorphism Realization relationships có thể băng ngang qua cấu trúc

phân cấp của quan hệ tổng quát hóa Các Interface chỉ thuần là đặc tả, không có hành vi

Abstract base class có thể định nghĩa attributes và associations

Các Interface hoàn toàn độc lập với quan hệ kế thừa Generalization thường dùng để cài đặt việc dùng lại Interfaces thường dùng để đặc tả việc tái sử dụng các hành

vi Generalization cung cấp một cách cài đặt polymorphism

Page 113: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 113

Dùng quan hệ tổng quát hóa để cài Polymorphism

Chỉ cung cấp interface cho các class con cháu? Thiết kế tổ tiên như một abstract class Mọi method cài đặt ở các class con cháu

Cung cấp interface và behavior mặc định cho các class con cháu? Thiết kế tổ tiên như một concrete class với các method mặc

định Cho phép dùng các polymorphic operation

Cung cấp interface và behavior bắt buộc cho các class con cháu? Thiết kế tổ tiên là concrete class Không cho phép các polymorphic operation

Page 114: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 114

Sử dụng quan hệ tổng quát hóa Chia sẻ các thuộc tính và hành vi chung Chia sẻ cài đặt Cài đặt cơ chế Polymorphism Cài đặt cơ chế Metamorphosis

Page 115: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 115

Metamorphosis tồn tại trong thể giới thựcLàm sao mô hình hóa chúng?

Metamorphosis là gì?

Metamorphosis 1. Một thay đổi trong hình dạng, cấu trúc, hay chức năng;

đặc biệt là các thay đổi vật lý mà các động vật phải trải qua, như con nòng nọc biến thành con ếc

2. Mọi thay đổi được ghi nhận, như trong các ký tự, thể hiện, hoặc điều kiện

Xem thêm Webster’s New World Dictionary, Simon & Schuster, Inc., 1979

Page 116: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 116

FulltimeStudentnameaddressstudentIDgradDate

ParttimeStudentnameaddress

maxNumCoursesstudentID

Ví dụ: Metamorphosis

Trong trường đại học, có full time students và part time students Full time students có ngày tốt nghiệp dự kiến còn part time

students lại không Part time students có thể đăng ký học tối đa 3 môn trong khi

full time students không bị giới hạn

Page 117: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 117

Chuyện gì xảy ra nếu một part-time student

trở thành full-time student?

FulltimeStudent

StudentnameaddressstudentID

gradDate

ParttimeStudent

maxNumCourses

Một hướng tiếp cận Modeling Metamorphosis

Có thể tạo một quan hệ tổng quát hóa

Page 118: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 118

1 1 Classification

ParttimeClassificationmaxNumCourses

StudentnameaddressstudentID

FulltimeClassification

gradDateFulltimeStudent

StudentnameaddressstudentID

gradDate

ParttimeStudent

maxNumCourses

Một hướng tiếp cận khác

Quan hệ kế thừa có thể dùng để mô hình hóa cấu trúc, hành vi và quan hệ chung và tạo quan hệ với phần “thay đổi”

Page 119: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 119

: Student : FulltimeClassification

: StudentManager

: ParttimeClassification

delete

create

change to full time

Một hướng tiếp cận khác (tt)

Metamorphosis được hoàn tất bởi object “nói chuyện với” phần “thay đổi”

Page 120: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 120

studentID

11ResidentInformation

dormroomroomKeyID

Studentnameaddress10..1 10..1

Classification1

Metamorphosis và tính mềm dẻo Kỹ thuật này thêm tính mềm dẻo cho mô hình

ParttimeClassificationmaxNumCourses

FulltimeClassification

gradDate

Page 121: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 121

Bài tập: Định nghĩa Generalizations

Hãy cho biết: Tất cả các design class

Hãy xác định: Tât cả các tinh chỉnh liên quan đên generalizations có sẵn Mọi ứng dụng generalization mới

• Kiểm tra là đã xem xétmọi metamorphosis Xây dựng các lược đồ:

Class diagram chứa mọi quan hệ tổng quát hóa mới (hay đã tính chỉnh) giữa các class

Tinh chỉnh use-case realizations (optional)

Page 122: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 122

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 123: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 123

Giải quyết đụng độ giữa các Use-Case

Nhiều use case có thể truy cập riêng rẽ đến các design object Options

Dùng cơ chế truyền message đồng bộ => đến trước được xử lý trước

Xác định các operation (hay code) cần protect Áp dụng cơ chế access control

• Lập hàng đợi Message• Semaphores (hoặc 'tokens')• Các cơ chế khóa khác

Lời giải phụ thuộc nhiều vào môi trường cài đặt

Page 124: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 124

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 125: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 125

Xử lý các yêu cầu phi chức năng nói chung

Analysis Class Analysis Mechanism(s)

StudentSchedule

CourseOfferingCourse

RegistrationController

Persistency, Security

Persistency, Legacy InterfacePersistency, Legacy Interface

Distribution

Persistency, Security

Analysis Design Implementation

Remote Method Invocation (RMI)

Persistency

AnalysisMechanism

(Conceptual)

DesignMechanism(Concrete)

ImplementationMechanism

(Actual)

OODBMS

RDBMSJDBC

ObjectStore

Java 1.2 from Sun

Legacy Data

New Data

Distribution

Persistency DesignGuidelines

Some Design Class

Page 126: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 126

Các bước thiết kế Class

Tạo các Design Class ban đầu Xác định các Persistent Class Định nghĩa các Operation Định nghĩa Class Visibility Định nghĩa các Method Định nghĩa các trạng thái Định nghĩa các thuộc tính Định nghĩa các phụ thuộc Định nghĩa các mỗi kết hợp Định nghĩa các quan hệ tổng quát hóa Giải quyết đụng độ giữa các Use-Case Xử lý các yêu cầu phi chức năng nói chung Checkpoints

Page 127: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 127

Checkpoints: Các Class

Tên của mỗi class có phản ánh rõ vai trò của nó không? Class có biểu diễn một single well-defined abstraction? Tất cả các attribute và trách nhiệm có gắn kết với nhau? Có bất kỳ class attribute, operation hay relationship nào cần

tổng quát hóa, nghĩa là, chuyển lên tổ tiên không? Mọi yêu cầu trên class đã xử lý? Mọi đòi hỏi trên class phù hơp với với statecharts mô hình hóa

hành vi của class và các thể hiện của nó? Đã mô tả trọn vẹn chu kỳ sống của các thể hiện của class ? Class thực hiện mọi hành vi cần thiết?

Page 128: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 128

Checkpoints: Operations

Các operation có dễ hiểu? Các mô tả trạng thái của class và hành vi của các object của nó

có chính xác? Class có thực hiện đúng hành vi yêu cầu nó? Bạn đã các định các tham số đúng chưa ? Bạn đã gán đầy đủ operations cho các message của mỗi

object? Các đặc tả cài đặt (nếu có) của operation có chính xác ? Các operation signature có phù hợp với ngôn ngữ lập trình cài

đặt hệ thống? Tất cả các operation đề cần cho use-case realization?

Page 129: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 129

Checkpoints: Attributes

Mỗi attribute biểu diễn một khái niệm đơn? Tên của các attribute có gợi nhớ? Tất cả các attribute là cần thiết cho các use-case realization?

Page 130: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 130

Checkpoints: Relationships

Tên của role gợi nhớ? Bản số của các relationship có chính xác?

Page 131: Giáo trình Phân tích và thiết kế hướng đối tượng bằng UML

Thiết kế ClassDương Anh Đức 131

Nhắc lại: Class Design

Mục đích của Class Design là gì? Các class được tinh chỉnh bằng cách nào? Các statechart được tạo cho mỗi class? Các component chính của statechart là gì ? Cho mô tả ngắn

gọn về mỗi thứ. Có những dạng tinh chỉnh relationship nào? Sự khác nhau giữa association và dependency? Ta phải làm gì với operations và attributes?