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

pdf77 trang | Chuyên mục: Công Nghệ Phần Mềm | Chia sẻ: dkS00TYs | Lượt xem: 1508 | Lượt tải: 0download
Tóm tắt nội dung Công nghệ phần mềm - Thiết kế hướng đối tượng sử dụng UML, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdf7_ThietKeHDT.pdf