Công nghệ phần mềm - Thiết kế hướng đối tượng sử dụng UML
Dựa vào các chức năng của hệ thống
Hệ thống là tập hợp các chức năng
Chia nhỏ các chức năng và làm mịn dần
Hệ thống gồm các hệ thống con
Làm chủ độ phức tạp
Các chức năng trao đổi với nhau bằng
truyền tham số hoặc dữ liệu (chẳng hạn
biến toàn cục) dùng chung
57
113
Biểu ñồ lớp
Quan hệ kết tập (agregation)
Quan hệ hợp thành (composition)
DanhMụcMặtHàng MặtHàng*1
Quan hệ
Company Person*
0..*
Quan hệ
114
Biểu ñồ lớp
Quan hệ phụ thuộc (dependence): mô tả
một lớp phụ thuộc vào lớp khác
Ví dụ
PointCircle
Quan hệ phụ thộc
center : Point
58
115
Biểu ñồ lớp
Ví dụ: chuyển ñổi mô hình khái niệm
thành biểu ñồ lớp
Giả sử mô hình khái niệm
ThanhToán
ThanhToánBằngTiềnMặt ThanhToánBằngThẻ
PhiênBánHàng1 1thanh toán >
116
Biểu ñồ lớp
Chi tiết các thuộc tính
ThanhToán
tổng : Integer
ThanhToánBằngTiềnMặt ThanhToánBằngThẻ
PhiênBánHàng1 1thanh toán >
59
117
Biểu ñồ lớp
Chi tiết các phương thức
ThanhToán
tổng : Integer
ThanhToánBằngTiềnMặt
nhậnTiền()
ThanhToánBằngThẻ
trừVàoThẻ()
PhiênBánHàng
tínhTổng() : Integer
1 1thanh toán >
118
Biểu ñồ lớp
Xác ñịnh các mức khả kiến
ThanhToán
# tổng : Integer
ThanhToánBằngTiềnMặt
+ nhậnTiền()
ThanhToánBằngThẻ
+ trừVàoThẻ()
PhiênBánHàng
+ tínhTổng() : Integer
1 1thanh toán >
60
119
Nội dung
Khái niệm cơ bản hướng ñối tượng
Biểu ñồ ca sử dụng
Thiết kế cấu trúc tĩnh
Thiết kế cấu trúc ñộng
Sinh mã
120
Cấu trúc ñộng
Biểu ñồ tương tác
Biểu ñồ tuần tự
Biểu ñồ cộng tác
61
121
Biểu ñồ tương tác
Biểu ñồ tương tác mô tả hành vi của hệ thống
Mỗi biểu ñồ tương tác tương ứng một tác vụ ñược
thực hiện bởi một số các ñối tượng
Biểu ñồ tương tác xây dựng dựa trên nền tảng của
biểu ñồ hoạt ñộng và biểu ñồ trạng thái
Biểu ñồ tương tác mô tả các hành ñộng của các ñối
tượng ñể thực hiện một tác vụ. Các hành ñộng của
ñối tượng bao gồm:
gửi các thông ñiệp (message) giữa các ñối tượng
tạo (create) và hủy (destroy) các ñối tượng
122
Biểu ñồ tuần tự
Biểu ñồ tuần tự (sequence diagram) biểu
diễn sự tương tác giữa các ñối tượng bằng
việc nhấn mạnh thứ tự trao ñổi thông ñiệp
giữa các ñối tượng
Biểu ñồ tuần tự gồm:
các ñối tượng
các thông ñiệp trao ñổi giữa các ñối tượng
62
123
Biểu ñồ tuần tự
Mỗi ñối tượng có một ñường sinh tồn (lifeline) biểu diễn
thời gian tồn tại của nó.
Kí hiệu
object object:Class :Class
ðối tượng
ðường sinh tồn
124
Biểu ñồ tuần tự
Thời gian hoạt ñộng (activation) là
thời gian mà ñối tượng ñang thực
hiện một thao tác
Kí hiệu
object
Thời gian hoạt ñộng
63
125
Biểu ñồ tuần tự
Một thông ñiệp ñặc tả trao ñổi giữa
các ñối tượng
Các loại thông ñiệp
Gọi (call)
Trả về (return)
Gửi (send)
Tạo (create)
Hủy (destroy)
126
Biểu ñồ tuần tự
Thông ñiệp gọi gọi một phương thức/thao tác trên ñối tượng
ðối tượng gọi phải ñợi thông ñiệp ñược thực hiện kết thúc
mới có thể thực hiện công việc khác (thông ñiệp ñồng bộ)
Một ñối tượng có thể gửi thông ñiệp cho chính nó
Kí hiệu
object A object B
message()
object
Gửi thông ñiệp gọi Gửi cho chính nó
64
127
Biểu ñồ tuần tự
Thông ñiệp trả về trả về một giá trị
cho ñối tượng gọi
Kí hiệu
Object A Object B
message()
Thông ñiệp trả về
value
128
Biểu ñồ tuần tự
Thông ñiệp gửi gửi một tín hiệu ñến một ñối tượng
Khác với thông ñiệp gọi, khi ñối tương gửi thông ñiệp
gửi nó không chờ ñợi, mà tiếp tục thực hiện công việc
khác (thông ñiệp không ñồng bộ)
Kí hiệu
object A object B
message()
Thông ñiệp gửi
65
129
Biểu ñồ tuần tự
Thông ñiệp tạo gọi phương thức tạo một ñối tượng
Thông ñiệp hủy gọi phương thức hủy một ñối tượng
Kí hiệu
object A
object B>
Thông ñiệp tạo
>
Thông ñiệp hủy
130
Biểu ñồ tuần tự
Ví dụ
:A
:B>msg1
msg2
msg3
public class A
{
private B objB;
public void msg1()
{
objB = new B();
objB.msg2();
objB.msg3();
}
}
public class B
{
…
public void msg2() { … }
public void msg3() { … }
}
66
131
Biểu ñồ tuần tự
Một thông ñiệp có thể ñược gửi lặp
nhiều lần
Kí hiệu
object A
*[1..10]message()
Gửi lặp thông ñiệp 10 lần
object B
for(i = 1; i<= 10; i++)
{
objectB.message()
}
132
Biểu ñồ tuần tự
Một thông ñiệp có thể ñược gửi lặp
nhiều lần phụ thuộc vào một ñiều kiện
Kí hiệu
object A
*[C]message()
Gửi lặp thông ñiệp trong khi C ñúng
object B
while(C)
{
objectB.message()
}
67
133
Biểu ñồ tuần tự
Một thông ñiệp có thể ñược gửi phụ
thuộc vào ñiều kiện rẽ nhánh
Kí hiệu
object A
[C]message()
object B
if(C)
objectB.message();
else
objectC.message();
object C
[not C]message()
134
Biểu ñồ tuần tự
Một thông ñiệp có thể ñược gọi ñệ
quy
Kí hiệu
print()
Thông ñiệp ñệ quy
:BinaryTree
print()
68
135
Biểu ñồ tuần tự
Ví dụ
:TàiLiệu :MáyFax
gọi()
:DâyðiệnThoại
nhấcMáy()
bấmSố(số)
gửi(trang)
chuyển(trang)
ñãKếtNối
âmMời
ñãKếtNối
136
Biểu ñồ tuần tự
Ví dụ
:NgườiBán :MáyTínhTiền
thanhToán(sốTiền)
:PhiênBánHàng
thanhToán(sốTiền)
thanhToán(sốTiền)
:ThanhToán
tiềnDư
tiềnDư
trảTiềnDư()
>
>
69
137
Biểu ñồ tuần tự
Giữa biểu ñồ tương tác và biểu ñồ lớp và có mối quan
hệ chặt chẽ với nhau
Ví dụ
MáyTínhTiền
mởThanhToán()
PhiênBánHàng
thanhToán()
:MáyTínhTiền :PhiênBánHàng
thanhToán(sốTiền)mởThanhToán(sốTiền)
138
Biểu ñồ cộng tác
Biểu ñồ cộng tác (collaboration diagram) mô tả sự
tương tác giữa các ñối tượng bằng việc nhấn mạnh
cấu trúc kết hợp giữa các ñối tượng và những thông
ñiệp trao ñổi giữa chúng
Biểu ñồ cộng tác là sự mở rộng của biểu ñồ ñối tượng
Biểu ñồ cộng tác chỉ ra
thứ tự gửi các thông ñiệp: mỗi thông ñiệp ñược gán
một số tuần tự
ñiều kiện gửi các thông ñiệp
70
139
Biểu ñồ cộng tác
Cấu trúc thông ñiệp ñược mô tả dạng tổng quát như sau:
precondition / condition sequence * *|| iteration : result := message(parameters)
“precondition /”: danh sách số tuần tự của các thông ñiệp trước
thông ñiệp cần gửi. Thông ñiệp chỉ ñược gửi ñi khi tất cả các thông
ñiệp trước nó ñã ñược gửi ñi.
“condition”: thông ñiệp chỉ ñược gửi ñi khi ñiều kiện ñược thỏa
mãn.
“sequence”: số tuần tự của thông ñiệp cần gửi. Ví dụ, việc gửi
thông ñiệp 1.3.5 theo sau việc gửi thông ñiệp 1.3.4, cả hai thông
ñiệp này nằm trong luồng 1.3.
“*”: chỉ ra thông ñiệp ñược gửi ñi nhiều lần một cách tuần tự.
“*||”: chỉ ra thông ñiệp ñược gửi ñi nhiều lần một cách ñồng thời.
“iteration”: chỉ ra số lần gửi thông ñiệp một cách tuần tự hoặc ñồng
thời
“result”: chỉ ra giá trị trả về của thông ñiệp.
“message”: tên thông ñiệp
“parameters”: danh sách các tham số của thông ñiệp.
140
Biểu ñồ cộng tác
Ví dụ
4 : hello() : thông ñiệp có số tuần tự là 4.
[time = 12h] 1 : lunch() : thông ñiệp này chỉ
ñược gửi ñi nếu là lúc 12h.
1.3.5 * call() : thông ñiệp này ñược gửi ñi
nhiều lần.
3 / *|| [i:= 1..5] 1.2 : close() : thông ñiệp này
ñược gửi ñi năm lần một cách ñồng thời và
sau thông ñiệp số 3.
1.2, 2.3 / [t < 10] 3.1 name = getName() :
thông ñiệp này ñược gửi ñi sau các thông
ñiệp 1.2, 2.3 và với ñiều kiện t<10.
71
141
Biểu ñồ cộng tác
Ví dụ biểu ñồ cộng tác
:NgườiBán
:HệThống :PhiênBánHàng
:ThanhToán
1 : thanhToán(sốTiền)
2 : trảTiềnDư()
1.2 tiềnDư()
1.1 : thanhToán(sốTiền)
1.1.1 : >
1.1.2 : thanhToán(sốTiền)
1.1.4 : >
1.1.3 : tiềnDư()
142
Biểu ñồ tương tác
Bài tập 1: Máy rút tiền ATM
Xây dựng biểu ñồ tuần tự cho ca sử dụng
rút tiền trong trường hợp thành công
Xây dựng biểu ñồ tuần tự cho ca sử dụng
xem số tiền dư trong tài khoản
72
143
Nội dung
Khái niệm cơ bản hướng ñối tượng
Biểu ñồ ca sử dụng
Thiết kế cấu trúc tĩnh
Thiết kế cấu trúc ñộng
Sinh mã
144
Sinh mã
Chuyển các mô hình thiết kế sang mã chương trình
(C++, Java, …)
Mã chương trình hướng ñối tượng
ðịnh nghĩa các lớp và giao diện
ðịnh nghĩa các phương thức
Các biểu ñồ lớp sẽ ñược chuyển sang mã
chương trình ñịnh nghĩa các lớp tương ứng
Các biểu ñồ tương tác sẽ ñược chuyển thành mã
chương trình ñịnh nghĩa các phương thức
Các biểu ñồ khác sẽ hỗ trợ cho quá trình mã hóa
73
145
Sinh mã
Ví dụ: biểu ñồ lớp
ListOfOrders
− datePlaced
− clientID
+ total() : double
OneOrder
− quantity: Integer
+ subtotal() : double
AirPlane
− price : float
+ getPrice() : float
1
1..* *
1
contains >orderListe
146
Sinh mã
Mã lớp OneOrder
OneOrder
− quantity: Integer
+ subtotal() : double
public class OneOrder
{
public double subtotal()
{
}
private int quantity;
}
74
147
Sinh mã
Mã lớp OneOrder
public class OneOrder
{
public double subtotal()
{
}
private int quantity;
private AirPlane airPlane;
}
OneOrder
− quantity: Integer
+ subtotal() : double
AirPlane
− price : float
+ getPrice() : float
*
1
contains >
148
Sinh mã
Mã lớp ListOfOrders
public class ListOfOrder
{
public double total()
{
}
private Date datePlaced;
private int clientID;
private Vector orderList;
}
ListOfOrders
− datePlaced
− clientID
+ total() : double
OneOrder
− quantity: Integer
+ subtotal() : double
1
1..*
orderListe
75
149
Sinh mã
Biểu ñồ cộng tác thực hiện phương thức
total()
:ListOfOrders :OneOrder
:AirPlane
1 : total() 2 : *[for each] subtotal()
3 : getPrice()
150
Sinh mã
Mã phương thức total()
:ListOfOrders :OneOrder
:AirPlane
1 : total() 2 : *[for each] subtotal()
3 : getPrice()
public double total()
{
}
76
151
Sinh mã
Mã phương thức total()
:ListOfOrders :OneOrder
:AirPlane
1 : total() 2 : *[for each] subtotal()
3 : getPrice()public double total()
{
double sum = 0;
for (int i=0; i<orderList.size(); i++)
sum += orderList.elementAt(i).subtotal();
return sum;
}
152
Sinh mã
Mã phương thức subTotal()
:ListOfOrders :OneOrder
:AirPlane
1 : total() 2 : *[for each] subtotal()
3 : getPrice()public double subtotal()
{
return (quantity * airplane.getPrice());
}
77
153
Sinh mã
Mã phương thức getPrice()
:ListOfOrders :OneOrder
:AirPlane
1 : total() 2 : *[for each] subtotal()
3 : getPrice()public float getPrice()
{
return price;
}
154
Công cụ
Phần mềm Rational Rose, Poisedon
for UML, Umbrello
Thiết kế các biểu ñồ UML
Sinh mã chương trình
• C++
• Java
• VB
• Ada
File đính kèm:
7_ThietKeHDT.pdf

