Giáo trình Phân tích hướng đối tượng (Phần 2)

Như đã trình bày trong các chương trước, đối tượng là cái gì đó tồn tại trong thế giới thực. Nó

có thể là một phần của hệ thống như máy móc, tổ chức Nhưng cũng có đối tượng không tồn tại

trực tiếp, mà được phát sinh từ khảo sát cấu trúc hay hành vi của đối tượng trong thế giới thực.

Do vậy, các đối tượng này cũng như đối tượng trong thế giới thực đều liên quan đến hiểu biết của

chúng ta về thế giới thực. Lớp là mô tả thuộc tính, hành vi và ngữ nghĩa của một kiểu (một tập)

đối tượng. Đối tượng là hiện thực của lớp. Quan hệ của đối tượng với lớp tương tự như quan hệ

của biến với kiểu biến trong ngôn ngữ lập trình thông thường. Chúng ta sử dụng khái niệm lớp để

phân tích các đối tượng nhận ra trong thế giới thực. Nhà bác học Darwin đã sử dụng khái niệm

lớp để mô tả nòi giống loài người. Ông ta đã tổ hợp các lớp thông qua kế thừa để mô tả thuyết

tiến hóa của mình. Tương tự, kỹ thuật kế thừa giữa các lớp cũng được sử dụng trong thiết kế hệ

thống phần mềm theo phương pháp hướng đôi tượng. Không có lý do gì để xây dựng lớp trước

khi tìm ra đối tượng. Biết rằng mỗi đối tượng là hiện thực lớp, nhưng lớp phải được đặc tả đầy

đủ, rõ ràng sau khi đặc tả đối tượng. Thế giới quanh ta bao gồm các đối tượng chứ không phải

lớp, do vập tìm đối tượng trước khi trừu tượng lớp từ chúng. Tóm lại, lớp là cái gì đó cung cấp kế

hoạch chi tiết cho đối tượng. Nói cách khác lớp xác định thông tin nào đối tượng sẽ lưu giữ và

hành vi nào đối tượng có thể có. Thí dụ lớp tài khoản của ông A là Account, lớp của ngôi nhà tại

số 1 Tràng Tiền là House Lớp House cho biết ngôi nhà co độ cao, chiều rộng, tổng số buồng ở.

Lớp là khái niệm tổng quát, jo1 cho ta mẫu về đối tượng.

