1. Công cụ và môi trường phát triển phần mềm
Thiết kế Class
Thiết kế Class
Dương Anh Đức 1
2. Mục tiêu
w 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
w 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
w 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
w Tinh chỉnh các quan hệ, operation, và thuộc tính
Thiết kế Class
Dương Anh Đức 2
3. Vị trí của Thiết kế Class
Architectural
Analysis
Architectural Describe Review the Architecture
Describe Architecture
Architect Design Concurrency Distribution Reviewer
Subsystem Design
Use-Case
Analysis
Review the
Use-Case Design Design
Designer Design Reviewer
Class
Design
Thiết kế Class
Dương Anh Đức 3
4. Tổng quan về Class
Design Architecture Document
Guidelines
Design Classes
Class
Design Design Classes
Use-Case Realization
Design Model
Thiết kế Class
Supplementary
Dương Anh Đức 4
Specifications
5. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 5
6. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 6
7. Các khảo sát khi thiết kế Class
w Class stereotype
§ Boundary
§ Entity
§ Control
w Các design pattern khả dụng
w Các cơ chế kiến trúc
§ Persistence
§ Distribution
§ …
Thiết kế Class
Dương Anh Đức 7
8. Cần bao nhiêu Class ?
w 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
w 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
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 !
Thiết kế Class
Dương Anh Đức 8
9. Thiết kế các Boundary Class
w 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ụ?
w Các External system interface boundary class
§ Thường được mô hình như subsystem
MainWindow SubWindow
MainForm
Button DropDownList
Thiết kế Class
Dương Anh Đức 9
10. Thiết kế các Entity Class
w Các Entity object thường thụ động và persistent
w Các yêu cầu về hiệu năng có thể buộc ta phải tái xây dựng
w Xem thêm bước xác định Persistent Class
Analysis Design
<< entity >> FatClass
FatClass
- transientBookeeping
- transientBookeeping
+ commonlyUsedAtt1 + getCommonlyUsedAtt1()
+ commonlyUsedAtt2 + getCommonlyUsedAtt2()
+ rarelyUsedAtt3 + getRarelyUsedAtt3()
+ rarelyUsedAtt4 + getRarelyUsedAtt4()
1 1
FatClassDataHelper FatClassLazyDataHelper
+ commonlyUsedAtt1 + rarelyUsedAtt3
+ commonlyUsedAtt2 + rarelyUsedAtt4
Thiết kế Class
Dương Anh Đức 10
11. Thiết kế Control Class
w 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?
w 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
Thiết kế Class
Dương Anh Đức 11
12. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 12
13. Xác định Persistent Class
w Mọi thể hiện của class đều đòi hỏi phải lưu giữ trạng thái của
nó
w Các Persistent class được gán với cơ chế persistence
Client Analysis Design Implementation
Class Mechanism Mechanism Mechanism
(Conceptual) (Concrete) (Actual)
Legacy Data
Course Persistency RDBMS JDBC to Ingres
New Data
Student
Persistency OODBMS ObjectStore
Thiết kế Class
Dương Anh Đức 13
14. Database Design Preview
w Chiến lược Persistence phải nhất quán
w Ở đây, nhớ rằng các class đều persistent
Class Class
Design
Designer
Database
Design
Database Designer
Data Model
Thiết kế Class
Dương Anh Đức 14
15. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 15
16. Định nghĩa các Operation
w 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
w 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
Thiết kế Class
Dương Anh Đức 16
17. Nhắc lại: Operation là gì ?
CourseOffering
Class
addStudent
deleteStudent
getStartTime
Operation getEndTime
Thiết kế Class
Dương Anh Đức 17
18. Operation: Tìm chúng ở đâu?
w Các thông điệp trong các interaction diagram
:ClassA :ClassB :ClassA :ClassB
// Perform responsibility performResponsibility():result
w 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, …
Thiết kế Class
Dương Anh Đức 18
19. Đặt tên và mô tả các Operation
w 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
w Định nghĩa operation signature
§ operationName(parameter : class,..) : returnType
w Cung cấp một mô tả ngắn, bao gồm ý nghĩa của tất cả các
tham số
Thiết kế Class
Dương Anh Đức 19
20. Guidelines: Thiết kế Operation Signatures
w 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ệ?
w Càng ít tham số càng tốt
w Truyền các object thay vì “data bits”
Thiết kế Class
Dương Anh Đức 20
21. Phát hiện Additional Classes và Relationships
ClassA Class2
op1(var1:Class2): Class3
Class3
Additional classes và relationships có thể được
thêm vào để hỗ trợ signature
Thiết kế Class
Dương Anh Đức 21
22. Operation Visibility
w Tính khả kiến được dùng để cung cấp tính đóng gói
w Giá trị có thể là public, protected, hay private
Private operations
Protected
operations
Public
operations
Thiết kế Class
Dương Anh Đức 22
23. Ký hiệu tính khả kiến?
w Các ký hiệu sau được dùng:
§ + Public access
§ # Protected access
§ - Private access
Class
- privateAttribute
# protectedAttribute
+publicOp()
# protectedOp()
- privateOp()
Thiết kế Class
Dương Anh Đức 23
24. Tầm vực
w 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
w Tầm vực mức Classifier được ký hiệu bằng cách gạch dưới tên
attribute/operation
Class
- classifierScopeAttribute
- instanceScopeAttribute
classifierScopeOperation()
instanceScopeOperation()
Thiết kế Class
Dương Anh Đức 24
25. Ví dụ: Scope
<<entity>>
Student
- name
- address
- studentID
- nextAvailID : int
+ addSchedule(theSchedule : Schedule, forSemester : Semester)
+ getSchedule(forSemester : Semester) : Schedule
+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean
# passed(theCourseOffering : CourseOffering) : boolean
+ getNextAvailID() : int
Thiết kế Class
Dương Anh Đức 25
26. Utility Classes
w 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í
w 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
<<utility>>
MathFunctions
Thiết kế Class
Dương Anh Đức 26
27. Ví dụ: Utility Classes
<<utility>>
MathPack
-randomSeed : long = 0
-pi : double = 3.14159265358979
+sin (angle : double) : double
+cos (angle : double) : double
+random() : double
Thiết kế Class
Dương Anh Đức 27
28. Ví dụ: Định nghĩa các Operation
<<Interface>>
<<control>> ICourseCatalogSystem
RegistrationController 1 (from External System Interfaces)
(from Registration) 0..*
+ getCourseOfferings()
+ submitSchedule() + initialize()
+ saveSchedule()
+ getCourseOfferings() : CourseOfferingList
+ getCurrentSchedule(forStudent : Student, forSemester : Semester) : Schedule
+ deleteCurrentSchedule()
<<class>> + new(forStudent : string) +currentSchedule
+ getStudent(withID : string) : Student 0..1 <<entity>>
0..1 Schedule
(from University Artifacts)
0..1
0..*
0..*
+registrant 0..*
0..1
<<entity>> +alternateCourses
Student. 1
(from University Artifacts) +primaryCourses
+ getTuition() : double 0..2 0..4
+ addSchedule(theSchedule : Schedule)
+ getSchedule(forSemester : Semester) : Schedule <<entity>>
+ deleteSchedule(forSemester : Semester) CourseOffering
+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean (from University Artifacts)
# passed(theCourseOffering : CourseOffering) : boolean
<<class>> + getNextAvailID() : int
+ getStudentID() : int
+ getName() : string
+ getAddress() : string
Thiết kế Class
Dương Anh Đức 28
29. Bài tập: Định nghĩa các Operation
w 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ể
(còn tiếp)
Thiết kế Class
Dương Anh Đức 29
30. Bài tập: Define Operations (tt.)
w 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
(còn tiếp)
Thiết kế Class
Dương Anh Đức 30
31. Bài tập: Định nghĩa các Operation (tt.)
w 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ệ
Thiết kế Class
Dương Anh Đức 31
32. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 32
33. Nhắc lại: Package Element Visibility
PackageA
Class A1
Class A2
A
Class A3
Chỉ có thể tham chiếu
tới các public class từ
PackageB
bên ngoài package
B chứa nó
+Class B1
-Class B2
Public visibility
Private visibility
OO Principle: Encapsulation
Thiết kế Class
Dương Anh Đức 33
34. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 34
35. Định nghĩa các Method
w Method là gì ?
§ Mô tả cài đặt của operation
w Mục đích
§ Định nghĩa các khía cạnh đặc biệt của operation
implementation
w 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ệ
Thiết kế Class
Dương Anh Đức 35
36. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 36
37. Định nghĩa các trạng thái
w 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
w 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?
Thiết kế Class
Dương Anh Đức 37
38. Statechart là gì?
w 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
w Mô tả lịch sử đời sống của đối tượng
State Event
State Name event(args)
[guard condition]
stateVar : type = value / operation(args)
^target.sendEvent(args)
entry/ entry action
do/ activity
exit/ exit action Action
Activity
Transition
Thiết kế Class
Dương Anh Đức 38
39. Các trạng thái đặc biệt
w 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
Initial state
w 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
Thiết kế Class
Dương Anh Đức 39
40. Qui trình suy dẫn ra Statecharts
w Xác định và định nghĩa các trạng thái
w Xác định các event
w Xác định các transition (hồi đáp lại các event)
w Thêm các activity và các action
Thiết kế Class
Dương Anh Đức 40
41. Xác định và định nghĩa các trạng thái
w Significant, dynamic attributes
Số sinh viên tối đa trong 1 lớp là 100
numStudents < 100 numStudents > = 100
Open Closed
w Sự tồn tại và không tồn tại của các link
Professor
Link to Professor Link to Professor
Exists Doesn’t Exist
0..1
0..* Assigned Unassigned
CourseOffering
Thiết kế Class
Dương Anh Đức 41
42. Xác định các Event
w Xem xét các class interface operation
<<entity>>
CourseOffering 0..* 0..1 <<entity>>
+ addProfessor() Professor
+instructor
+ removeProfessor()
Events: addProfessor, removeProfessor
Thiết kế Class
Dương Anh Đức 42
43. Xác định các Transition
w 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
w Transitions mô tả điều gì xảy ra khi đối tượng hồi đáp lại một
event nhân được
<<entity>>
CourseOffering 0..* 0..1 <<entity>>
+ addProfessor() Professor
+instructor
+ removeProfessor()
Unassigned
addProfessor
removeProfessor
Assigned
Thiết kế Class
Dương Anh Đức 43
44. Thêm Activities và Actions
w Activities State A
§ Kết hợp với một trạng thái
§ Bắt dầu khi trạng thái bắt đầu action
§ Cần thời gian để hoàn tất event[ condition ] / action
§ Có thể ngắt
activity State B State C
do: activity entry: action
w 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
Thiết kế Class
Dương Anh Đức 44
45. Gửi Events
w Một event có thể gây ra việc gửi một event khác
w Một activity cùng có thể gửi event đến object khác
State A
event ^TargetObject.event
State B
do: ^TargetObject.event
Thiết kế Class
Dương Anh Đức 45
46. Ví dụ: Statechart
add student / numStudents = numStudents + 1
/ numStudents = 0 remove student / numStudents = numStudents - 1
Unassigned
closeRegistration
cancel Cancelled
addProfessor
do: Send cancellation notices
close
removeProfessor cancel
[ numStudents = 10 ]
cancel
Full
close[ numStudents < 3 ] close
add student / closeRegistration [ has Professor assigned ]
[ numStudents = 10 ]
numStudents = numStudents + 1
Assigned closeRegistration[ numStudents >= 3 ] Committed
do: Generate class roster
close[ numStudents >= 3 ]
remove student / numStudents = numStudents - 1
Thiết kế Class
Dương Anh Đức 46
47. Ví dụ: Statechart với các trạng thái lồng nhau
superstate
/ numStudents = 0 Open closeRegistration Closed
close Cancelled
Unassigned do: Send cancellation notices
cancel
cancel
substate
Full
close[ numStudents < 3 ]
remove a professor
[ numStudents = 10 ] close
add a professor
closeRegistration [ has Professor assigned ]
closeRegistration[ numStudents >= 3 ] Committed
Assigned
do: Generate class roster
add student /
numStudents = numStudents + 1
close[ numStudents >= 3 ]
H
remove student / numStudents = numStudents - 1
Thiết kế Class
Dương Anh Đức 47
48. Những Object có Significant State?
w Các Object có vai trò thể hiện rõ bởi state transitions
w Các use case phức tạp là state-controlled
w 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
Thiết kế Class
Dương Anh Đức 48
49. Cách Statecharts gắn với phần còn lại?
w Các Event biến thành các operation
w 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
w 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
[numStudents = 10]
Open Full
CourseOffering
add student / /- numStudents
numStudents = numStudents + 1
+ addStudent()
(Stay tuned for derived attributes)
Thiết kế Class
Dương Anh Đức 49
50. Bài tập: Định nghĩa States (optional)
w Hãy cho biết:
§ Tất cả các design classe
w 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
w Hãy xây dựng lược đồ:
§ Statechart của một class
Thiết kế Class
Dương Anh Đức 50
51. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 51
52. Định nghĩa Attributes
w Mục đích
§ Formalize definition of attributes
w Những gì cần xem xét:
§ Persistency
§ Visibility
§ Tên gọi, kiểu, và giá trị mặc định
Thiết kế Class
Dương Anh Đức 52
53. Nhắc lại: Thế nào là Attribute?
Object
Class
Attribute Attribute Value
:CourseOffering
number = 101
startTime = 900
CourseOffering endTime = 1100
number
startTime
endTime :CourseOffering
number = 104
startTime = 1300
endTime = 1500
Thiết kế Class
Dương Anh Đức 53
54. Cách tìm ra các Attribute?
w Khảo sát mô tả của các method
w Khảo sát các trạng thái
w Bất kỳ thông tin nào mà class cần duy trì
Thiết kế Class
Dương Anh Đức 54
55. Biểu diễn Attribute
w Mô tả name, type, và giá trị mặc định
§ attributeName : Type = Default
w Tuân thủ qui ước đặt tên của NNLT và dự án
w Type phải là KDL cơ sở trong NNLT cài đặt
§ Các KDL định sẵn, người dùng đ/n
w Mô tả tình khả kiến
§ Public: ‘+’
§ Private: ‘-’
§ Protected: ‘#’
Thiết kế Class
Dương Anh Đức 55
56. Các Derived Attribute
w 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
w 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
Thiết kế Class
Dương Anh Đức 56
57. Ví dụ: Define Attributes
<<Interface>>
ICourseCatalogSystem
(from External System Interfaces)
<<control>>
RegistrationController
(from Registration)
0..1 +currentSchedule
<<entity>>
0..1 Schedule
0..1 (from University Artifacts)
- semester : Semester
0..*
0..* 0..*
+registrant
+alternateCourses
+primaryCourses
0..1 0..2 0..4
<<entity>> <<entity>>
Student. 1 CourseOffering
(from University Artifacts) (from University Artifacts)
- name : string - number : String = "100"
- address : string - startTime : Time
<<class>> - nextAvailID : int - endTime : Time
- studentID : int - days : string
- dateofBirth : Date /- numStudents : int = 0
Thiết kế Class
Dương Anh Đức 57
58. Bài tập: Define Attributes (optional)
w 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ể
(còn tiếp)
Thiết kế Class
Dương Anh Đức 58
59. Bài tập: Define Attributes (tt.)
w 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
(còn tiếp)
Thiết kế Class
Dương Anh Đức 59
60. Bài tập: Define Attributes (cont.)
w Xây dựng lược đồ:
§ VOPC class diagram, chứa tất cả các attribute và mối quan
hệ
Thiết kế Class
Dương Anh Đức 60
61. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 61
62. Định nghĩa Dependency
w Dependency là gì?
§ Là một loại quan hệ giữa hai object
Client Supplier
w 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
w 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
Thiết kế Class
Dương Anh Đức 62
63. So sánh Dependency và Association
w Association là quan hệ câu trúc
w Dependency là quan hệ phi cấu trúc
w Để “nói chuyện” được, object phải khả kiến
§ Tham chiếu đến biến cục bộ
Supplier2
§ Tham chiếu đến tham số
§ Tham chiếu toàn cục Dependency
§ Tham chiếu đến trường dữ liệu (Field)
Association
Client
Supplier1
Thiết kế Class
Dương Anh Đức 63
64. Local Variable Visibility
w Operation op1() chứa một biến cục bộ có kiểu ClassB
ClassA
op1 ()
ClassB
Thiết kế Class
Dương Anh Đức 64
65. Parameter Visibility
w Thể hiện của ClassB được truyền đến cho thể hiện của ClassA
ClassA
op1 (param1: ClassB)
ClassB
Thiết kế Class
Dương Anh Đức 65
66. Global Visibility
w 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)
ClassA
op1 ()
ClassUtility
utilityOp ()
Thiết kế Class
Dương Anh Đức 66
67. Xác định Dependency
w Bám vào các quan hệ trong thế giới thực
w Bám váo các quan hệ yếu nhất (dependency)
w Quan hệ là “thường trực”? Dùng association (field visibility)
w 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)
w 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
Thiết kế Class
Dương Anh Đức 67
68. Ví dụ: Trước khi định nghĩa Dependency
<<Interface>>
ICourseCatalogSystem
(from External System Interfaces)
+ getCourseOfferings(forSemester : Semester) : CourseOfferingList
1
0..* courseCatalog
<<entity>>
<<control>>
Schedule
RegistrationController
(from University Artifacts)
(from Registration)
currentSchedule - semester
+ // submit schedule()
+ // save schedule() 0..1 0..1 + submit()
+ // save()
+ // create schedule with offerings()
# any conflicts?()
+ // getCourseOfferings(forSemester) : CourseOfferingList
+ // create with offerings()
0..1 0..*
0..* 0..*
alternateCourses primaryCourses
registrant 1
0..2 0..4
0..1
<<entity>>
<<entity>> CourseOffering
Student (from University Artifacts)
(from University Artifacts) - number : String = "100"
- name - startTime : Time
- address - endTime : Time
- StudentID : int - days : Enum
+ addSchedule(theSchedule : Schedule, forSemester : Semester) + addStudent(studentSchedule : Schedule)
+ getSchedule(forSemester : Semester) : Schedule + removeStudent(studentSchedule : Schedule)
+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean + new()
# passed(theCourseOffering : CourseOffering) : boolean + setData()
Thiết kế Class
Dương Anh Đức 68
69. Ví dụ: Sau khi định nghĩa Dependency
<<Interface>>
ICourseCatalogSystem
(from External System Interfaces)
+ getCourseOfferings(forSemester : Semester) : CourseOfferingList
Global visibility
<<entity>>
<<control>>
Schedule
RegistrationController
(from University Artifacts)
(from Registration)
currentSchedule - semester
+ // submit schedule()
+ // save schedule() 0..1 0..1 + submit()
+ // save()
+ // create schedule with offerings()
# any conflicts?()
+ // getCourseOfferings(forSemester) : CourseOfferingList
+ // create with offerings() Field visibility
0..1 0..*
0..* 0..*
Field visibility alternateCourses primaryCourses
registrant 1
0..2 0..4
0..1
<<entity>>
<<entity>> CourseOffering
Student (from University Artifacts)
(from University Artifacts) - number : String = "100"
- name - startTime : Time
- address - endTime : Time
- StudentID : int - days : Enum
+ addSchedule(theSchedule : Schedule, forSemester : Semester) + addStudent(studentSchedule : Schedule)
+ getSchedule(forSemester : Semester) : Schedule + removeStudent(studentSchedule : Schedule)
+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean + new()
# passed(theCourseOffering : CourseOffering) : boolean + setData()
Thiết kế Class
Dương Anh Đức 69
Parameter visibility
70. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 70
71. Định nghĩa Associations
w Mục đích
§ Tinh chỉnh các association còn lại
w 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)
Thiết kế Class
Dương Anh Đức 71
72. Nhắc lại: Composition là gì ?
w 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ể”
Whole Part
Whole Part
Aggregation
Thiết kế Class
Dương Anh Đức 72
73. Aggregation: Shared hay không shared
w Shared Aggregation
Bản số > 1
Whole 1..* 0..* Part
w Non-shared Aggregation
Bản số = 1 Bản số = 1
Whole 1 0..* Part Whole 1 0..* Part
Composition
Theo định nghĩa, composition là non-shared aggregation
Thiết kế Class
Dương Anh Đức 73
74. Aggregation hay Composition?
w Xem xét
§ Chu kỳ sống của Class1 và Class2
Class1 Class2
aggregation
Class1 Class2
composition
Thiết kế Class
Dương Anh Đức 74
75. Ví dụ: Composition
Student 1 0..* Schedule
RegisterForCoursesForm 1 1 RegistrationController
Thiết kế Class
Dương Anh Đức 75
76. Cân nhắc giữa Attributes và Composition
w 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
w Các trường hợp còn lại dùng attributes
Thiết kế Class
Dương Anh Đức 76
77. Ví dụ: Attributes/Composition
<<entity>> Attributes
Student
- name
<<entity>>
- address
<<classifier scope>> - nextAvailID : int Schedule
- StudentID : int - Semester
- dateofBirth : Date + submit()
+ // save()
+ addSchedule() 1 0..* # any conflicts?()
+ getSchedule()
+ // create with offerings()
+ delete schedule()
+ hasPrerequisites() + new()
# passed() + passed()
Composition of
separate class
Thiết kế Class
Dương Anh Đức 77
78. Chiều của quan hệ
w Khảo sát các interaction diagram
w 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
Schedule primaryCourses CourseOffering
0..* 0..4
?
Schedule primaryCourses CourseOffering Schedule primaryCourses CourseOffering
0..* 0..4 0..* 0..4
Thiết kế Class
Dương Anh Đức 78
79. Ví dụ: Tinh chỉnh chiều quan hệ
w Tổng số Schedule nhỏ, hay
w Không bao giờ cần một list Schedule primaryCourses CourseOffering
Schedule có CourseOffering
xuất hiện trên đó 0..* 0..4
w Tổng số CourseOffering nhỏ,
hay Schedule primaryCourses CourseOffering
w Không bao giờ cần một list 0..* 0..4
CourseOffering có Schedule
xuất hiện trên đó
w Tổng số CourseOffering và
Schedule đều không nhỏ Schedule primaryCourses CourseOffering
w Phải quan tâm đến cả 2 chiều
0..* 0..4
Thiết kế Class
Dương Anh Đức 79
80. Ví dụ: Thiết kế Association Class
alternateCourses
0..* 0..2
Schedule primaryCourses CourseOffering
0..* 0..4
PrimaryScheduleOfferingInfo
- grade: char = I
Design Decisions
alternateCourses
0..* 0..2
Schedule PrimaryScheduleOfferingInfo CourseOffering
primaryCourseOfferingInfo
1 0..4 - grade: char = I 0..* 1
Thiết kế Class
Dương Anh Đức 80
81. Thiết kế bản số
w 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
Professor instructor CourseOffering
0..1 0..*
w 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 instructor CourseOffering Cần một
0..1 0..* container
Thiết kế Class
Dương Anh Đức 81
82. Multiplicity Design Options
w Mô hình hóa tường minh một container class
CourseOfferingList
Professor instructor CourseOffering <<entity>> +instructor
Professor
0..1 0..* + new()
0..1 0..1
+ add()
1
0..*
w Ghi chú <<entity>>
CourseOffering
List
Professor instructor CourseOffering
0..1 0..*
Thiết kế Class
Dương Anh Đức 82
83. Parameterized Class (template) là gì?
w Là một class dùng để định nghĩa các class khác
w Thường dùng cho các container class
§ Một số container class thông dụng:
• Set, list, dictionary, stack, queue, …
Formal Item
arguments
Parameterized List
Class
Thiết kế Class
Dương Anh Đức 83
84. Thể hiện của Parameterized Class
Kết buộc tường minh Kết buộc ẩn
Formal arguments
Instantiated Class <actual arguments>
Parameterized
Class
HAY
<<bind>> <actual arguments>
Instantiated Class
Thiết kế Class
Dương Anh Đức 84
85. Ví dụ: Thể hiện của Parameterized Class
Trước
<<entity>>
CourseOfferingList
CourseOffering
1 0..*
Sau
Item
List
List <CourseOffering> CourseOffering
HAY
<<bind>> <CourseOffering>
CourseOfferingList CourseOffering
Thiết kế Class
Dương Anh Đức 85
86. Multiplicity Design: Optionality
w 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
Professor CourseOffering
0..1 0..* hasInstructor( ) : Boolean
isTeaching( ) : Boolean
Thiết kế Class
Dương Anh Đức 86
87. Bài tập: Đ/n Dependency và Association
w 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
Thiết kế Class
Dương Anh Đức 87
88. Bài tập: Đ/n Dependenc và Association (tt.)
w 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ố
Thiết kế Class
Dương Anh Đức 88
89. Bài tập: Đ/n Dependency và Association (tt.)
w 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ệ
Thiết kế Class
Dương Anh Đức 89
90. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 90
91. Định nghĩa quan hệ tổng quát hóa
w 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ả
w 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
Thiết kế Class
Dương Anh Đức 91
92. Nhắc lại: Generalization
w Một class chi sẻ cấu trúc và hành vi của một hay nhiều class
w Là quan hệ “Là một dạng của” ancestor
w Trong phân tích, ít khi dùng đến Account
balance
name
number
Superclass
Withdraw()
(parent) CreateStatement()
Generalization
Relationship
Checking Savings
Subclasses
GetInterest()
descendents
Thiết kế Class
Dương Anh Đức 92
93. Abstract và Concrete Class
w Abstract class không có bất kỳ thể hiện nào
w Concrete classes có thể có thể hiện (object)
Animal
{abstract} Abstract class
Chuyên biệt hóa
talk () {abstract} Abstract operation
Communication Không có thể hiện của Animal
Lion Tiger
talk () talk ()
Tất cả các object đều hoặc là Lion hoặc là Tiger
Thiết kế Class
Dương Anh Đức 93
94. Nhắc lại: Đa kế thừa
w Một class có thể kế thừa từ nhiều class
FlyingThing Animal
multiple
inheritance
Airplane Helicopter Bird Wolf Horse
Dùng đa kế thức chỉ khi thật cần thiết, và phải luôn cẩn thận !
Thiết kế Class
Dương Anh Đức 94
95. Các vấn đề của đa kế thừa
Tên của attribute hay Lặp lại việc kế thừa
operation bị trùng
FlyingThing Animal AnimateObject
color color color
getColor getColor
FlyingThing Animal
Bird
Bird
Lời giải của các vấn đề trên phụ thuộc cài đặt cụ thể
Thiết kế Class
Dương Anh Đức 95
96. Các ràng buộc của quan hệ tổng quát hóa
w Complete (Hoàn chỉnh)
§ Kết thúc toàn bộ cây kế thừa trong thiết kế
w Incomplete (Không hoàn chỉnh )
§ Cây kế thừa có thể mở rộng
w Disjoint (Phân tách)
§ Các Subclass loại trừ lần nhau
§ Không hỗ trợ đa kế thừa
w Overlapping (Chồng lắp)
§ Các Subclass không loại trừ lẫn nhau
§ Hỗ trợ đa kế thừa
Thiết kế Class
Dương Anh Đức 96
97. Ví dụ: Generalization Constraints
Không hỗ trợ
Asset
đa kế thừa
{disjoint}
Bank Real
Estate Security
Account
{disjoint,complete}
{disjoint}
Saving Checking Stock Bond
Kết thúc cây kế thừa
Thiết kế Class
Dương Anh Đức 97
98. Ví dụ: Generalization Constraints (tt.)
Hoã trôï
ña keá thöøa
Vehicle
{overlapping}
Land Water
Vehicle Vehicle
Amphibious
Vehicle
Thiết kế Class
Dương Anh Đức 98
99. Chọn Generalization hay Aggregation
w 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”
Window Scrollbar
Có đúng không?
WindowWithScrollbar
Thiết kế Class
Dương Anh Đức 99
100. Chọn Generalization hay Aggregation
Window Scrollbar
WindowWithScrollbar
Window
Một WindowWithScrollbar “là một” Window
Một WindowWithScrollbar “chứa một” Scrollbar
WindowWithScrollbar Scrollbar
1 1
Thiết kế Class
Dương Anh Đức 100
101. Sử dụng quan hệ tổng quát hóa
w Chia sẻ các thuộc tính và hành vi chung
w Chia sẻ cài đặt
w Cài đặt cơ chế Polymorphism
w Cài đặt cơ chế Metamorphosis
Thiết kế Class
Dương Anh Đức 101
102. Sử dụng quan hệ tổng quát hóa
w Chia sẻ các thuộc tính và hành vi chung
w Chia sẻ cài đặt
w Cài đặt cơ chế Polymorphism
w Cài đặt cơ chế Metamorphosis
Thiết kế Class
Dương Anh Đức 102
103. Chia sẻ các thuộc tính và hành vi chung
w Tuân thủ qui tắc lập trình “Là một dạng của”
w Khả năng thay thể Class
List
insertTop (Item)
Animal
insertBottom (Item)
removeTop ()
talk () removeBottom ()
insert (Item,
position)
Lion Tiger
talk () talk ()
Stack
Các class trên có tuân thủ IS-A style of programming?
Thiết kế Class
Dương Anh Đức 103
104. Chia sẻ các thuộc tính và hành vi chung (tt)
List
Animal
insertTop (Item)
insertBottom (Item)
talk () removeTop ()
removeBottom ()
insert (Item,
position)
Lion Tiger
talk () talk ()
Stack
Thiết kế Class
Dương Anh Đức 104
105. Sử dụng quan hệ tổng quát hóa
w Chia sẻ các thuộc tính và hành vi chung
w Chia sẻ cài đặt
w Cài đặt cơ chế Polymorphism
w Cài đặt cơ chế Metamorphosis
Thiết kế Class
Dương Anh Đức 105
106. Chia sẻ cài đặt: Factoring (phân chia)
w Hỗ trợ khả năng dùng lại khi cài đặt class khác
w Không thể dùng nếu class bạn muốn “dùng lại” không thể thay
đổi
List
SequentialContainer
insertTop (Item)
insertBottom (Item) insertTop (Item)
removeTop () removeTop ()
removeBottom ()
insert (Item, position)
List
Stack
insertBottom (Item)
removeBottom ()
insert (Item, position)
Stack
Thiết kế Class
Dương Anh Đức 106
107. Chia sẻ cài đặt: Delegation (đại diện)
w Hổ trợ khả năng dùng lại khi cài đặt class khác
w Không thể dùng nếu class bạn muốn “dùng lại” không thể thay
đổi
List
insertTop (Item)
insertBottom (Item) List
removeTop ()
removeBottom () Stack insertBottom
insert (Item, position) (Item)
push (Item) removeBottom ()
pop (): Item 1 1 insert (Item, position)
remove (position)
Stack
Thiết kế Class
Dương Anh Đức 107
108. Quan hệ kế thừa dạng <<implementation>>
w 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
w 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
List
push() and pop() có thể truy cập đến các
method của List nhưng các thể hiện của insertBottom (Item)
removeBottom ()
Stack thì không insert (Item,
position)
remove (position)
insertTop (Item)
<<implementation>>
Stack
push (Item)
pop ()
Thiết kế Class
Dương Anh Đức 108
109. Sử dụng quan hệ tổng quát hóa
w Chia sẻ các thuộc tính và hành vi chung
w Chia sẻ cài đặt
w Cài đặt cơ chế Polymorphism
w Cài đặt cơ chế Metamorphosis
Thiết kế Class
Dương Anh Đức 109
110. Nhắc lại: Polymorphism là gì ?
w Khả năng che dấu nhiều cài đặt bên dưới một interface duy
nhất
Manufacturer B
Manufacturer A Manufacturer C
OO Principle:
Encapsulation
Thiết kế Class
Dương Anh Đức 110
111. Cài đặt Polymorphism
Animal
talk ()
Lion Tiger
talk () talk ()
Không có Polymorphism Có Polymorphism
if animal = “Lion” then
do the Lion talk do the Animal talk
else if animal = “Tiger” then
do the Tiger talk
end
Thiết kế Class
Dương Anh Đức 111
112. So sánh Interface và Generalization
w 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
w 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
w 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
w Generalization cung cấp một cách cài đặt polymorphism
Thiết kế Class
Dương Anh Đức 112
113. Dùng quan hệ tổng quát hóa để cài Polymorphism
w 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
w 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
w 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
Thiết kế Class
Dương Anh Đức 113
114. Sử dụng quan hệ tổng quát hóa
w Chia sẻ các thuộc tính và hành vi chung
w Chia sẻ cài đặt
w Cài đặt cơ chế Polymorphism
w Cài đặt cơ chế Metamorphosis
Thiết kế Class
Dương Anh Đức 114
115. Metamorphosis là gì?
w 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
Metamorphosis tồn tại trong thể giới thực
Làm sao mô hình hóa chúng?
Thiết kế Class
Dương Anh Đức 115
116. Ví dụ: Metamorphosis
w 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
ParttimeStudent FulltimeStudent
name name
address address
studentID studentID
maxNumCourses gradDate
Thiết kế Class
Dương Anh Đức 116
117. Một hướng tiếp cận Modeling Metamorphosis
w Có thể tạo một quan hệ tổng quát hóa
Student
name Chuyện gì xảy ra nếu
address
studentID một part-time student
trở thành full-time
student?
ParttimeStudent FulltimeStudent
maxNumCourses gradDate
Thiết kế Class
Dương Anh Đức 117
118. Một hướng tiếp cận khác
w 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”
Student
Student 1 1
name Classification
name address
address studentID
studentID
ParttimeStudent FulltimeStudent FulltimeClassification ParttimeClassification
maxNumCourses gradDate gradDate maxNumCourses
Thiết kế Class
Dương Anh Đức 118
119. Một hướng tiếp cận khác (tt)
w Metamorphosis được hoàn tất bởi object “nói chuyện với” phần
“thay đổi”
: Student : Student : Parttime : Fulltime
Manager Classification Classification
change to full time
delete
create
Thiết kế Class
Dương Anh Đức 119
120. Metamorphosis và tính mềm dẻo
w Kỹ thuật này thêm tính mềm dẻo cho mô hình
ResidentInformation Student
dorm name 1 1 Classification
room
roomKeyID 0..1 1 address
studentID
FulltimeClassification ParttimeClassification
gradDate maxNumCourses
Thiết kế Class
Dương Anh Đức 120
121. Bài tập: Định nghĩa Generalizations
w Hãy cho biết:
§ Tất cả các design class
w 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
w 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)
Thiết kế Class
Dương Anh Đức 121
122. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 122
123. Giải quyết đụng độ giữa các Use-Case
w Nhiều use case có thể truy cập riêng rẽ đến các design object
w 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
w Lời giải phụ thuộc nhiều vào môi trường cài đặt
Thiết kế Class
Dương Anh Đức 123
124. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 124
125. Xử lý các yêu cầu phi chức năng nói chung
Analysis Class Analysis Mechanism(s)
Student Persistency, Security
Schedule Persistency, Security
CourseOffering Persistency, Legacy Interface
Course Persistency, Legacy Interface
RegistrationController Distribution
Analysis Design Implementation
Mechanism Mechanism Mechanism
(Conceptual) (Concrete) (Actual)
Legacy
Data Some Design Class
Persistency JDBC
RDBMS
New
Persistency Data ObjectStore Design
OODBMS Guidelines
Distribution Remote Method Java 1.2 from Sun
Invocation (RMI)
Analysis Design Implementation
Thiết kế Class
Dương Anh Đức 125
126. Các bước thiết kế Class
w Tạo các Design Class ban đầu
w Xác định các Persistent Class
w Định nghĩa các Operation
w Định nghĩa Class Visibility
w Định nghĩa các Method
w Định nghĩa các trạng thái
w Định nghĩa các thuộc tính
w Định nghĩa các phụ thuộc
w Định nghĩa các mỗi kết hợp
w Định nghĩa các quan hệ tổng quát hóa
w Giải quyết đụng độ giữa các Use-Case
w Xử lý các yêu cầu phi chức năng nói chung
w Checkpoints
Thiết kế Class
Dương Anh Đức 126
127. Checkpoints: Các Class
w Tên của mỗi class có phản ánh rõ vai trò của nó không?
w Class có biểu diễn một single well-defined abstraction?
w Tất cả các attribute và trách nhiệm có gắn kết với nhau?
w 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?
w Mọi yêu cầu trên class đã xử lý?
w 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ó?
w Đã mô tả trọn vẹn chu kỳ sống của các thể hiện của class ?
w Class thực hiện mọi hành vi cần thiết?
Thiết kế Class
Dương Anh Đức 127
128. Checkpoints: Operations
w Các operation có dễ hiểu?
w 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?
w Class có thực hiện đúng hành vi yêu cầu nó?
w Bạn đã các định các tham số đúng chưa ?
w Bạn đã gán đầy đủ operations cho các message của mỗi
object?
w Các đặc tả cài đặt (nếu có) của operation có chính xác ?
w Các operation signature có phù hợp với ngôn ngữ lập trình cài
đặt hệ thống?
w Tất cả các operation đề cần cho use-case realization?
Thiết kế Class
Dương Anh Đức 128