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.
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)
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:
giao_trinh_phan_tich_huong_doi_tuong_phan_2.pdf