pdf 143 trang kimcuc 3420
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Phân tích hướng đối tượng (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Phân tích hướng đối tượng (Phần 2)

Giáo trình Phân tích hướng đối tượng (Phần 2)
 Phát triển phần mềm bằng UML trang | 92 
CHƯƠNG 5 
BIỂU ĐỒ LỚP VÀ GÓI 
Sau khi đã phân tích lĩnh vực vấn đề, ta sẽ tìm hiểu sâu hơn về các đối tượng trong đó để xây 
dựng mô hình đối tượng. Chương bốn đã đề cập đến một trong các kỹ thuật thiết kế hệ thống là 
xây dựng biểu đồ cộng tác. Chương này sẽ khảo sát một kỹ thuật thiết kế khác, đó là biểu đồ lớp. 
Phần cuối của chương là một số vấn đề liên quan đến ánh xạ đối tượng vào CSDL. 
5.1 LỚP VÀ TIỀM KIẾM LỚP 
Như đã trình bày trong các chương trước, đối tượng là cái gì đó tồn tại trong thế giới thực. Nó 
có thể là một phần của hệ thống như máy móc, tổ chức Nhưng cũng có đối tượng không tồn tại 
trực tiếp, mà được phát sinh từ khảo sát cấu trúc hay hành vi của đối tượng trong thế giới thực. 
Do vậy, các đối tượng này cũng như đối tượng trong thế giới thực đều liên quan đến hiểu biết của 
chúng ta về thế giới thực. Lớp là mô tả thuộc tính, hành vi và ngữ nghĩa của một kiểu (một tập) 
đối tượng. Đối tượng là hiện thực của lớp. Quan hệ của đối tượng với lớp tương tự như quan hệ 
của biến với kiểu biến trong ngôn ngữ lập trình thông thường. Chúng ta sử dụng khái niệm lớp để 
phân tích các đối tượng nhận ra trong thế giới thực. Nhà bác học Darwin đã sử dụng khái niệm 
lớp để mô tả nòi giống loài người. Ông ta đã tổ hợp các lớp thông qua kế thừa để mô tả thuyết 
tiến hóa của mình. Tương tự, kỹ thuật kế thừa giữa các lớp cũng được sử dụng trong thiết kế hệ 
thống phần mềm theo phương pháp hướng đôi tượng. Không có lý do gì để xây dựng lớp trước 
khi tìm ra đối tượng. Biết rằng mỗi đối tượng là hiện thực lớp, nhưng lớp phải được đặc tả đầy 
đủ, rõ ràng sau khi đặc tả đối tượng. Thế giới quanh ta bao gồm các đối tượng chứ không phải 
lớp, do vập tìm đối tượng trước khi trừu tượng lớp từ chúng. Tóm lại, lớp là cái gì đó cung cấp kế 
hoạch chi tiết cho đối tượng. Nói cách khác lớp xác định thông tin nào đối tượng sẽ lưu giữ và 
hành vi nào đối tượng có thể có. Thí dụ lớp tài khoản của ông A là Account, lớp của ngôi nhà tại 
số 1 Tràng Tiền là House Lớp House cho biết ngôi nhà co độ cao, chiều rộng, tổng số buồng ở. 
Lớp là khái niệm tổng quát, jo1 cho ta mẫu về đối tượng. 
 Ký pháp của lớp trong UML được biểu diễn bởi hình chữ nhật có ba phần dành cho tên 
lớp, các thuộc tính và các thao tác (hình 5.1). Tên lớp thường là danh từ bắt đầu bằng chữ hoa. 
Thuộc tính có tên của nó, kiểu đặc tả, giá trị khởi đầu, kiểu giá trị và ràng buộc. Thao tác cũng có 
tên, danh sách kiểu giá trị của tham số (có thể có giá trị khởi đầu) và ràng buộc. Phía trên tên lớp 
của hình 5.1a là tên stereotype của lớp trong dấu >. Dưới tên lớp trong dấu ngoặc nhọn là mở 
rộng ngữ nghĩa của phần tử mô hình (tagged values) [OEST00], thí dụ chúng có thể là xâu ký tự 
{abtract}. Tên lớp có thể có tiền tố, thí dụ tiền tố là tên gói trước hai dấu chấm. HÌnh 5.1b là ví 
dụ ký pháp của lớp hình tròn Circle. Chúng có thuộc tính bán kính (radius), vị trí (position) và 
các thao tác như display(), remove(), setPosition(pos) và setRadius(newRadius). Trong thí dụ này 
không có ký pháp gói còn ràng buộc {radius>0} cho biết thuộc tính đòi hỏi giá trị radius luôn 
lớn hơn 0. Giá trị khởi đầu (10,10) của thuộc tính center có nghĩa rằng khi đối tượng của lớp 
Circle được tạo lập thì thuộc tính này được gán bởi giá trị (10,10). 
 Phát triển phần mềm bằng UML trang | 93 
Hình 5.1 Ký pháp đồ họa của lớp 
Vấn đề khó khăn nhất của thiết kế theo quan điểm hướng đối tượng là tìm ra đầy đủ các lớp 
cho hệ thống. Mặc dù vậy, đôi khi cũng dễ dàng tìm ra một số lớp. Nhiều tài liệu có lời khuyên là 
nơi tốt nhất để bắt đầu tìm lớp là luồng sự kiện của UC. Tìn ra danh từ trong luồn sự kiện sẽ cho 
ta biết về lớp. Động từ trong đó là phương pháp. Hãy chú ý rằng mọi danh từ tìm ra không nhất 
thiế là lớp mà nó có thể là một trong bốn loại sau: tác nhân, lớp, thuộc tính lớp và biểu thức 
không phải các loại trên. 
 Lớp còn có thể tìm thấy trong biểu đồ tương tác. Tìm những cái chung của đối tượng để 
hình thành lớp. Thí dụ có thể tạo lập biểu đồ trình tự chỉ sự tiến trình chi trả cho khách hàng trong 
ứng dụng ATM. Biểu đồ này có hai đối tượng Khách hàng A và Khách hang B rút tiền. Cả Khách 
hàng A và Khách hang B đều có chung một vài thuộc tính, đó là tên khách hàng, địa chỉ, số diện 
thoại. Hơn nữa, cả hai đều có một số thao tác tương tự nhau. Vậy lớp mới có thể được hình thành 
(thí dụ lớp Employee) cho đối tượng Khách hàng A và Khách hang B. Mỗi đối tượng trong biểu 
đồ tương tác sẽ được ánh xạ vào lớp tương ứng. 
Tuy nhiên một số lớp không thể tìm thấy trong luồng sự kiện và biểu đồ tương tác. Trong pha 
phân tích yêu cầu thường nhận thấy nhu cầu quan sát dữ liệu trong các báo các khác nhau. Mỗi 
loại báo cáo này được biểu diễn như một lớp. Nếu có quá nhiều loại báo cáo thì thông thường 
những báo cáo tương tự được tập hợp để biểu diễn bởi một lớp, đồng thời sử dụng các biến thành 
phần để quản lý các biến thể khác nhau của báo cáo. Nhóm lớp khác được hình thành để biểu 
diễn giao diện giữa các thành phần khác nhau của hệ thống, đặc biệt để biểu diễn giao diện giữa 
lớp ta tạo ra với hệ thống khác mà nó tương tác. Giao diện là nơi một đối tượng tương tác với một 
số đối tượng khác (thí dụ trình điều khiển máy in hay lớp nào đó của thư viện). Các lớp giao diện 
hình thành tầng ảo, nó bảo vệ thiết kế của ta trước sự thay đổi của cả hai phía giao diện. Một tập 
lớp khác được hình thành để biểu diễn thiết bị phần cứng khác nhau mà hệ thống phần mềm sẽ 
tương tác. Thí dụ, hệ thống rút tiền tự động của ATM tương tác với máy đọc thẻ từ và mày in, 
mỗi thiết bị phần cứng này đươc biểu diễn bởi một lớp. Việc biểu diễn thiết bị và giao diện như 
các lớp cho khả năng bao gói các yêu cầu riêng của chúng. Nếu phải thay thế thiết bị sau này, ta 
không thể viết lại toàn bộ mã trình đã có. 
Tốt nhất việc tìm kiếm lớp phải được cùng thưc hiện với chuyên gia lĩnh vực vấn đề. Sau đây 
là một sô câu hỏi giúp ta tìm ra lớp [ERIK98]: 
· Có thông in nào cần lưu trữ hay phân tích? Nếu có nó là ứng viên của lớp. 
· Có hệ thống ngoài không? Nếu có thì nó được xem như những lớp chứa trong hệ thống của 
ta hay hệ thống của ta tương tác với chúng. 
· Có mẫu, thư viện lớp, thành phần? Nếu có, thông thường chúng chứa các ứng viên lớp. 
Package::Class {Propertive Value}
attribute : Type = initialValue{Constrain}
operation(Parameter) : {Constrain}
>
Circle
radius{radius>0}
center:Point=(10,10)
display()
remove()
setPosition(pos : Poin)
setRadius(newRadius)
a) b)
 Phát triển phần mềm bằng UML trang | 94 
