You are on page 1of 21

4/27/2010

ương
Chươ
Ch THIẾT KẾ
ng 9 THIẾ KẾ USE CASE Kiếến trúc ba tầ
Ki tầng (tree-
(tree-layer)
„ Kiến trúc ba tầng (tree-
(tree-layer) „ Kiến trúc client – server
„ Thiết kế các lớp tầng nghiệp vụ
„ Thiết kế các lớp tầng truy cập dữ liệu
„ Thiết kê các lớp tầng giao diện
Giao diện Dữ liệu
„ Mô tả hiện thực hoá nội dung thiết kế use case
„ Giao diện cài đặt luôn xử lý nghiệp vụ trực
tiếp trong giao diện
„ Æ Tạo ra một sự phụ thuộc rất lớn giữa giao
diện và CSDL và do đó, rất khó để cải tiến,
bảo trì và tái sử dụng
1 2

Kiếến trúc ba tầ
Ki tầng (tree-
(tree-layer) Kiếến trúc ba tầ
Ki tầng (tree-
(tree-layer)
„ Kiến trúc ba tầng (tree
(tree--layer) „ Kiến trúc ba tầng (tree-
(tree-layer)
„ Tạo ra sự độc lập giữa giao diện và dữ liệu bằng Trả lời tương tác người dùng: chuyển
cách cô lập các chức năng của giao diện với các dịch những hành động của người dùng tới
một tìnhhiện
huống
cácxử lý phù
táchợp
chức năng tác nghiệp (business), và cô lập các chức Thực giao xử lý liên quan
Hiển
đến thị các đối
nghiệp tượng
vụ mà khôngtác quan
nghiệp : trình
tâm đến
năng tác nghiệp với các chi tiết về truy cập CSDL bày một
User interface layer hiển thịhình
chúngảnhnhư
tốt nhất
ốUser các đối
ốVàtượng
ấinterface
thế nào? CSDL
„ Ánh xạ các đối tượng đại diện các đối tượng hữu tác nghiệp tới
được lấy ở đâu? người dùng
layertrong một giao
diện
hình trong thực tế nhưng hoàn toàn độc lập với cách Business layer Business layer
Chuyển dịch yêu cầu: chuyển dịch tất cả
thức mà các đối tượng này trình bày tới người dùng các yêu cầu liên quanData
đếnlayer
dữ liệu từ tầng
Data layer
hoặc là với cách mà dữ liệu của nó được lưu trữ vật tác nghiệp đến một phương thức truy cập
lý trong CSDL CSDL
dữ liệu thích hợp (dạng SQL, truy xuất
Middleware
file,…)
Chuyển dịch kết System
quả software

3 4

1
4/27/2010

Kiếến trúc ba tầ
Ki tầng (tree-
(tree-layer) ương
Chươ
Ch THIẾT KẾ
ng 9 THIẾ KẾ USE CASE
„ Ý tưởng thiết kế „ Kiến trúc ba tầng (tree-
(tree-layer)
diện
Giao diệ
„ Thiết kế các lớp tầng nghiệp vụ
Giao diện
„ Thiết kế các lớp tầng truy cập dữ liệu
Xử lý
„ Thiết kê các lớp tầng giao diện
„ Mô tả hiện thực hoá nội dung thiết kế use case

Đối tượng mô tả
thế giới thực Truy cập dữ liệu

5 6

Thiếết kế
Thi kế lớp tầ
tầng nghiệ
nghiệp vụ
vụ Thiếết kế
Thi kế lớp tầ
tầng nghiệ
nghiệp vụ
vụ
„ Nguyên tắc:
„ Có thể chuyển đổi một lớp tầng nghiệp vụ
Tầng giao diện thành nhiều lớp ứng với những mục đích
khác nhau (*)
Tầngg nghiệp
g p vụ

Hệ thống thực tế
Lớp phân tích Lớp điều khiển Lớp xử lý Lớp cấu trúc

Sơ đồ lớp HoáĐơn HoáĐơn


XLHoáĐơn -sốHĐ
-sốHĐ -ngàyHĐ
Tầng truy cập dữ liệu -ngàyHĐ -sốTiền
-sốTiền +tìmHĐ(đk):[0..*] HoáĐơn
+thêmHĐ() +thêmHĐ()
+tìmHĐ() (*): đảm bảo nguyên tính mục đích trong thiết kế
7 8

2
4/27/2010

Thiếết kế
Thi kế lớp tầ
tầng nghiệ
nghiệp vụ
vụ Thiếết kế
Thi kế lớp tầ
tầng truy cậ
cập dữ
dữ li
liệệu
„ Ví dụ: các lớp tầng nghiệp vụ hệ thống ATM „ Xác định các đối tượng lưu trữ (persistent)
NgânHàng

+kếtNối()
+đóngKếtNối() „ Chuyển đổi sang mô hình quan hệ
KháchHàng
#tênKháchHàng:String
#họKháchHàng:String
#mãPIN::String
MáyATM
#địaChỉ:String
„ Xác định các lớp tầng truy cập dữ liệu
# ốThẻ St i
#sốThẻ:String #trạngThái:String
#sốTiềnHiệnTại:float
#tàiKhoản:TàiKhoản
+khởiĐộngMáy()
+kiểmTraMậtKhẩu() +đóngMáy()
#lấy_KháchHàng() #cậpNhậtSốTiền()
1 #tắtMáy()
của
1
TàiKhoản GiaoDịch
#sốTàiKhoản:String #giaoDịchID:String
#loạiTàiKhoản:String có #ngàyGiaoDịch:Date
#sốDư:float #thờiGianGiaoDịch:Time
#giaoTác:GiaoTác #loạiGiaoDịch:String
1 0..n #sốTiền:float
#kháchHàng:KháchHàng
#sốDư:float
+gửiTiền()
+rútTiền() +gánThôngTinGiaoDịch()
#cậpNhậtTàiKhoản()
#tạoGiaoTác()

GiaoDịchRút GiaoDịchGởi 9 10

định các đố
Xác đị đối tượ
tượng lưu trữ
ng lư trữ định các đố
Xác đị đối tượ
tượng lưu trữ
ng lư trữ
„ Các loại dữ liệu tồn tại trong một hệ thống: „ Các loại dữ liệu tồn tại trong một hệ thống:
„ Là kết quả tạm thời để đánh giá một biểu thức
„ Các biến trong quá trình thực thi một thủ tục (các Dữ liệu
tạm thời
tham số và biến trong phạm vi cục bộ) (transient) Các lớp transient
„ Các biến toàn cụcụ và các biết cấpppphát một
ộ cách tự

động
„ Dữ liệu tồn tại giữa các lần thực thi một chương trình
Dữ liệu
„ Dữ liệu tồn tại giữa các phiên bản của một chương lâu dài
trình (persistent
„ Dữ liệu tồn tại vượt ngoài phạm vi sống của một )
chương trình

11 12

3
4/27/2010

định các đố
Xác đị đối tượ
tượng lưu trữ
ng lư trữ Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ
„ Các lớp persistent của hệ thống ATM
KháchHàng Các lớp persistent
#tênKháchHàng:String
#họKháchHàng:String
#mãPIN::String
#sốThẻ:String
#tàiKhoản:TàiKhoản

1
1
GiaoDịch
TàiKhoản
#giaoDịchID:String
#sốTàiKhoản:String #ngàyGiaoDịch:Date
#loạiTàiKhoản:String có
#thờiGianGiaoDịch:Time
#sốDư:float #loạiGiaoDịch:String
#giaoTác:GiaoDịch 1 0..n #sốTiền:float
#kháchHàng:KháchHàng
#sốDư:float
Dữ liệu luận lý
(complete, disjoint)

GiaoDịchRút GiaoDịchGởi
Dữ liệu vật lý
13 14

Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ
„ Chuyển đổi lớp – bảng (class – table) „ Chuyển đổi liên kết (association, agregration)
„ Một lớp Æ một bảng „ 1-1
„ Một thuộc tính (persistent) Æ một cột: chỉ có các Bảng KháchHàng
KháchHàng
thuộc tính có nhu cầu lưu trử và được đòi hỏi bởi ứng tênKháchHàng Tên_KH Họ_KH MãPIN Số_Thẻ
d
dụng sẽẽđđược chuyển
h ể thàthànhh cột
ột của
ủ bả
bảng. h Khá hHà
họKháchHàng
mãPIN
sốThẻ
„ Một đối tượng (thể hiện) Æ một dòng
1
Bảng TàiKhoản (*)
KháchHàng 1
tênKháchHàng Tên_KH Họ_KH MãPIN Số_Thẻ TàiKhoản
họKháchHàng Số_TK Loại_TK Số_Dư_TK Số_Thẻ
sốTàiKhoản
mãPIN loạiTàiKhoản
sốThẻ sốDư

(*): Số_Thẻ là một khoá của bảng TàiKhoản


15 16

4
4/27/2010

Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ
„ Chuyển đổi liên kết (association, agregration)
„ Chuyển đổi liên kết (association, agregration) „ 1-n GiaoDịch
„ 1-1 TàiKhoản giaoDịchID
ngàyGiaoDịch
sốTàiKhoản có
thờiGianGiaoDịch
loạiTàiKhoản loạiGiaoDịch
KháchHàng sốDư 1 0..n sốTiền
tênKháchHàng sốDư
h Khá hHà
họKháchHàng
mãPIN Bảng KháchHàng_TàiKhoản Bảng TàiKhoản
sốThẻ

1 Tên_KH Họ_KH MãPIN Số_Thẻ Số_TK Loại_TK Số_Dư_TK Số_TK Loại_TK Số_Dư_TK Số_Thẻ

1 (*)
TàiKhoản Bảng GiaoDịch
sốTàiKhoản
loạiTàiKhoản
sốDư GD_ID Ngày_GD Giờ_GD Loại_GD Số_Tiền Số_Dư Số_TK

(*): Số_Thẻ là một khoá của bảng TàiKhoản


17 18

Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ
„ Chuyển đổi liên kết (association, agregration) „ Chuyển đổi liên kết (association, agregration)
„ n-n „ n-n ĐơnHàng NguyênLiệu
NhânViên CôngViệc sốĐơnHàng mãSố
mãNhânViên Tham gia côngViệcID ngàyĐơnHàng tênNLiệu
tênNhânViên môTảCôngViệc diễnGiải 1..n 0..n ĐVT
sốĐiệnThoại 0..n 0..n ngàyBắtĐầu

dòngĐH
sốLượng
Mã_NV Tên_NV Số_ĐT đơnGiá
Bảng NhânViên

Bảng ĐơnHàng Bảng DòngĐH


Mã_NV Công_Việc_ID Số_ĐH Ngày_ĐH DiễnGiải_ĐH Số_ĐH MS_NL SốLượng ĐơnGiá
Bảng NhânViên_CôngViệc
(ThamGia)

Công_việc_ID Mô_tả_CV Ngày_BĐ MS_NL TênNL ĐVT


Bảng CôngViệc Bảng Nguyên Liệu
19 20

5
4/27/2010

Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ
NhânViên
„ Chuyển đổi liên kết kế thừa NhânViên
mãNhânViên
tênNhânViên
„ Trường hợp 1: mãNhânViên
tênNhânViên
„ Chuyển đổi liên kết kế thừa sốĐiệnThoại

sốĐiệnThoại
„ Trường hợp 2:
NhânViênCôngNhật NhânViênBiênChế
lươngNgày lươngTháng
NhânViênCôngNhật NhânViênBiênChế bậcLương
l
lươngNgày
N à l
lươngTháng
Thá
bậcLương

Bảng NhânViên Bảng NhânViênCôngNhật

Mã_NV Tên_NV Điện_Thoạ Lương_Ngày Lương_Tháng Bậc_Lương Loại_NV Mã_NV Tên_NV Điện_Thoạ Mã_NV Tên_NV Điện_Thoạ Lương_Tháng Bậc_Lương
i i i

Bảng NhânViênBiênChế
Mã_NV Tên_NV Điện_Thoại Lương_Ngày
Phù hợp cho tất cả các trường hợp: (complete, disjoint), (complete, overlapping),
(incomplete, disjoint), (incomplete, overlapping)
Phù hợp cho tất cả các trường hợp: (complete, disjoint), (complete, overlapping),
21 22
(incomplete, disjoint), (incomplete, overlapping)

Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ
NhânViên NhânViên
mãNhânViên mãNhânViên
tênNhânViên tênNhânViên
„ Chuyển đổi liên kết kế thừa sốĐiệnThoại „ Chuyển đổi liên kết kế thừa sốĐiệnThoại

„ Trường hợp 3: „ Trường hợp 4:


NhânViênCôngNhật NhânViênBiênChế NhânViênCôngNhật NhânViênBiênChế
lươngNgày lươngTháng lươngNgày lươngTháng
bậcLương bậcLương

Bảng NhânViênBiênChế Bảng NhânViên Bảng NhânViênBiênChế

Mã_NV Tên_NV Điện_Thoạ Lương_Tháng Bậc_Lương Mã_NV Tên_NV Điện_Thoạ Mã_NV Lương_Tháng Bậc_Lương
i i

Bảng NhânViênCôngNhật Bảng NhânViênCôngNhật


Mã_NV Tên_NV Điện_Thoại Lương_Ngày Mã_NV Lương_Ngày

Phù hợp cho tất cả các trường hợp: (complete, disjoint), (complete, overlapping),
Chỉ phù hợp cho: (complete, disjoint) 23 24
(incomplete, disjoint), (incomplete, overlapping)

6
4/27/2010

Chuyểển đổ
Chuy đổi sang mô hình Quan hệ
hệ định lớ
Xác đị lớp tầ
tầng truy cậ
cập dữ
dữ li
liệệu
Tầng nghiệp vụ
„ Mô hình dữ liệu quan hệ của hệ thống ATM
Bảng KháchHàng
Tên_KH Họ_KH MãPIN Số_Thẻ

Tầng
g truy
y cập
ập dữ liệu

Bảng TàiKhoản
Số_TK Loại_TK Số_Dư_TK Số_Thẻ

CSDL vật lý
Bảng GiaoDịch Tập tin Bảng Bảng
Bảng
GD_ID Ngày_GD Giờ_GD Loại_GD Số_Tiền Số_Dư Số_TK

25 26

định lớ
Xác đị lớp tầ
tầng truy cậ
cập dữ
dữ li
liệệu định lớ
Xác đị lớp tầ
tầng truy cậ
cập dữ
dữ li
liệệu

„ Tạo lớp tầng truy cập dữ liệu: „ Xác định mối kết hợp
„ 1 lớp tầng nghiệp vụ Æ tạo một lớp tương „ Tạo mối kết hợp giữa lớp nghiệp vụ và lớp
ứng tầng truy cập DL tương ứng truy cập dữ liệu (aggregration)
ClassC
„ Tạo thuộc tính tham chiếu: lớp nghiệp vụ Æ
ClassA ClassB
lớp truy cập DL ClassA
classDB_A : ClassDB_A
ClassC1 ClassC2

ClassDB_A
ClassDB_A ClassDB_B ClassDB_C

27 28

7
4/27/2010

định lớ
Xác đị lớp tầ
tầng truy cậ
cập dữ
dữ li
liệệu định method
Xác đị
„ Xác định method „ Các xử lý về dữ liệu
„ Đơn giản hoá các lớp: „ Đọc và lưu các đối tượng persistent
„ Nếu có hai lớp đều cùng cung cấp các dịch vụ „ Xoá các đối tượng persistent
giống nhau
nhauÆÆ loại đi một „ Quản lý giao tác trên các đối tượng persistent

„ Nếu lớp có <= 2 method Æ kết hợp chung „ Kiểm soát cơ chế khoá và truy cập đồng hành
vào lớp khác

LớpDB_A LớpDB_B LớpDB_C

method_A1() method_A1()
method_A2() method_B() method_A2()
method_B()
29 30

định method
Xác đị định method
Xác đị
„ Ghi đối tượng persistent „ Ghi đối tượng persistent
„ Tạo mới đối tượng „ Cập nhật trạng thái đối tượng

Đối tượng điều : ĐơnHàng : ĐơnHàngDB DB : DBMS


Một đối tượng : ĐơnHàng : ĐơnHàngDB DB : DBMS khiển Đơn hàng

lấyThôngTinĐơnHàng()
tạoĐơnHàng()
dh:ĐơnHàng
Gán thông tin cho đơn hàng

ghiĐơnHàng() cậpNhậtĐơnHàng(dh) Thực hiện SQL cập nhật

cậpNhậtĐơnHàng() Thực thi SQL cập nhật

Sử dụng đối tượng điều khiển để quản lý cập nhật Æ chấp nhật nhận các khoảng
thời điểm thiếu sự nhất quán giữa đối tượng và dữ liệu lưu trữ về đối tượng
31 32

8
4/27/2010

định method
Xác đị định method
Xác đị
„ Đọc đối tượng persistent „ Đọc đối tượng persistent
Một đối tượng : ĐơnHàng : ĐơnHàngDB DB : DBMS Đối tượng điều : ĐơnHàng : ĐơnHàngDB : DBMS
khiển Đơn hàng
Lấy thông tin về đơn hàng
Lấy thông tin các Đơn hàng
Truy vấn cơ sở dữ liệu Thi hành SQL truy vấn đơn hàng
Dữ liệu đơn hàng
tạoĐơnHàng()
tạoĐơnhàng()

33 34

định method
Xác đị định method
Xác đị
„ Xoá đối tượng persistent „ Xoá đối tượng persistent
Đối tượng điều : ĐơnHàng : ĐơnHàngDB : DBMS
Một đốii tượng : ĐơnHàng : ĐơnHàngDB : DBMS
khiển Đơn hàng
lấyThôngTinĐơnHàng()
huỷĐơnHàng()
xoáĐơnHàng()
Thực hiện SQL xoá dh:ĐơnHàng

xoáĐơnHàng(dh) Thực hiện SQL xoá

35 36

9
4/27/2010

định method
Xác đị định method
Xác đị
„ Quản lý giao tác (transaction) „ Quản lý giao tác (transaction)
Một đối tượng : HoáĐơn : KháchHàng : HoáĐơnDB : KháchHàngDB : DBMS Một đối tượng : HoáĐơn : KháchHàng : HoáĐơnDB : KháchHàngDB Quản lý giao tác
: DBMS
thêmHoáĐơn( Bắt đầu giao tác
Bắt đầu giao tác (Begin transaction)
)
thêmHoáĐơn() cậpNhậtHoáĐơn()
cậpNhậtHoáĐơn() Thực hiện SQL thêm mới
Thực hiện SQL thêm mới

cậpNhậtCôngNợ() cậpNhậtCôngNợ()
cậpNhậtKháchHàng() Thực hiện SQL cập nhật
cậpNhậtKháchHàng() Thực hiện SQL cập nhật

Kết thúc giao tác (end transaction) Kết thúc giao tác

37 38

định method
Xác đị định method
Xác đị
„ Quản lý giao tác (transaction) „ Xác định lớp truy cập dữ liệu hệ thống ATM
Đối tượng điều : HoáĐơn : KháchHàng : HoáĐơnDB : KháchHàngDB : DBMS
khiển Hoá đơn
Bắt đầu giao tác

thêmHoáĐơn() KháchHàng KháchHàngDB


cậpNhậtHoáĐơn()
Thực hiện SQL thêm mới

TàiKhoản TàiKhoảnDB
cậpNhậtCôngNợ() cậpNhậtKháchHàng()
Thực hiện SQL cập nhật

GiaoDịch

Kết thúc giao tác


GiaoDịchDB

GiaoDịch GiaoDịch

39 40

10
4/27/2010

định method
Xác đị định method
Xác đị
„ Xác định lớp truy cập NgânHàng
dữ liệu hệ thống ATM
+kếtNối()
+đóngKếtNối()
„ Xác định lớp truy cập dữ liệu hệ thống ATM
KháchHàng
#tênKháchHàng:String MáyATM KháchHàngDB TàiKhoảnDB GiaoDịchDB
#họKháchHàng:String #địaChỉ:String
#mãPIN::String #trạngThái:String
#sốThẻ:String #sốTiềnHiệnTại:float
#tàiKhoản:TàiKhoản
+kiểmTraMậtKhẩu()
+khởiĐộngMáy()
+đóngMáy()
+đọcKháchHàng() +cậpNhậtTàiKhoản() +cậpNhậtGiaoDịch()
#lấy_KháchHàng() #cậpNhậtSốTiền() +đọcTàiKhoản()
1 #ắ
#tắtMáy()
()
của KháchHàngDB::+đọcKháchHàng()
1 KháchHàngDB::+đọcTàiKhoản()
GiaoDịch
TàiKhoản
#sốTàiKhoản:String #giaoDịchID:String
#loạiTàiKhoản:String có #ngàyGiaoDịch:Date NgânHàngDB
#sốDư:float #thờiGianGiaoDịch:Time
#giaoTác:GiaoTác #loạiGiaoDịch:String
1 0..n #sốTiền:float
#kháchHàng:KháchHàng
#sốDư:float
+gửiTiền()
+rútTiền() +gánThôngTinGiaoDịch() +đọcKháchHàng()
#cậpNhậtTàiKhoản()
#tạoGiaoTác() +đọcTàiKhoản()
GiaoDịchDB::+cậpNhậtGiaoDịch() +cậpNhậtTàiKhoản()
TàiKhoảnDB::+cậpNhậtTàiKhoản() +cậpNhậtGiaoDịch()
GiaoDịchRút GiaoDịchGởi
41 42

NgânHàng

định method
Xác đị
+kếtNối()
+đóngKếtNối()
định method
Xác đị
KháchHàng
#tênKháchHàng:String MáyATM
„ NgânHàngDB::+đọcKháchHàng
#họKháchHàng:String
#mãPIN::String
#sốThẻ:String
#địaChỉ:String
#trạngThái:String
#sốTiềnHiệnTại:float
(vSốThẻ:String, vMãPIN:String): KháchHàng
#tàiKhoản:TàiKhoản
#ngHàngDB:NgânHàngDB +khởiĐộngMáy()
+đóngMáy() Một đối tượng : KháchHàng : NgânHàngDB
#cậpNhậtSốTiền() giao diện
+kiểmTraMậtKhẩu() #tắtMáy()
#lấy_KháchHàng()
kiểmTraMậtKhẩu(vSốThẻ, vPIN)
1
của
1
1..n vKháchHàng = lấy
lấy_KháchHàng(sốThẻ,
KháchHàng(sốThẻ vPIN)
GiaoDịch
TàiKhoản
#giaoDịchID:String đọcKháchHàng(vSốThẻ, vMãPIN)
#sốTàiKhoản:String
có #ngàyGiaoDịch:Date
#loạiTàiKhoản:String
#thờiGianGiaoDịch:Time Gọi xử lý của use case Đăng nhập
#sốDư:float
#giaoTác:GiaoTác #loạiGiaoDịch:String
1 0..n #sốTiền:float không hợp lệ”
#kháchHàng:KháchHàng
#sốDư:float
#ngHàngDB:NgânHàngDB
+gánThôngTinGiaoDịch()
NgânHàngDB +gửiTiền()
+rútTiền()
#cậpNhậtTàiKhoản()
+đọcKháchHàng() #tạoGiaoTác()
+đọcTàiKhoản()
+cậpNhậtTàiKhoản() GiaoDịchRút GiaoDịchGởi

+cậpNhậtGiáoTác()
43 44

11
4/27/2010

định method
Xác đị định method
Xác đị
„ NgânHàngDB::+đọcKháchHàng „ NgânHàngDB::+đọcTàiKhoản(sốThẻ
NgânHàngDB::+đọcTàiKhoản(sốThẻ::String)
String)::
(vSốThẻ:String, vMãPIN:String): KháchHàng TàiKhoản
Một đối tượng giao : KháchHàng : TàiKhoản : NgânHàngDB
diện gửi tiền
KháchHàng::#lấy_KháchHàng(sốThẻ:String, mãPIN:String): KháchHàng lấy_TàiKhoản()
vNgânHàngDB: NgânHàngDB đọcTàiKhoản()
tạoTàiKhoản()
return vNgânHàngDB.đọcKháchHàng (sốThẻ, mãPIN)
tk:TàiKhoản
tk:TàiKhoản

NgânHàngDB::+đọcKháchHàng (vSốThẻ:String, vMãPIN:String): KháchHàng


-- kết nối cơ dữ liệu ở đây [Nếu khách hàng chọn rút tiền] rútTiền()
return [Nếu khách hàng chọn gửi tiền] gửiTiền()
SELECT * FROM KháchHàng
WHERE Số_Thẻ = vSốThẻ AND Mã_PIN = vMãPIN [Chọn xem thông tin tài khoản] Xem thông tin tài khoản

45
Usecase Giao Dịch 46

định method
Xác đị định method
Xác đị
Một đối tượng giao : KháchHàng : TàiKhoản : GiaoDịch : NgânHàngDB
Một đối tượng giao : KháchHàng : TàiKhoản : NgânHàngDB diện rút tiền
diện gửi tiền
lấy_TàiKhoản()
lấy_TàiKhoản() đọcTàiKhoản()
đọcTàiKhoản()
tạoTàiKhoản()
tạoTàiKhoản()
tk:TàiKhoản
tk:TàiKhoản tk:TàiKhoản
tk:TàiKhoản
Bắt đầ
đầu giao
i tác

rútTiền()
Bắt đầu giao tác cậpNhậtTàiKhoản()
gửiTiền()
cậpNhậtTàiKhoản() tạoGiaoTác()
tạoGiaoTác() Rút thành công Nếu sốDư >=
sốTiền thì cho phép
thực hiện rút tiền
Rút không thành công

Kết thúc giao tác Nếu sốDư < sốTiền


thì không cho thực
hiện rút tiền
Kết thúc giao tác

Usecase Gửi tiền 47


Usecase Rút tiền 48

12
4/27/2010

định method
Xác đị định method
Xác đị
„ NgânHàngDB::
NgânHàngDB ::+đọcTàiKhoản(vSốThẻ
+đọcTàiKhoản(vSốThẻ::String) „ NgânHàngDB::
NgânHàngDB ::+đọcTàiKhoản(vSốThẻ
+đọcTàiKhoản(vSốThẻ::String)
: TàiKhoản : TàiKhoản
KháchHàng::-lấy_TàiKhoản(sốThẻ:String): TàiKhoản
vNgânHàngDB: NgânHàngDB
return vNgânHàngDB.đọaTàiKhoản(sốThẻ) TàiKhoản::+rútTiền(sốTiền:float): String
g g
vNgânHàngDB: NgânHàngDB
g g
NgânHàngDB::+đọcTàiKhoản(vSốThẻ:String): TàiKhoản if sốDư < sốTiền
-- kết nối cơ sở dữ liệu ở đây return “Số tiền rút vượt quá số dư tài khoản”
Return else
SELECT * FROM TàiKhoản NgânHàngDB.cậpNhậtTàiKhoản (sốTàiKhoản, sốDư + sốTiền)
WHERE Số_Thẻ = vSốThẻ tạoGiaoTác(“gửi”, sốTiền, sốDư + sốTiền)
return “”
TàiKhoản::+gửiTiền(sốTiền:float) endif
vNgânHàngDB: NgânHàngDB
NgânHàngDB.cậpNhậtTàiKhoản (sốTàiKhoản, sốDư + sốTiền)
tạoGiaoTác(“gửi”, sốTiền, sốDư + sốTiền)
49 50

định method
Xác đị định method
Xác đị
„ NgânHàngDB::
NgânHàngDB::+câpNhậtGiaoDịch()
+câpNhậtGiaoDịch() „ NgânHàngDB::
NgânHàngDB::+câpNhậtGiaoDịch()
+câpNhậtGiaoDịch()
Một đối tượng giao : KháchHàng : TàiKhoản : GiaoDịch : NgânHàngDB
diện gửi tiền TàiKhoản::#tạoGiaoTác(loạiGD:String, sốTiền:float, sốDư: float)
lấy_TàiKhoản()
đọcTàiKhoản()
vNgânHàngDB: NgânHàngDB
tạoTàiKhoản()
vGiaoDịch = tạoMới(GiaoDịch)
tk:TàiKhoản
vGiaoDịch.gánThôngTin(Date(today), Time(now), loạiGD, sốTiền,
tk:TàiKhoản sốDư, sốTàiKhoản)
vNgânHàngDB cậpNhậtGiaoDịch(sốTàiKhoản loạiGD
vNgânHàngDB.cậpNhậtGiaoDịch(sốTàiKhoản, loạiGD, sốTiền
sốTiền,
Bắt đầu giao tác
gửiTiền() sốDư)
cậpNhậtTàiKhoản()
tạoGiaoTác()
NgânHàngDB::+cậpNhậtGiaoDịch(vSốTàiKhoản:String, vLoạiGD:String,
tạoMới()
vSốDư:float)
gánThôngTin() --kết nối cơ sở dữ liệu ở đây
vGD_ID: String
cậpNhậtGiaoDịch()
vGD_ID = Tạo_GD_ID()
Kết thúc giao tác INSERT INTO GiaoDịch (GD_ID, Ngày_GD, Giờ_GD, Loại_GD, Số_Tiền,
Số_Dư, Số_TK) VALUES (vGD_ID, Date(today), Time(now), vLoạiGD,
vSốTiền, vSốDư, vSốTàiKhoản)
51 52

13
4/27/2010

ương
Chươ
Ch THIẾT KẾ
ng 9 THIẾ KẾ USE CASE Thiếết kế
Thi kế lớp tầ
tầng giao diệ
diện
„ Kiến trúc ba tầng (tree-
(tree-layer) „ Xác định các đối tượng ở tầng giao diện:
„ Thiết kế các lớp tầng nghiệp vụ „ Xây dựng sơ đồ lớp mô tả các đối tượng giao
diện của hệ thống
„ Thiết kế các lớp tầng truy cập dữ liệu
„ Tạo mẫu giao diện (prototype)
„ Thiết kê các lớp tầng giao diện
„ Xác định hành vi và thuộc tính cho các lớp
„ Mô tả hiện thực hoá nội dung thiết kế use case
giao diện
„ Thử nghiệm giao diện

53 54

Thiếết kế
Thi kế lớp tầ
tầng giao diệ
diện Thiếết kế
Thi kế lớp tầ
tầng giao diệ
diện
„ Xác định các đối tượng ở tầng giao diện:
„ Xác định các đối tượng ở tầng giao diện:

Use case

Tác
nhân con
người
Có một hoặc nhiều đối tượng tầng giao
diện được xác định dựa trên sự tương tác
giữa tác nhân và use case

<<boundary>>
55 56

14
4/27/2010

Thiếết kế
Thi kế lớp tầ
tầng giao diệ
diện Thiếết kế
Thi kế lớp tầ
tầng giao diệ
diện
„ Xác định các đối tượng ở tầng giao diện: „ Tạo mẫu giao diện
„ Xác định sự liên kết giữa các đối tượng giao „ Tạo các đối tượng giao diện (như là các
diện Lớp ở tầng giao diện button, các vùng nhập liệu,…)
„ Liên kết và gán các hành vi hoặc hành động
thích hợp tới các đối tượng giao diện này và
các sự kiện của nó
„ Sử dụng một công cụ thiết kế giao diện cụ thể
Lớp ở tầng nghiệp vụ

Lớp ở tầng truy cập dữ liệu

57 58

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
„ Xác định các lớp „ Xác định các lớp đối tượng giao diện điều
KháchHàngGD Biểu diễn giao diện tương tác giữa khách hàng và use case khiển: toobar, menu, form điều khiển,…
Đăng nhập, Đăng nhập không hợp lệ
„ Ví dụ:
GiaoDịchGD Biểu diễn tương tác giữa khách hàng và use case Rút tiền, MáyATM_GD Đối tượng giao diện điều khiển chính hoạt động
Gửi tiền giao
i diện
diệ của
ủ máyá ATM

TàiKhoảnGD Biểu diễn tương tác giữa khách hàng và use case Truy vấn „ Xác định liên kết tới các lớp giao diện đang
thông tin tài khoản
tồn tại MáyATM_GD
Liên kết gọi giao diện
Liên kết gọi giao diện thực hiện Truy vấn
MáyATMKhởiĐộngGD Biểu diễn tương tác giữa nhân viên vận hành và use case thực hiện Rút tiền, Gửi thông tin tài khoản
Khởi động hệ thống tiền

GiaoDịchGD TàiKhoảnGD

59 60

15
4/27/2010

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
„ Thiết kế mẫu giao diện: „ Thiết kế mẫu giao diện:
„ KháchHàngGD „ MáyATM_GD

61 62

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
„ Thiết kế mẫu giao diện: „ Thiết kế mẫu giao diện:
„ GiaoDịchGD (Rút tiền) „ GiaoDịchGD (Gửi tiền)

63 64

16
4/27/2010

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
„ Thiết kế mẫu giao diện: „ Thiết kế mẫu giao diện:
„ TàiKhoảnGD „ MáyATMKhởiĐộngGD

65 66

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống
ATM
„ Xác định method „ Xác định method
„ Bằng cách xác định các sự kiện của hệ thống „ Use case Đăng nhập
phải đáp ứng tương ứng tới các thao tác
Sự kiện Hành đồng
người dùng trên giao diện và các hành động
Đưa thẻ vào máy hiển thị giao diện đăng nhập (KháchHàngGD)
khi sự
ự kiện
ệ xảy
y ra
Khách hàng chọn đồng ý -kiểm tra mật khẩu (KháchHàng)
„ Sự kiện ÅÆ hành động hệ thống phải đáp -hiển thị giao diện điều khiển chính (MáyATM_GD)
ứng -thông báo nếu đăng nhập không thành công (KháchHàngGD)
-đóng giao diện đăng nhập (KháchHàngGD)
Khách hàng chọn huỷ bỏ đóng giao diện đăng nhập (KháchHàngGD)

KháchHàngGD::+hiểnThị()
KháchHàngGD::--thôngBáo(thôngBáo:String)
KháchHàngGD::
KháchHàngGD::+đóng()
67
MáyATM_GD::+hiểnThị() 68

17
4/27/2010

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
„ Xác định method : KháchHàng
: KháchHàngGD : KháchHàng : NgầnHàngDB : MáyATM_GD

„ Use case Đăng Đưa thẻ vào


hiểnThị()
„ MáyATM_GD
nhập – sơ đồ (1) (2) (3) (4)
Chọn đồng ý
tuần tự kiểmTraMậtKhẩu()
Xử lý của use case
vKháchHàng = lấy_KháchHàng()
Đăng nhập không hợp

đọcKháchHàng()
lệ Sự kiện Hành đồng
Kết quả kiểm tra Chọn nút rút tiền (1) hiển thị giao diện rút tiền (GiaoDịchGD)
thôngBáo() Chọn nút gửi tiền (2) hiển thị giao diện gửi tiền (GiaoDịchGD)
Mật khẩu không hợp lệ

hiểnThị()
Chọn nút xem tài khoản hiển thị giao diện xem thông tin tài khoản
đóng() (3) (TàiKhoảnGD)
Chọn nút thoát (4) đóng giao diện chính (MáyATM_GD)
Chọn huỷ bỏ
đóng()

GiaoDịchGD::+hiểnThị(loạiGD:String)
TàiKhoản::+hiểnThị()
69
MáyATM_GD::+đóng() 70

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM

„ MáyATM_GD „ Use case Rút tiền (1) (2)


: MáyATM_GD : GiaoDịchGD : TàiKhoảnGD
: KháchHàng

Chọn nút rút tiền


hiểnThị("Rút")
Sự kiện Hành đồng

Chọn nút gửi


Khách hàng chọn rút tiền (1) -thực hiện rút tiền (TàiKhoản)
hiểnThị("Gửi")
-thông báo kết quả (GiaoDichGD)
-in hoá đơn rút (GiaoDịchGD)
Chọn xem thông tin tài khoản
hiểnThị() -đóng giao diện rút tiền (GiaoDịchGD)
Khách hàng chọn đóng (2) Đóng giao diện rút tiền (GiaoDịchGD)
GiaoDịchGD::+hiểnThị(loạiGD:String) Chọn nút đóng
TàiKhoản::+hiểnThị() đóng()

MáyATM_GD::+đóng() GiaoDịchGD::--thôngBáo(thôngBáo:String)
GiaoDịchGD::
GiaoDịchGD::-
GiaoDịchGD::-inHoáĐơn()
71
GiaoDịchGD::+đóng() 72

18
4/27/2010

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống ATM
thố
Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống
„ Use case
Rút tiền : KháchHàng : MáyATM_GD
Chọn nút rút tiền
: GiaoDịchGD : KháchHàng : TàiKhoản : GiaoDịch : NgânHàngDB
ATM
Use case Khởi động hệ
hiểnThị("Rút")
„
Nhập số tiền rút

Chọn đồng ý rút tiền


thống
lấy_TàiKhoản() đọcTàiKhoản()
tạoTàiKhoản()
tk:TàiKhoản
tk:TàiKhoản

rútTiền()
tạoGiaoTác() Sự kiện Hành đồng
t Mới()
tạoMới()

gánThôngTin() Khởi động máy hoàn hiện thị giao diện khởi động máy
Rút thành công
CậpNhậtGiaoDịch() thành (MáyATMKhởiĐộngGD)
Rút không thành công
thôngBáo() Nhân viên chọn đóng -cập nhật số tiền cho hiện hành cho máy (MáyATM)
Kết quả thông báo cho khách hàng
inHoáĐơn() -thực hiện kết nối tới mạng ngân hàng (NgânHàng)
Hoá đơn rút tiền
đóng() -đóng giao diện khởi động (MáyATMKhởiĐộngGD)

Chọn không rút


MáyATMKhởiĐộngGD::+hiểnThị()
đóng()
MáyATM::+cậpNhậtSốTiền(sốTiền:float)
NgânHàng::+kếtNối()
73 MáyATMKhởiĐộngGD::+đóng() 74

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
ATM „ Sử dụng lớp điều khiển
„ Use case Khởi động hệ thống
: KháchHàng : TàiKhoản : GiaoDịch : NgânHàngDB
: KháchHàng : MáyATM_GD : GiaoDịchGD : ĐiềuKhiểnGiaoDịch

Chọn nút rút tiền


hiểnThị("Rút")

: Nhân viên vận : MáyATMKhởiĐộngGD : MáyATM : NgânHàng : Ngân hàng


hành
Mở máy Nhập số tiền rút

hiểnThị()
Chọn đồng ý rút tiền
rútTiền()
lấ TàiKh ả ()
lấy_TàiKhoản()
đọcTàiKhoản()
Nhập số tiền khởi động cho máy tạoTàiKhoản()

tk:TàiKhoản

Chọn nút đóng khởiĐộngMáy()


rútTiền()
cậpNhậtSốTiền() tạoGiaoTác()

tạoMới()
kếtNối()
gánThôngTin()
Thực hiện kết nối tới mạng ngân hàng

Rút thành công cậpNhậtGiaoDịch()


đóng()
Rút không thành công
Kết quả

thôngBáo()
75 Kết quả thông báo cho khách hàng 76
inHoáĐơn()

19
4/27/2010

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ thống
thố Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống
ATM ATM
„ Xác định thuộc tính (thuộc tính tham chiếu) „ Các thuộc tính tham chiếu xác định được
„ Lớp MáyATM_GD
MáyATM_GD „ giaoDịchGD:GiaoD
giaoDịchGD:GiaoDịịchGD
„ tàiKhoảảnGD:TàiKho
tàiKho nGD:TàiKhoảảnGD
„ Lớp KháchHàngGD
GiaoDịchGD TàiKhoảnGD KháchHàngGD MáyATMKhởiĐộngGD „ kháchHàng:KháchHàng
„ Lớp GiaoDịchGD
„ tàiKhoản:TàiKho
tàiKhoản:TàiKhoảản
MáyATM
„ kháchHàng:KháchHàng
TàiKhoản KháchHàng
„ Lớp TàiKhoảnGD
„ tàiKhoản:TàiKho
tàiKhoản:TàiKhoảản
„ kháchHàng:KháchHàng
„ Lớp MáyATMKhởiĐộngGD
„ máyATM:MáyATM
77 78

Thiếết kế
Thi kế tầng giao diệ
diện hệ
hệ th
thốống ATM
ương THIẾT KẾ
KẾ USE CASE
MáyATM_GD
-giaoDịchGD:GiaoDịchGD
-tàiKhoảnGD:TàiKhoảnGD
+hiểnThị()
Tầng giao diện
Chươ
Ch ng 9 THIẾ
+đóng()

GiaoDịchGD TàiKhoảnGD KháchHàngGD MáyATMKhởiĐộngGD


-tàiKhoản:TàiKhoản
-kháchHàng:KháchHàng
-tàiKhoản:TàiKhoản
-kháchHàng:KháchHàng
-kháchHàng:KháchHàng
+hiểnThị()
-máyATM:MáyATM
+hiểnThị()
„ Kiến trúc ba tầng (tree-
(tree-layer)
+hiểnThị() +hiểnThị() +đóng() +đóng()
+đóng()
-thôngBáo()
-inHoáĐơn()
+đóng()
-hiểnThịThôngTin()
-thôngBáo()
„ Thiết kế các lớp tầng nghiệp vụ
NgânHàng
+kếtNối()
„ Thiết kế các lớp tầng truy cập dữ liệu
+đóngKếtNối()
Thiết kê các lớp tầng giao diện
KháchHàng
#tênKháchHàng:String
#họKháchHàng:String
„
#mãPIN::String MáyATM
#sốThẻ:String
#tàiKhoản:TàiKhoản
#ngHàngDB:NgânHàngDB
#địaChỉ:String
#trạngThái:String
#sốTiềnHiệnTại:float
„ Mô tả hiện thực hoá nội dung thiết kế use
+kiểmTraMậtKhẩu()
#lấy_KháchHàng()
+khởiĐộngMáy()
+đóngMáy()
#cậpNhậtSốTiền()
case
+lấy_TàiKhoản()
1 của #tắtMáy()
Tầng nghiệp vụ
1..n
GiaoDịch
TàiKhoản
#sốTàiKhoản:String #giaoDịchID:String
#loạiTàiKhoản:String #ngàyGiaoDịch:Date
có #thờiGianGiaoDịch:Time
#sốDư:float #loạiGiaoDịch:String
#giaoTác:GiaoTác 1 0..n #sốTiền:float
#kháchHàng:KháchHàng
#ngHàngDB:NgânHàngDB #sốDư:float
79 80
+gửiTiền() +tạoMới()
+ útTiề ()

20
4/27/2010

tả hi
Mô tả hiệện thự
thực hoá Use case tả hi
Mô tả hiệện thự
thực hoá Use case
„ Mô tả hiện thực hoá use case “Truy
“Truy vấn thông
tin tài khoản”
khoản”
„ Sơ đồ lớp KháchHàng
#tênKháchHàng:String

Use case <<realize>> #họKháchHàng:String


Use case cộng tác MáyATM_GD #mãPIN::String
#sốThẻ:String
-giaoDịchGD:GiaoDịchGD
-tàiKhoảnGD:TàiKhoảnGD #tàiKhoản:TàiKhoản
+hiểnThị() #ngHàngDB:NgânHàngDB

„ Các sơ đồ hiện thực hoá use case +đóng()


+kiểmTraMậtKhẩu()
#lấy_KháchHàng()

„ Sơ đồ lớp +lấy_TàiKhoản()
1 NgânHàngDB

TàiKhoản
1..n
„ Sơ đồ tuần tự #sốTàiKhoản:String +đọcKháchHàng()
#loạiTàiKhoản:String
+đọcTàiKhoản()
„ Sơ đồ hợp tác
#sốDư:float
#giaoTác:GiaoTác +cậpNhậtTàiKhoản()
TàiKhoảnGD
#kháchHàng:KháchHàng
-tàiKhoản:TàiKhoản #ngHàngDB:NgânHàngDB +cậpNhậtGiáoTác()

+hiểnThị() +gửiTiền()
+đóng() +rútTiền()
-hiểnThịThôngTin() #cậpNhậtTàiKhoản()
81 #tạoGiaoTác() 82

tả hi
Mô tả hiệện thự
thực hoá Use case tả hi
Mô tả hiệện thự
thực hoá Use case
„ Mô tả hiện thực „ Mô tả hiện thực
1: Chọn xem thông tin
hoá use case : KháchHàng
: MáyATM_GD : TàiKhoảnGD : KháchHàng : TàiKhoản : NgânHàngDB hoá use case :
MáyATM_GD
“Truy vấn Chọn xem thông tin hiểnThị()
lấy_TàiKhoản()
đọcTàiKhoản()
“Truy vấn
: KháchHàng
thông tin tài tạoTàiKhoản() thông tin tài 9: Chọn đóng giao diện xem thông tin
khoản””
khoản tk:TàiKhoản
tk:TàiKhoản
khoản””
khoản 10: đóng() 8: hiểnThịThôngTin() 2: hiểnThị()

3:
„ Sơ tuần tự „ Sơ hợp tác : TàiKhoảnGD lấy_TàiKhoản() :
hiểnThịThôngTin( KháchHàng
) 7: tk:TàiKhoản
6: tk:TàiKhoản
4: đọcTàiKhoả

Chọn đóng giao diện xem thông tin


đóng()
: TàiKhoản : NgânHàngDB

5: tạoTàiKhoản()

83 84

21

You might also like