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
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
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
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
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
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
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
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 …
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
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
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
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
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
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
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
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
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
Thiết kế ClassDương Anh Đức 17
Nhắc lại: Operation là gì ?
CourseOffering
addStudent deleteStudentgetStartTimegetEndTime
Class
Operation
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, …
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ố
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”
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
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
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
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
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
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
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
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..*
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ể
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
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ệ
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
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
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
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ệ
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
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?
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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ì
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: ‘#’
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
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
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ể
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
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ệ
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
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
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
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
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
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)
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
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
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
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
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)
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ể”
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
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
Thiết kế ClassDương Anh Đức 75
Ví dụ: Composition
Student Schedule1 0..*
RegisterForCoursesForm 1 1 RegistrationController
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
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
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
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
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
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
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
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, …
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
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
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
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
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ố
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ệ
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
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
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
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)
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
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ể
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
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
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
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”
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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”
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”
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
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)
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
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
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
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
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
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?
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?
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?
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?
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?