· Hệ thống cần quản lý các thiết bị ngoại vi nào? Mọi thiết bị kỹ thuật nối với hệ thống đều là 
ứng viên lớp. 
· Tác nhân đóng vai trò tác nghiệp nào? Các nhiệm vụ này có thể là lớp; Thí dụ người sử 
dụng, thao tác viên hệ thống, khách hàng 
5.2 BIỂU ĐỒ LỚP 
Biểu đồ lớp và biểu đồ đối tượng thuộc hai góc nhìn mô hình bổ sung cho nhau. Biểu đồ lớp 
chỉ ra trừu trượng thế giới thực, tập trung vào giải thích cấu trúc tĩnh từ góc nhìn tổng quát. Biểu 
đồ đối tượng biểu diễn trường hợp đặc biệt, cụ thể vào một thời điểm, nó thể hiện cấu trúc tĩnh và 
hành vi. Thông thường ta xây dựng đồng thời biểu đồ lớp và biểu đồ đối tượng. 
Khung nhìn logic có thể chứa các thành phần đồ họa sau: biểu đồ tương tác, các lớp, biểu đồ 
lớp, biểu đồ UC, thuộc tính, thao tác, kết hợp (association) và biểu đồ chuyển trạng thái. Trong 
biểu đồ lớp được sử dụng để hiển thị lớp và gói của chúng trong hệ thống. Biểu đồ lớp cho hình 
ảnh tĩnh của các bộ phận hệ thống và các quan hệ giữ chúng. 
Thông thường mỗi hệ thống có vài biểu đồ lớp. Một số biểu đồ lớp trong số đó hiển thị lớp 
và quan hệ giữa các lớp, một vài biểu đồ lớp khác chỉ hiển thị gói lớp và quan hệ giữa các gói. 
Có thể tạo rất nhiều biểu đồ lớp để mô tả toàn bộ bức tranh hệ thống. Các biểu đồ lớp giúp người 
phát triển phần mềm quan sát và lập kế hoạch cấu trức hệ thống trước khi viết mã trình. Nó đảm 
bảo rằng hệ thống được thiết kế tốt ngay từ ban đầu. 
5.2.1 - Các loại lớp trong biểu đồ 
Biểu đồ lớp có thể chứa nhiều loại lớp khác nhau, chúng có thể là lớp thông thường, lớp tham 
số, lớp hiện thực, lớp tiện ích, lớp tiện ích tham số, lớp tiện ích hiện thực và metaclass 
Lớp tham số (parameterized class). Lớp tham số là lớp được sử dụng để tạo ra họ các lớp 
khác. Nó còn có tên là lớp mẫu (template). Ngôn ngữ C++ hổ trợ đầy đủ lớp này, nhưng Java lại 
không hoàn toàn như vậy. Thí dụ từ lớp tham số List có thể tạo ra các lớp hiện thực Employeelist, 
AccountList Trong UML, lớp tham số được biểu diễn như trên hình 5.2. 
Lớp hiện thực (instantiated class). Lớp hiện thực là lớp tham số mà đối số của nó có giá trị. 
Thí dụ, lớp tham số trên đây chứa danh sách phần tử. Bây giờ ta có thể cung cấp giá trị cho đối số 
của phần tử, kết quả là ta có danh sách các nhân viên. Trong UML, ký pháp lớp hiện thực là lớp 
có tên đối số trong ngoặc như trên hình 5.3. 
Hình 5.2 Lớp tham số Hình 5.3 Lớp hiện thực tham số 
Lớp tiện ích (class utility). Lớp tiện ích là tập hợp các thao tác. Thí dụ có tập hàm toán học 
như squareroot(), cuberoot() sẽ được sử dụng nhiều nơi trong hệ thống, chúng có thể được gói 
vào lớp tiện ích để lớp khác trong hệ thống cùng sử dụng. Trong biểu đồ lớp, lớp tiện ích được 
thể hiện bằng lớp đường viền bóng như trên hình 5.4. 
Item
List
Attribute
Operation()
Attribute
Opetation()
 Phát triển phần mềm bằng UML trang | 95 
Hình 5.4 Lớp tiện ích Hình 5.5 Lớp tiện ích tham số 
Lớp tiện ích tham số (parameterized class utility). Lớp tiện ích tham số là lớp tham số chứa 
tập các thao tác. Đó là mẫu để tạo lập ra lớp tiện ích. Lớp này được vẽ trong biểu đồ lớp bằng 
biểu tượng như trên hình 5.5. 
Hình 5.6 Lớp tiện ích hiện thực Hình 5.7 Metaclass 
Lớp tiện ích hiện thực (instantiated class utility). Lớp tiện ích hiện thực là lớp ham số mà 
đối của chúng có giá trị. Lớp này được vẽ trong biểu đồ lớp bằng biểu tượng như trên hình 5.6. 
Metaclass. Metaclass là lớp mà hiện thực của nó là lớp chức không phải là đối tượng. Lớp 
tham số và lớp tiện ích là những thí dụ của metaclass. Lớp này được vẽ trong biểu đồ lớp bằng 
biểu tượng trên hình 5.7 
5.2.2 - Stereotype của lớp 
Trong biểu đồ lớp, stereotype là cơ chế để phân nhóm lớp. Thí dụ, để nhanh chóng tìm kiếm 
biểu mẫu trong mô hình, ta tạo stereotype với tên biểu mẫu (form) rồi gán nó cho mọi lớp tương 
ứng. UML có ba loại stereotype mặc định để gán cho ba loại lớp, đó là lớp biên (Boundary), lớp 
thực thể (Entity) và lớp điều khiển (Control). 
Lớp biên (boundary class). Lớp biên là lớp nằm trên biên hệ thống và pah62n thế giới còn 
lại. Chúng có thể là biểu mẫu (form), báo cáo (report), giao diện với phần cứng như máy in, máy 
quyét và là giao diện với các hệ thống khác. Ký pháp trong UML của lớp biên như sau: 
Để tìm lớp biên hãy khảo sát biểu đồ UC. Với mỗi tác nhân ta có ít nhất một lớp biên (hình 
5.8a). Lớp biên là cái cho pháp tác nhân tương tác với hệ thống. Không nhất thiếp phải tạo ra một 
lớp biên cho mỗi tác nhân. Nếu hai tác nhân cùng kích hoạt một UC thì chỉ cần tạo ra một lớp 
biên cho cả hai (hình 5.8b). 
Class Utility
Operation()
Item
ClassUtility
Operation()
Operation()
MetaClass
Attribute
Operation()
 Phát triển phần mềm bằng UML trang | 96 
