Professional Documents
Culture Documents
Bai 12 - Bieu Do Lop
Bai 12 - Bieu Do Lop
Bai 12 - Bieu Do Lop
Bài 12. Phân tích thiết kế 1. Phân tích thiết kế hướng đối tượng
hướng đối tượng và biểu 2. Biểu đồ lớp
đồ lớp 3. Quan hệ giữa các lớp
4. Ví dụ và bài tập
1 2
1 2
3 4
3 4
1
Tầm quan trọng của OOAD (2) Mục đích của OOAD
v Cần thiết lập một cơ chế hiệu quả để nắm bắt yêu v Chuyển các yêu cầu của bài toán thành một bản
cầu, phân Fch thiết kế thiết kế của hệ thống sẽ được xây dựng
v Cơ chế này phải như là một “ngôn ngữ thống v Tập trung vào quá trình phân Fch các YÊU CẦU của
nhất” giúp cho quá trình hợp tác hiệu quả giữa hệ thống và thiết kế các MÔ HÌNH cho hệ thống
các thành viên trong nhóm phát triển phần mềm. đó trước giai đoạn lập trình
v à OOAD: Object Oriented Analysis and Design) v Được thực hiện nhằm đảm bảo mục đích và yêu
cầu của hệ thống được ghi lại một cách hợp lý
trước khi hệ thống được xây dựng
v Cung cấp cho người dùng, khách hàng, kỹ sư phân
Fch, thiết kế nhiều cái nhìn khác nhau về cùng
một hệ thống
5 6
5 6
7 8
7 8
2
OOA OOA (2)
v Xác định yêu cầu phần mềm v Ví dụ với 1 phòng bán ô tô:
§ Các thực thể:
v Đặc tả yêu cầu phần mềm thông qua mô hình các
• Khách hàng
đối tượng và tương tác giữa chúng • Người bán hàng
v Tạo được mô hình có các thành phần là đối tượng • Phiếu đặt hàng
Phiếu (hoá đơn) thanh toán
và khái niệm đời thực, dễ hiểu với người dùng •
• Xe ô tô
v Mô hình hóa các thực thể, giữ nguyên cấu trúc, § Tương tác và quan hệ giữa các thực thể trên :
quan hệ, hành vi giữa chúng • Người bán hàng dẫn khách hàng tham quan phòng trưng bày xe.
• Khách hàng chọn một chiếc xe
• Khách hàng viết phiếu đặt xe
• Khách hàng trả Kền xe
• Xe ô tô được giao đến cho khách hàng
9 10
9 10
OOD OOD
v Thực thi các mô hình khái niệm là đầu ra của bước v Tổ chức chương trình thành các tập hợp đối
OOA tượng cộng tác
v Các khái niệm trong OOA được ánh xạ theo thành § Mỗi đối tượng là thực thể của một lớp
các lớp thực thi. Các ràng buộc, các giao diện v Thiết kế trên kết quả của OOA
được thiết kế. Kết quả là đặc tả chi zết về hệ § Cải thiện, tối ưu hóa thêm
thống cần xây dựng, theo một công nghệ cụ thể § Thiết kế các
được lựa chọn • Phương thức (operaKons)
• Thuộc Qnh (aRributes)
• Mối quan hệ giữa các lớp (classes)
§ Đưa ra các biểu đồ jnh và động
• Tĩnh: biểu thị các lớp và đối tượng
• Động: biểu thị tương tác giữa các lớp & phương thức hoạt động
11 12
11 12
3
Thiết kế biểu đồ lớp CRC Card
v Mục zêu: cần xác định các thành viên của mỗi
lớp và quan hệ giữa các lớp
v Một trong các kỹ thuật được ứng dụng nhiều
nhất là Thẻ Class-Responsibility-
Collaboration (CRC) card.
v Mỗi thẻ thể hiện một lớp, trên thẻ chúng ta
lưu lại các thông tin sau về các lớp:
§ 1. Tên của lớp. Thông thường người ta đặt tên lớp liên
quan đến vai trò của lớp, chúng ta sẽ sử dụng lớp để
làm gì.
§ 2. Trách nhiệm của lớp: lớp có thể làm gì. Thông
thường các thông tin ở đây bao gồm tên của các hàm
thành phần
§ 3. Tương tác của lớp: lớp này có thể tương tác được
với những lớp nào khác
13 14
13 14
15 16
15 16
4
Lưu ý (1/2) Lưu ý (2/2)
v Một số điểm lưu ý khi phát triển các lớp v Một số điểm lưu ý khi phát triển các lớp
§ 1. Cần tạo ra lớp trước, sau đó mới nghĩ tới việc phát § 4. Khi lập trình cần tuân thủ theo các thiết kế đã làm.
triển và hoàn thiện lớp trong quá trình giải quyết bài Không nên băn khoăn khi không sử dụng phương pháp
toán lập trình truyền thống và thấy choáng ngợp trước số
§ 2. Khi phân tích hay phát triển các lớp không nên tập lượng lớn các đối tượng.
trung xác định tất cả thành viên một lớp, chúng ta sẽ biết § 5. Luôn giữ nguyên tắc: mọi vấn đề cần giải quyết theo
rõ hơn khi phát triển hệ thống (learns as you go) phương án đơn giản nhất, không phức tạp hóa. Sử
§ 3. Việc phát hiện ra các lớp cần thiết cho chương trình dụng nguyên lý của Occam Razor: Lớp đơn giản nhất
là một trong những nhiệm vụ chính của thiết kế hệ bao giờ cũng là lớp tốt nhất, hãy bắt đầu bằng những
thống, nếu chúng ta đã có những lớp này (trong một cái đơn giản và chúng ta sẽ kết thúc bằng những hệ
thư viện lớp nào đó chẳng hạn) thì công việc sẽ dễ thống phức tạp
dàng hơn
17 18
17 18
19 20
19 20
5
Biểu diễn thuộc tính Mô tả phương thức
v Chỉ ra tên, kiểu và giá trị mặc định nếu có v Tên phương thức:
§ attributeName : Type = Default § Mô tả kết quả
v Tuân theo quy ước đặt tên của ngôn ngữ cài đặt § Sử dụng góc nhìn của đối tượng khách (client – đối tượng
gọi)
và của dự án. § Nhất quán giữa các lớp
v Kiểu (type) nên là kiểu dữ liệu cơ bản trong ngôn v Chữ ký của phương thức:
ngữ thực thi
opera&onName([direc&on] parameter:class,...):returnType
§ Kiểu dữ liệu có sẵn, kiểu dữ liệu người dùng định nghĩa,
hoặc lớp tự định nghĩa.
§ Direc&on: in (mặc định), out hoặc inout
21 22
21 22
v Phạm vi truy cập được sử dụng để thực hiện khả năng v Các ký hiệu sau được sử dụng:
đóng gói § + Public access
§ # Protected access
§ - Private access
private
Class1
- privateAttribute
+ publicAttribute
# protectedAttribute
- privateOperation ()
+ publicOPeration ()
public protected # protecteOperation ()
23 24
23 24
6
Phạm vi (Scope) Ví dụ: Scope
v Xác định số lượng thể hiện của thuộc Fnh/thao
tác:
Student
§ Instance: Một thể hiện cho mỗi thể hiện của mỗi lớp
§ Classifier: Một thể hiện cho tất cả các thể hiện của lớp - name
- address
v Phạm vi Classifier được ký hiệu bằng cách gạch - studentID
+ classifierScopeOp ()
+ instanceScopeOp ()
25 26
25 26
§ Chỉ ra cấu trúc tĩnh của mô hình như lớp, cấu trúc + open()
- semester
+ is registration open?()
bên trong của chúng và mối quan hệ với các lớp + close registration() + commit() + close registration()
+ select alternate()
khác. + remove offering()
Professor
§ Chỉ ra tất cả hoặc một phần cấu trúc lớp của một + level()
+ cancel() - name
hệ thống. Student + get cost() - employeeID : UniqueId
+ delete() - hireDate
§ Không đưa ra các thông tin tạm thời. + submit() - status
+ get tuition()
+ save() - discipline
v Khung nhìn tĩnh của một hệ thống chủ yếu hỗ + add schedule()
+ get schedule()
+ any conflicts?() - maxLoad
+ create with offerings()
trợ các yêu cầu chức năng của hệ thống. + delete schedule()
+ has pre-requisites()
+ update with new selections() + submitFinalGrade()
+ acceptCourseOffering()
+ setMaxLoad()
+ takeSabbatical()
+ teachClass()
27 28
27 28
7
Khi nào sử dụng biểu đồ lớp? Ví dụ Biểu đồ lớp
v Từ vựng của hệ thống (Vocabulary) v Có cách nào tốt hơn để tổ chức biểu đồ lớp?
§ Khi trừu tượng hóa một phần hoặc bên ngoài
hoặc biên của hệ thống.
§ Chỉ ra kết quả trừu tượng hóa và trách nhiệm của LoginForm RegistrationController
chúng RegisterForCoursesForm
cùng nhau để thực hiện một công việc nào đó. CloseRegistrationForm CloseRegistrationController
29 30
29 30
CloseRegistrationForm CloseRegistrationController
University
Artifacts RegisterForCoursesForm RegistrationController
31 32
31 32
8
Nội dung Class Relationships
v Associazon
1. Phân tích thiết kế hướng đối tượng
2. Biểu đồ lớp
3. Quan hệ giữa các lớp
4. Ví dụ và bài tập § AggregaRon
• ComposiKon
v Inheritance
v Dependency
33 •34
33 34
Person Car
Owns
Owned by
35 36
35 36
9
Vai trò (role) trong liên kết Bội số quan hệ (Multiplicity)
v Bội số quan hệ là số lượng thể hiện của một
lớp liên quan tới MỘT thể hiện của lớp khác.
CourseOffering Instructor Lecturer Department v Với mỗi liên kết, có hai bội số quan hệ cho hai
Department Head đầu của liên kết.
§ Với mỗi đối tượng của Professor, có nhiều Course
Offerings có thể được dạy.
Role Name § Với mỗi đối tượng của Course Offering, có thể có 1 hoặc
0 Professor giảng dạy.
SubjectInfo
instructor
Prerequisites Professor CourseOffering
0..1 0..*
37 38
37 38
39 40
39 40
10
Ý nghĩa của bội số quan hệ Các loại liên kết
Car Driver
v Association
v Giúp trả lời 2 câu hỏi § use-a
§ Liên kết là bắt buộc hay tùy chọn? § Các đối tượng của một lớp liên kết với các đối tượng của
§ Số lượng nhỏ nhất và lớn nhất các thể hiện của một lớp được liên lớp khác
Car Door
kết với một thể hiện của lớp khác v Aggregation
§ has-a/is-a-part
§ Liên kết mạnh-Strong association. Thể hiện của một lớp
<<entity>>
0..* 1
<<entity>> được tạo bởi (made up) các thể hiện của lớp khác
CourseOffering Subject
v Composition
0..*
§ Kết tập mạnh-Strong aggregation. Đối tượng bộ phận
Prerequisites 0..3 không thể được chia sẻ, và cùng bị hủy với đối tượng
tổng thể
§ Share life-time
Car Body
41 42
41 42
0..1
43 44
43 44
11
Ví dụ về kết tập Hợp thành/Cấu thành (Composition) là gì?
v Một dạng của kết tập với quyền sở hữu mạnh và
các vòng đời trùng khớp giữa hai lớp
RegisterForCoursesForm
1
RegistrationController § Whole sở hữu Part, tạo và hủy Part.
1 § Part bị bỏ đi khi Whole bị bỏ, Part không thể tồn tại
nếu Whole không tồn tại.
0..1
Whole Part
0..1
1
Whole Part
0..*
Student Schedule CourseOffering
0..* 0..4
Composition
45 46
45 46
47 48
47 48
12
Phụ thuộc - Dependency Dependencies vs. Associations
v Là quan hệ giữa 2 đối tượng của 2 lớp
v Các đối tượng cần phải “biết
nhau” để truyền thông điệp được Supplier2
cho nhau
Client Supplier
49 50
49 50
ClassA
ClassA
+ op1 ( )
+ op1 ([in] aParam : ClassB)
ClassB
ClassB
51 52
51 52
13
Lớp trừu tượng và lớp cụ thể
Tổng quát hóa (Generalization) (Abstract and Concrete Class)
v Mối quan hệ giữa các lớp trong đó một lớp v Lớp trừu tượng không thể có đối tượng
chia sẻ cấu trúc và/hoặc hành vi với một hoặc § Chứa phương thức trừu tượng
§ Chữ nghiêng
nhiều lớp khác
v Lớp cụ thể có thể có đối tượng
v Xác định sự phân cấp về mức độ trừu tượng
hóa trong đó lớp con kế thừa từ một hoặc Discriminator Animal Abstract class
nhiều lớp cha
+ communicate () Abstract operation
§ Đơn kế thừa (Single inheritance)
§ Đa kế thừa (MulRple inheritance) Communication There are no direct instances of Animal
+ communicate () + communicate ()
53 54
53 54
+ withdraw()
+ createStatement() Generalization
Relationship Airplane Helicopter Bird Wolf Horse
Subclasses
(children) Savings Checking
Sử dụng đa kế thừa chỉ khi cần thiết và luôn luôn phải
cẩn thận!
Descendents
55 56
55 56
14
Đa hình (Polymorphism) là gì? Tổng quát hóa: Thực thi đa hình
v Khả năng che giấu các thực thi khác nhau dưới Animal
một giao diện duy nhất. + communicate ()
Lion Tiger
+ communicate () + communicate ()
Manufacturer B
Manufacturer A Manufacturer C
Without Polymorphism With Polymorphism
OO Principle: if animal = “Lion” then Animal communicate
Lion communicate
Encapsulation else if animal = “Tiger” then
Tiger communicate
end
Remote Control
57 58
57 58
Nội dung Ví dụ
59 60
https://www.uml-diagrams.org/software-licensing-domain-diagram-example.html
59 60
15
Bài tập 1 Bài tập 2
■ Chương trình quản lý Thông &n trong một nhà ga được mô tả như
sau:
■ Xây dựng phần mềm quản lý đăng ký dạy và học ở trường đại học như sau: ■ Hoạt động chuyên chở trong nhà ga gồm nhiều đoàn tàu. Mỗi đoàn
tàu có một số hiệu riêng, thông Rn về ga đích đến của đoàn tàu và lịch
■ Các sinh viên và giảng viên được lưu trữ thông Rn vào trong phần mềm này với trình chạy của đoàn tàu (giờ khởi hành và giờ dự kiến đến ga đích).
các nội dung về tên, tuổi, định danh cá nhân, mã số sinh viên hoặc mã cán bộ.
Giảng viên còn có thông Rn về cấp bậc (level với dạng số nguyên từ 1 trở đi); ■ Một đoàn tàu gồm nhiều toa tàu.Mỗi toa thuộc một trong hai loại toa
và mã số thuế (tax). chở khách hoặc toa chở hàng. Mỗi toa tàu có một số hiệu duy nhất và
trọng lượng không tải Jnh bằng tấn (khi không chở khách hay hàng
■ Mỗi giảng viên có thể dạy nhiều lớp (Course) và có thể chủ nhiệm nhiều sinh hoá). Mỗi toa chở khách còn có thông Rn riêng về số lượng khách tối
viên. Mỗi sinh viên cũng đăng ký nhiều lớp học (Course), ứng với mỗi sinh viên đa có thể chở.
có một bảng điểm (Table) và mỗi sinh viên được chủ nhiệm bởi một giảng
viên. ■ Khi tàu vào ga toa chở khách có thêm các hoạt động: thêm khách lên
toa, bớt khách xuống toa.
■ Bảng điểm của một sinh viên lưu trữ thông Rn điểm của từng lớp học của sinh ■ Thông Rn về hành khách đi tàu gồm có họ tên, số chứng minh nhân
viên đăng ký. dân, đoàn tàu và toa tàu mà họ mua vé. ga lên tàu và điểm xuống.
■ Hãy xây dựng biểu đồ lớp
■ Hãy xây dựng biểu đồ lớp
61 62
61 62
Bài tập 3
■ Một phần mềm Quản lý xe buýt tại bến xe được mô tả như sau:
■ Một xe buýt (Bus) chạy được tối đa 30 chuyến/ngày (Trip). Mỗi chuyến chứa tối đa
80 hành khách (Person). Hành khách được chia làm hai loại: hành khách mua vé
theo từng lượt đi (Customer) và hành khách mua vé tháng (Passenger).
■ Tất cả các hành khách đều được định danh bằng tên (name) và số chứng minh thư
(ciEzenCard). Khách mua vé tháng có thêm thông Tn mã vé ID.
■ Các xe buýt có thông số về số lượng ghế ngồi (numberOfSeats) khác nhau. Trong
lớp Bus, người ta xây dựng phương thức public isEnableToLeaveStaEon(Trip t), trả
về true nếu số hành khách trên chuyến xe buýt t bé hơn hoặc bằng 80% số ghế
ngồi. Lớp Bus là lớp toàn thể, lớp Trip kết tập trong nó với tên vai trò là trips.
■ Các xe buýt có thông số để định danh, đây là một con số. Trong lớp Trip, người ta
xây dựng phương thức public availableSeats( ) trả về số lượng các ghế trống có
trên chuyến xe.
■ Người ta cài đặt trong lớp Trip phương thức mang tên numberOf Passenger( ), trả
về số lượng các khách sử dụng vé tháng có trên chuyến xe.
■ Hãy xây dựng biểu đồ lớp
63
63
16