Hình 5.8 Lớp biên 
Lớp thực thể (entity class). Lớp thực thể lưu trữ thông tin mà nó sẽ được ghi vào bộ nhớ 
ngoài. Thí dụ lớp Employee là lớp thực thể. Các lớp thực thể có thể tìm thấy trong luồn sự kiện 
và biểu đồ tương tác. Nó là lớp có ý nghĩa nhất đối với người sử dụng. Trong UML, ký pháp của 
lớp thực thể như sau: 
Thông thường ta phải tạo ra một bảng trong CSDL cho mỗi lớp loại này. Thay cho xác định 
cấu trức CSDL trước, ta sẽ phát triển cấu trúc CSDL từ thông tin của mô hình đối tượng. Các yêu 
cầu hệ thống xác định luồng sự kiện. Luồng sự kiện xác định đối tượng và lớp. Mỗi thuộc tính 
của lớp thực thể trở thành trường torng CSDL. 
 Lớp điều khiển (control class). Lớp điều khiển có trách nhiệm điều phối hoặt động của 
các lớp khác. Thông thường mỗi UC có một lớp điều khiển để điều khiển trình tự các sự kiện 
trong nó. Chú ý rằng lớp điều khiển không tự thực hiện chức năng nào (lớp khác không gửi nhiều 
thông điiệp đến chúng), nhưng chúng lại gửi nhiều thông điệp đi đến lớp khác. Do vậy, lớp điều 
khiển còn gọi là lớp quản lý. Trong UML, lớp điều khiển được ký hiệu như sau: 
Một loại lớp điều khiển khác là lớp cùng chia sẽ một vài UC. Thí dụ lớp SecurityManager có 
trách nhiệm điều khiển các sự kiện liên quan đến an toàn. Lớp TransactionManager có trách 
nhiệm điều phối các thông điệp liên quan đến giao dịch CSDL. Sử dụng loại lớp điều khiển này 
là cách tốt nhất để tách các chức năng trong hệ thống. Nếu thay đổi trình tự logic của chứng năng 
nào thì chỉ lớp điều khiển bị ảnh hưởng. 
Ngoài các stereotype mặc định của UML trình bày trên đây, ta còn có thể bổ sung stereotype 
mới vào mô hình để sử dụng cho mục đích riêng. 
5.3 GÓI 
Gói được sử dụng để nhóm các lớp có cái chung với nhau. Có nhiều quan điểm khi hình thành 
gói lớp như dựa trên các chứ năng hay dựa trên đặt tính kỹ thuật. Quan điểm chung là ta có thể 
tùy ý gói các lớp lại với nhau. Thí dụ, nếu chọn tiêu chí là stereotype thì sẽ có gói của các lớp 
Entity, gói của các lớp Boundary, gói của các lớp Control Quan điểm khác là gói lớp theo chức 
Use Case 1Taùc nhaân
Taùc nhaân 1
UseCase1
Taùc nhaân 2
Lôùp bieân
Lôùp Bieân
a) b)
 Phát triển phần mềm bằng UML trang | 97 
năng. Thí dụ, có thể gói Security chứa lớp liên quan đến an toàn hệ thống, gói khá là Reporting 
hay Error Handling Lợi thế của gói là cho khả năng dễ sử dụng lại. Thí dụ, có thể lấy gói 
Sercurity để sử dụng lại trong các ứng dụng khác. Sau đây là ví dụ về các gói trong hệ thống quản 
lý thư viện. 
Gói giao diện (UI): bao gồm các lớp giao diện người dùng, cho khả năng quan sát dữ liệu và 
nhập dữ liệu mới. Các lớp này xây dựng trên cơ sở thư viện chuẩn của ngôn ngữ lập trình như 
MFC của Visual C++. Gói này sẽ kết hợp với gói các đối tượng tác nghiệp. Gói UI gọi các thao 
tác trên đối tượng tác nghiệp để truy vấn hay nhập dữ liệu. 
Gói đối tượng tác nghiệp: bao gồm các lĩnh vực từ mô hình phân tích. Chúng sẽ được chi tiết 
khi thiết kế để bổ sung các thao tác và hỗ trợ lưu trữ. Gói các đối tượng tác nghiệp hợp tác với 
gói CSDL để các lớp đối tượng tác nghiệp kế thừa từ lớp lưu trữ trong gói CSDL. 
Gói CSDL: gói này cung cấp dịch vụ cho các lớp khác trong gói tác nghiệp để nó có thể lưu 
trữ (thí dụ ghi lên tập đĩa). 
Gói tiện ích: gói này chứa các dch vụ để các gói khác trong hệ thống sử dụng. Thí dụ gói chứa 
lớp lưu trữ để lưu trữ đối tượng trong toàn bộ hệ thống và nó được sử dụng trong các gói UI, tác 
nghiệp và CSDL. 
Hình 5.9 là thiết kế các gói vừa mô tả trên. 
Hình 5.9 Gói các lớp 
5.4 THUỘC TÍNH LỚP 
Thuộc tính là bộ phận thông tin liên kết với lớp, thí dụ lớp Công ty chứa các thuộc tính như 
Tên, địa chỉ, số nhân viên. Mỗi lớp trong mô hình chứa một hay nhiều thuộc tính. 
5.4.1 - Tìm kiếm thuộc tính 
Có nhiều nơi để tìm ra thuộc tính lớp. Trước hết, tìm thuộc tính trong tài liệu UC. Tìm các 
danh từ trong luồng sự kiện. Chú ý rằng không phải mọi danh từ là thuộc tính mà một số danh từ 
trong đó có thể là lớp, đối tượng Thí dụ khi xem xét luồng ... ữ Italic vì khó đọc trên màn hình. 
· Cố gắng sử dụng các hộp thoại cùng kích thước.Các xâu ký tự được chỉnh hàng từ phía 
trái. 
Hình 8.24 Giao diện độc giả 
Router Gateway
Modem
Maùy chuû 
LAN
Name 
Server
ISPPc tìm 
kieám
Maøn hình chính 
cuûa Ñoäc giaû
Tìm kieám 
döõ lieäu
Gôïi yù
Internet 
 Phát triển phần mềm bằng UML trang | 212 
Hình 8.25 Phân cấp màn hình Độc giả 
 Thông thường makét giao diện được thiết kế trên giấy để mọi người tham gia dự án trao 
đổi thống nhất.Tiếp theo là xây dựng các màn hình giao diện mẫu.Từ các biểu đồ UML phân tích 
trong các phần trên,ta có thể vẽ ra được giao diện người sử dụng.Thí dụ,hình 8.24 là biểu đồ trạng 
thái của giao diện “Độc giả”.Hình 8.25 là biểu đồ tổng hợp phân cấp màn hình “Độc giả”.Hình 
8.26 là biểu đồ trạng thái mức cao của giao diện “Nhân viên”.Hình 8.27 là biểu đồ tổng hợp của 
phân cấp màn hình “Thủ thư”. 
Hình 8.26 Biểu đồ trạng thái của giao diện Nhân viên 
Tröôøng teân ngöôøi duøng
Phím maät khaåu
Phím ñeä trình
Phím xoùa
Maøn hình login ñoäc giaû
Phím tìm kieám
Phím gôïi yù
Phím thoaùt
Maøn hình chính ñoäc giaû
Maøn hình tìm kieám döõ lieäu Maøn hình gôïi yù
Maøn hình danh saùch saùch Phím ñaët tröôùc Cöûa soå ñaët tröôùc Phím ñeä trình
Maøn hình keát quaû Maøn hình ñaët tröôùc
Chöùa tröôøng:
Taùc giaû
Loaïi
Teân taøi lieäu
Soá taïp chí
Chöùa phim:
Ñeä trình
Xoùa
Maøn hình chính 
Nhaân vieân
Maøn hình 
chính Thuû thö
Maøn hình chính Nhaân 
vieân nhaäp lieäu
Möôïn saùch, 
taïp chí
Traû saùch, 
taïp chí
Maøn hình 
Taùc giaû
Maøn hình 
Ñoäc giaû
Maøn hình 
saùch
Maøn hình 
Taïp chí
Maøn hình 
Maãu
 Phát triển phần mềm bằng UML trang | 213 
Hình 8.27 Phân cấp màn hình Nhân viên 
Maøn hình chính Nhaân vieân nhaäp lieäu
Phím trôû laï i
Maøn hình chính Thuû thö
Phím thöïc hieän
Tröôøng Chæ danh nhaân söï Tröôøng chöõ kyù
Maøn hình traû saùch
Phím OK
Maøn hình möôïn saùch
Tröôøng teân ngöôøi söû duïng
Tröôøng maät khaåu
Phím ñeä trình
Maøn hình login Nhaân vieân
Phím xoùa
[OR]
 Phát triển phần mềm bằng UML trang | 214 
PHỤC LỤC 
CHƯƠNG 9 
MÃ TRÌNH PHÁT SINH 
TRONG ROSE 
Phụ lục này trình bày một số mẫu mã trình do Rational Rose phát sinh tự động.Các thí dụ 
trong phụ lục này không mô tả toàn bộ khả năng phát sinh mã trình của Rose mà chỉ mô tả một số 
tương đương giữa UML và các ngôn ngữ lập trình như C++, Java và SQL. 
9.1 PHÁT SINH MÃ TRÌNH C++ 
9.1.1 - Các lớp 
9.1.1.1 - Lớp rỗng 
Rose phát sinh cấu tử ,hủy tử ,cấu tử sao chép,toán tử gán và hai toán tử so sánh.Chú ý rằng 
để cho dễ đọc mã trình thì các thao tác trong thí dụ này sẽ không được viết lặp lại trong các thí dụ 
về sau. 
Mô hình Mã trình 
#ifndef A_h 
#define A_h 1 
class A 
{ 
public: 
 //## Constructor (generated) 
 A (); 
 A (const A& right); 
 //## Destructor (generated) 
 ~ A () ;//## Assingnment Operation (generated) 
 Const A& operator =(const A& right) 
 //## Equality Operations (generated) 
 int operator == (const A& right)const; 
 int operator != (const A$ right)const; 
} ; 
#endif 
9.1.1.2 - Lớp có thuộc tính và thoa tác 
Mô hình Mã trình 
 Phát triển phần mềm bằng UML trang | 215 
class A 
{ 
public: 
 //## Other operations (specified) 
 void Op 1() 
 void Op 2() 
 const String get_A 1() const; 
 void set_A (const String value); 
 const String get_A2() const; 
 void set_A2(const String value); 
private: 
 String A1; 
 String A2; 
 }; 
inline const String A:: get_A1() const 
{ 
 Return A1; 
} 
inline void A:: set_A1(const String value) 
{ 
 A1=value; 
} 
inline const String A::get_A2() const 
{ 
 Return A2; 
} 
inline void A::set_A2(const String value) 
{ 
 A2=value; 
} 
9.1.1.3 - Lớp tham số (template) 
Mô hình Mã trình 
A 
A1:String 
A2:String 
Op1() 
Op2() 
 Phát triển phần mềm bằng UML trang | 216 
template 
class D 
{ 
public: 
 D(); 
 D(const D& right); 
 ~D (); 
 const D& operator=(const D& right); 
 int operator == (const D& right) const; 
 int operator != (const D& right) const; 
}; 
9.1.1.4 - Lớp tiện ích (utility) 
Mọi thao tác của lớp tiện ích đều có tiền tố là từ khóa static. 
Mô hình Mã trình 
class F 
{ 
pubilc: 
 static void Op 1(); 
 static void Op 2(); 
}; 
9.1.2 - Quan hệ kết hợp 
9.1.2.1 - Kết hợp 1-1 
Nếu kết hợp theo tham chiếu thì mã trình được phát sinh cho kết hợp bao gồm con trỏ trong 
vùng private của lớp tham gia kết hợp. 
Mô hình 
Mã trình 
Class A 
{ 
const B* get_Rb() const; 
void set_Rb (B* const value); 
private: 
 B A
11
RbRa
 Phát triển phần mềm bằng UML trang | 217 
B* Rb; 
}; 
inline const B* A:: get_Rb () const 
{ 
return Rb; 
} 
inline void A:: set_Rb (B*const value) 
{ 
Rb = value; 
} 
class B 
{ 
const A* get_Ra () const; 
void set_Ra(A* const value); 
private: 
A* Ra; 
}; 
inline const A* B :: get_Ra() const 
{ 
return Ra; 
} 
inline void A:: set_Ra (A* const value) 
{ 
Ra=value; 
} 
9.1.2.2 - Kết hợp N-1 
Mã trình được phát sinh cho kết hợp bao gồm con trỏ trong vùng private của lớp tham gia kết 
hợp.Tính nhiều (multiplicity) 0 * được cài đặt bằng tập có kích thước không giới hạn. 
Mô hình 
Mã trình 
class B 
{ 
const UnboundedSetByReference get_Ra() const; 
void set_Ra (const UnboundedSetByReferencevalue); 
Private: 
 B A
10..n
RbRa
 Phát triển phần mềm bằng UML trang | 218 
unboundedSetByReferenceRa; 
}; 
inline const UnboundedSetByReference B:: get_Ra () const 
{ 
return Ra; 
} 
inline void A:: set_Ra(const UnboundedSetByReferencevalue) 
{ 
Ra=value; 
} 
9.1.2.3 - Kết hợp N-1 có ràng buộc 
Mã trình được phát sinh cho kết hợp bao gồm con trỏ torng vùng private của lớp tham gia kết 
hợp.Do có ràng buộc {Ordered} cho nên tính nhiều (multiplicity) 0* được cài đặt bằng danh 
sách có kích thước không giới hạn thay cho tập như thí dụ trên đây. 
Mô hình 
Mã trình 
class B 
{ 
const UnboundedListByReference get_Ra() const; 
void set_Ra(const UnboundedListByReferencvalue); 
private: 
unboundedListByReferenceRa; 
}; 
9.1.2.4 - Lớp kết hợp 1-1 
Mô hình 
 B A
10..n
RbRa
{Ordered}
A B
11
C
 Phát triển phần mềm bằng UML trang | 219 
Mã trình 
class A; classB 
class C 
{ 
const B* get_the_B () const; 
void set_the_B (B* const value); 
private: 
A* the_A; 
B* the_B; 
}; 
#include “C.h” 
class A 
{ 
const C* get_the_C() const; 
void set_the_C(C* const value); 
private: 
C* the_C; 
}; 
#include “C.h” 
class B 
{ 
const C* get_the_C() const; 
void set_the_C(C* const value); 
private: 
C* the_C; 
}; 
9.1.2.5 - Lớp kết hợp N-N 
Mô hình 
Mã trình 
#include “C.h” 
class B 
{ 
const UnboundedSetByReference get_the_C() const; 
void set_the_C(const UnboundedSetByReference value); 
private: 
 Phát triển phần mềm bằng UML trang | 220 
unboundedSetByReferencethe_C; 
}; 
9.1.3 - Quan hệ phụ thuộc tập hợp 
9.1.3.1 - Phụ thuộc tập hợp (aggregation)1-1 
Mô hình 
Mã trình 
#include “B.h” 
class A 
{ 
const B* get_the_B () const; 
void set_the_B (B* const value); 
private: 
B* the_B; 
}; 
#include “A.h” 
class B 
{ 
const A* get_Ra () const; 
void set_Ra (A* const value); 
private: 
A* Ra; 
}; 
9.1.3.2 - Phụ thuộc tập hợp với khả năng dẫn đường hạn chế 
Mô hình 
Mã trình 
class A 
{ 
private: 
 B A
1 1
Ra
 B A
1 1
Ra
 Phát triển phần mềm bằng UML trang | 221 
}; 
#include “A.h” 
class B 
{ 
const A* get_Ra () const; 
void set_Ra (A* const value); 
private: 
A*Ra; 
}; 
9.1.3.3 - Quan hệ gộp (composition) 1-1 
Mô hình 
Mã trình 
#include “B.h” 
class A 
{ 
const B* get_the_B() const; 
void set_the_B (B* Const value); 
private: 
B* THE_b; 
}; 
#include “A.h” 
class B 
{ 
const A get_Ra () const; 
void set_Ra (const Avalue); 
private: 
A Ra; 
}; 
9.1.3.4 - Phụ thuộc tập hợp 1-N 
Mô hình 
 B A
1 1
Ra
 Phát triển phần mềm bằng UML trang | 222 
Mã trình 
#include “A.h” 
class B 
{ 
const UnboundedSetByReferenceget_Ra () const; 
void set_Ra (const UnboundedSetByReferencevalue); 
private: 
unboundedSetByReference Ra; 
}; 
9.1.4 - Quan hệ kế thừa 
9.1.4.1 - Kết thừa đơn 
Mô hình Mã trình 
#include “A.h” 
class B:public A 
{ 
}; 
9.1.4.2 - Kế thừa bội 
Mô hình Mã trình 
#include “A1.h” 
#include “A2.h” 
class B:public A2,public A1 
{ 
}; 
9.2 PHÁT SINH MÃ TRÌNH JAVA 
Các đoạn mã trình mẫu dưới đây được Rose phát sinh từ mô hình UML.Phần này không mô 
tả toàn bộ khả năng của Rose mà chỉ mô tả tương ứng giữa một vài biểu đồ UMLvới ngôn ngữ 
Java. 
 B A
1 0..n
Ra
 Phát triển phần mềm bằng UML trang | 223 
9.2.1 - Các lớp 
9.2.1.1 - Lớp rỗng 
Rose phát sinh cấu tử,hủy tử.Chú ý rằng để cho dễ đọc mã trình thì các thao tác này sẽ không 
được viết lặp lại trong các thí dụ về sau. 
Mô hình Mã trình 
public final class A { 
 public A () { 
 super (); 
 } 
 protected void finalize () throws Throwable { 
 super.finalize (); 
 } 
} 
9.2.1.2 - Lớp có thuộc tính và thao tác 
Mô hình Mã trình 
public final class A { 
 private String m_A1; 
 private String m_A2; 
 public void Op 1() { 
 } 
 public void Op 2 () { 
 } 
} 
9.2.1.3 - Lớp trừu tượng 
Mô hình Mã trình 
Insert Figure: 08710D01 public abstract class A { 
} 
 Phát triển phần mềm bằng UML trang | 224 
9.2.1.4 - Giao diện 
Mô hình Mã trình 
Insert Figure: 08710D01 public interface I_A { 
} 
9.2.2 - Quan hệ kết hợp 
9.2.2.1 - Kết hợp 1-1 
Mô hình 
Mã trình 
public class A { 
public B m_Rb; 
}; 
public class B { 
public A m_Ra; 
}; 
9.2.2.2 - Kết hợp 1-N 
Mô hình 
Mã trình 
public class B { 
public A m_Ra; 
} 
Mô hình 
A B
11
RbRa
A B
10..n
RbRa
 Phát triển phần mềm bằng UML trang | 225 
Mã trình 
public class B { 
public Vector m_Ra = new Vector (); 
} 
Mô hình 
 Khi tính nhiều có hạn chế thì kết hợp được cài đặt bằng mảng . 
Mã trình 
public class B { 
private A[] m_Ra = new A[5]; 
} 
9.2.3 - Quan hệ phụ thuộc tập hợp 
9.2.3.1 - Phụ thuộc tập hợp (aggregation) 1-1 
Mô hình 
Mã trình 
public class A { 
public B m_B; 
} 
public class B { 
public A m_Ra; 
} 
Phụ thuộc tập hợp với khả năng dẫn đường hạn chế 
Mô hình 
A B
1n
Rb-Ra
A B
15
RbRa
AB 1 1
Ra
 Phát triển phần mềm bằng UML trang | 226 
Mã trình 
public class A { 
} 
public class B { 
public A m_Ra; 
} 
9.2.4 - Quan hệ kế thừa 
9.2.4.1 - Kế thừa đơn 
Mô hình Mã trình 
public class B extends A { 
} 
9.2.4.2 - Kế thừa giữa các giao diện 
Mô hình Mã trình 
public interface I_C extends I_A { 
} 
public interface I_C extends I_A, I_B { 
} 
9.2.4.3 - Cài đặt giao diện bằng lớp trừu tượng 
Mô hình Mã trình 
AB 1 1
RaRb
 Phát triển phần mềm bằng UML trang | 227 
 public abstract class A implements I_A { 
 } 
9.2.4.4 - Cài đặt giao diện bằng lớp 
Mô hình Mã trình 
public class A implements I_A { 
} 
9.2.4.5 - Cài đặt một vài giao diện bằng lớp 
Mô hình Mã trình 
public class A implements I_A,I_B { 
} 
9.3 PHÁT SINH MÃ TRÌNH VISUAL BASIC 
Các đoạn mã trình mẫu dưới đậy được Rose phát sinh từ mô hình UML. Phần này không mô 
tả toàn bộ khả năng của Rose mà chỉ mô tả tương ứng giữa một vài biểu đồ UML với ngôn ngữ 
Visual Basic. 
9.3.1 - Các lớp 
9.3.1.1 - Lớp rỗng 
Mô hình Mã trình 
 Phát triển phần mềm bằng UML trang | 228 
Option Base 0 
Private Sub Class_Initialize () 
End Sub 
Private Sub Class_Terminate () 
End Sub 
9.3.1.2 - Lớp có thuộc tính và thao tác 
Mô hình Mã trình 
Option Base 0 
Public A1 As String 
Public A2 As String 
Private Sub Class_Initialize () 
End Sub 
Private Sub Class_Terminate () 
End Sub 
Public Sub Op1() 
 On Error GoTo Op1Err 
End Sub 
Op1Err: 
 Call RaiseError (MyUnhandleError, “A:Op1 Method”) 
End Sub 
Public Property Get Op2() As Boolean 
 On Error GoTo Op1Err 
 Exit Property 
 Op2Err: 
 Call RaiseError (MyUnhandleError, “A:Op2 Method”) 
End Property 
9.3.1.3 - Lớp có thuộc tính và thao tác 
Mô hình Mã trình 
 Phát triển phần mềm bằng UML trang | 229 
Option Base 0 
Private Sub Class_Initialize () 
End Sub 
Private Sub Class_Terminate () 
End Sub 
Public Sub Op2() 
End Sub 
Public Property Get Op2() As Boolean 
End Property 
9.3.2 - Quan hệ kết hợp 
9.3.2.1 - Kết hợp 1-1 
Mô hình 
Mã trình 
Option Base 0 
Public Rb As B 
Private Sub Class_Terminate () 
End Sub 
Private Sub Class_Initialize () 
End Sub 
Option Base 0 
Public Ra As A 
Private Sub Class_Terminate () 
End Sub 
Private Sub Class_Initialize () 
End Sub 
 A B
11
Ra Rb
 Phát triển phần mềm bằng UML trang | 230 
9.3.2.2 - Kết hợp 1-N 
Mô hình 
Mã trình 
Option Base 0 
Public Rb As B 
Private Sub Class_Initialize () 
End Sub 
Private Sub Class_Terminate () 
End Sub 
Option Base 0 
Public Ra As Collection 
Private Sub Class_Initialize () 
End Sub 
Private Sub Class_Terminate () 
End Sub 
9.3.3 - Quan hệ kế thừa đơn 
Mô hình Mã trình 
Option Base 0 
Implements A 
Local superclass object (generated) 
Private mAObject As New A 
Private Sub Class_Initialize () 
End Sub 
Private Sub Class_Terminate () 
End Sub 
 Public Sub Op 2() 
End Sub 
Private Sub A_Op1 () 
 A B
10..n
Ra Rb
 Phát triển phần mềm bằng UML trang | 231 
mAObject.Op1 
End Sub 
9.4 PHÁT SINH MÃ TRÌNH SQL. 
Các đoạn mã trình mẫu dưới đây được Rose phát sinh từ mô hìnhUML. Phần này không mô 
tả toàn bộ khả năng của Rose mà chỉ mô tả tướng ứng giữa một vài biểu đồ UML với ngôn ngữ 
ANSI SQL. 
9.4.1 - Các lớp 
9.4.1.1 - Lớp rỗng 
Mô hình Mã trình 
CREATE TABLE T_A( 
 A_Id NUMBER (5), 
 PRIMARY KEY (A_Id) 
) 
9.4.1.2 - Lớp có thuộc tính và thao tác 
Mô hình Mã trình 
CREATE TABLE T_A ( 
 A_ IdNUMBER (5) 
 A1 VARCHAR (), 
 A2 VARCHAR (), 
 PRIMARY KEY (A_Id) 
) 
9.4.2 - Quan hệ kết hợp 
9.4.2.1 - Kết hợp 1-1 
Mô hình 
 Phát triển phần mềm bằng UML trang | 232 
Mã trình 
CREATE TABLE T_B ( 
B_Id NUMBER (5), 
PRIMARY KEY (B_Id) 
) 
CREATE TABLE T_A ( 
A_Id NUMBER (5) 
B_Id NUMBER (5) REFERENCE T_B (B_Id), 
PRIMARY KEY (A_Id) 
) 
9.4.2.2 - Kết hợp N-1 
Mô hình 
Mã trình 
CREATE TABLE T_B( 
B_Id NUMBER (5), 
PRIMARY KEY (B_Id) 
) 
CREATE TABLE T-A( 
B_Id NUMBER (5) REFERENCES T_B (B_Id), 
A_Id NUMBER (5), 
PRIMARY KEY (A_Id) 
) 
9.4.2.3 - Lớp kết hợp N-N 
Mô hình 
 A B
11
Ra Rb
 A B
10..n
Ra Rb
 Phát triển phần mềm bằng UML trang | 233 
Mã trình 
CREATE TABLE T_A( 
A_Id NUMBER (5), 
PRIMARY KEY (A_Id) 
) 
CREATE TABLE T_B( 
B_Id NUMBER (5), 
PRIMARY KEY (B_Id) 
) 
CREATE TABLE T_C ( 
A_Id NUMBER (5) REFERENCES T_A(A_Id)ON DELETE CASCADE, 
B_Id NUMBER (5) REFERENCES T-B (B_Id)ON DELETE CASCADE, 
PRIMARY KEY (A_Id,B_Id) 
) 
9.4.3 - Quan hệ kế thừa 
Trong các thí dụ sau đây, mỗi lớp được cài đặt trong một bảng. 
9.4.3.1 - Kế thừa đơn 
Mô hình Mã trình 
CREATE TABLE T_A ( 
 A_Id NUMBER (5), 
 PRIMARY KEY (A_Id) 
) 
CREATE TABLE T_B ( 
 A_Id NUMBER(5) REFERENCES T_A (A_Id), 
 PRIMARY KEY (A_Id) 
) 
 A B
0..n0..n
C
 Phát triển phần mềm bằng UML trang | 234 
9.4.3.2 - Kế thừa bội 
Mô hình Mã trình 
CREATE TABLE T_A1 ( 
 A1_Id NUMBER (5), 
 PRIMARY KEY (A1_Id) 
) 
CREATE TABLE T_A2 ( 
 A2_Id NUMBER (5), 
 PRIMARY KEY (A2_Id) 
) 
CREATE TABLE T_B ( 
A1_Id NUMBER (5) REFERENCES T_A1 (A1_Id), 
A2_Id NUMBER (5) REFERENCES T_A2 (A2_Id), 
PRIMARY KEY (A1_Id, A2_Id) 
) 

File đính kèm:

  • pdfgiao_trinh_phan_tich_huong_doi_tuong_phan_2.pdf