Professional Documents
Culture Documents
II.3 Xây dựng mô hình Use case đặc tả yêu cầu phần mềm hệ thống
II.3.1. Xây dựng các use case từ các hoạt động sẽ được tự động hóa
Thiết lập các actor: actor được thiết lập ở mức này là người dùng trực tiếp phần mềm hệ
thống.
Như đã đề cập trong chương 5, đối tượng con người liên quan đến hệ thống tác nghiệp
được chia thành hai loại người làm việc (business worker) và tác nhân hệ thống (business
actor). Trong việc xác định đối tượng sẽ là actor sử dụng phần mềm hệ thống tùy theo
loại hình phần mềm ứng dụng và mức độ tin học hoá của từng hệ thống nhiều hay ít mà
actor được chọn là người làm việc hoặc tác nhân hệ thống cụ thể như sau:
- Người làm việc là actor: đây là trường hợp các ứng dụng phần mềm dạng
application, đa số là ứng dụng client – server. Trường hợp này nhân viên (người
làm việc) sẽ sử dụng phần mềm để quản lý dữ liệu thông tin của hệ thống. Các đối
tượng môi trường (tác nhân hệ thống) làm việc với hệ thống thông qua trao đổi
với nhân viên. Do đó, chương trình được triển khai trong phạm vi của đơn vị nơi
170
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
làm việc của các nhân viên. Các hoạt động của đối tượng môi trường không được
quan tâm tự động hoá.
Ví dụ: khách hàng là đối tượng môi trường làm việc với hệ thống, trường hợp này
khách hàng không sử dụng trực tiếp phần mềm hệ thống mà làm việc thông qua đối
tượng nhân viên bán hàng (đối chiếu với mô hình hoạt động ta thấy lập hóa đơn là
hoạt động thuộc về nhân viên bán hàng) và nhân viên bán hàng là đối tượng sử dụng
phần mềm hệ thống để lưu và in hoá đơn. Do đó, nhân viên là một actor.
Hình 69. Sơ đồ minh hoạ sự chọn lựa actor phần mềm hoạt động Lập hoá đơn trong
Rational Rose
- Tác nhân hệ thống là actor: nếu chúng ta muốn xây dựng hệ thống tự động hoá
hoàn toàn các hoạt động tác nghiệp, ví dụ, chúng ta xây dựng một ứng dụng e-
commerce, một ứng dụng intrenet, internet trên môi trường web,… Có nghĩa là
chúng ta tự động hoá các hoạt động của các tác nhân hệ thống vốn được xem là
đối tượng bên ngoài hệ thống. Điều này cho phép hệ thống tin học hoá tất cả các
hoạt động thay vì chỉ các hoạt động của nhân viên làm việc trong hệ thống như đã
đề cập trên. Các đối tượng bên ngoài có thể sử dụng phần mềm của hệ thống để
trao đổi, làm việc với hệ thống.
Ví dụ về hệ thống Quản lý yêu cầu sách cho thấy, chúng ta muốn xây dựng một ứng
ụng web cho phép nhà khoa học có thể sử dụng để lập và gởi phiếu yêu cầu cũng như
nhận các thông báo từ hệ thống. Do đó, trong mô hình minh hoạ dưới đây cho thấy
Nhà khoa học trở thành actor. Mặt khác việc tự động hoá hoạt động đặt sách không
được tự động hoá các hoạt động của Nhà xuất bản, nhà xuất bản sẽ làm việc với hệ
thống thông qua nhân viên vì vậy Nhà xuất bản không phải là actor mà nhân viên sẽ là
actor sử dụng phần mềm hệ thống.
171
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
Danh saù ch nhaø xuaá t baû n Phieáu ñaët mua saùch Danh muï c saùch Soå ngaân saùch haø ng naê m
Hình 70. Sơ đồ minh hoạ sự chọn lựa Actor Nhà khoa học trong Rational Rose
Xác định Use case tự động hoá
Từ các hoạt động được quyết định tự động hoá chúng ta lập bảng xác định use case phần
mềm hệ thống. Chúng ta có thể gom chung nhiều hoạt động mô tả cùng một ngữ nghĩa
trong cùng một use case.
Mô hình Use case phần mềm đặc tả bán hàng NGK được xác định như sau:
Use case chức năng phần Hoạt động Actor (user)
mềm hệ thống
Lập hoá đơn Lập hoá đơn thanh toán Nhân viên bán hàng
Xử lý đặt hàng Xác định công nợ Nhân viên bán hàng
Lưu đơn hàng Nhân viên bán hàng
Xử lý thanh toán đơn hàng Lập thanh toán Nhân viên văn phòng
Giao hàng Lên lịch giao hàng Nhân viên bán hàng
Lập phiếu giao hàng Kho
Cập nhật đơn hàng đã giao Kho
Xác định tồn kho Xác định tồn kho Kho
172
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
Mô hình Use case phần mềm đặc tả đặt mua NGK được xác định như sau:
Use case chức năng phần Hoạt động Actor (user)
mềm hệ thống
Xác định tồn kho Xác định tồn kho Kho
Lập đặt mua NGK Lập đơn mua NGK Kho
Duyệt đơn hàng Kho
Giao nhận hàng NGK Lưu phiếu giao hàng và Kho
cập nhật lại đơn hàng đã
giao
Lập thanh toán Lập thanh toán cho nhà Nhân viên văn phòng
cung cấp
- Đối với các đối tượng trong hệ thống (nhân viên, kho,…), kiểm tra lại mô hình
hoạt động xem các chức năng tự động hoá có được sử dụng bởi các đối tượng này
không, nếu có thì xác định đối tượng đó chính là một actor
Nhaâ n vieâ n
Xaù c ñònh toà n kho
<<Use>>
Giao haø ng
Thuû kho
<<Use>>
Laä p ñaë t mua NGK Xaù c ñònh toà n kho
Kho
173
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
Hình 71. Các sơ đồ Use case biểu diễn chức năng phần mềm cho hoạt động mua bán
NGK
II.3.2. Xây dựng các use case khai thác và theo dõi hệ thống
Gồm các use case mô tả các khai thác dữ liệu hệ thống (các thống kê, báo cáo, tìm kiếm,
xem xét kết quả quá trình hoạt động,…). Trong quá trình xử lý thủ công, các hoạt động
xử lý thông tin này thường tốn kém rất nhiều về nhân sự và kéo dài thời gian tính toán (do
phải thu gom và tính toán số liệu). Tuy nhiên, đối với hệ thống tự động hóa, khả năng tính
toán trên máy tính được xem như là vô hạn, do đó, các xử lý thông kê báo cáo số liệu phải
được khai thác càng nhiều càng tốt vì như vậy là chúng ta đã khai thác tiềm năng và sức
mạnh của máy tính.
Đối với hệ thống cửa hàng NGK, chúng ta tinh chế use case Quản trị và theo dõi hệ thống
dựa vào các yêu cầu được thiết lập và mở rộng thêm các thống kê để giúp cho nhà quản lý
theo dõi được tình hình của đơn vị.
II.3.3. Xây dựng các use case mô tả chức năng quản trị hệ thống
Gồm các chức năng quản trị an toàn hệ thống (đăng nhập, người dùng, quyền sử dụng,
nhóm người dùng,…), tham số hệ thống, danh mục, …
Nhaâ n vieâ n
174
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
gần giống nhau để có thể tách ra thanh một use case mới, rồi tạo liên kết ‘use’ với
use case đang tồn tại. Việc tách ra các use case để thiết lập quan hệ ‘use’ cho phép
chúng ta xác định việc tái sử dụng rất sớm của quá trình phát triển hệ thống ở giai
đoạn phân tích, tạo ra một kiến trúc đẹp và tránh được sự trùng lắp công việc
trong các giai đoạn thiết kế và lập trình sau này.
Trong use case Xử lý đặt hàng của hoạt động bán hàng ta có hoạt động xác định công
nợ của khách hàng. Trong use case Xác định công nợ khách hàng của hoạt động quản
trị theo dõi cũng có chung thao tác xử lý tính công nợ, rồi sau đó in ra công nợ trên
một form xác định. Vậy ta tách ra một use case mới là Tính công nợ rồi tạo liên kết
‘use’ tới hai use case còn lại.
- Xác định lại các use case để có thể tạo liên kết ‘extends’:
o Xác định xem trong các mô hình use case có những use case nào mà hoạt
động của nó cùng thuộc chung một bản chất thì có thể tạo ra một use case
tổng quát và tạo liên kết ‘extends’ từ use case tổng quát đến các use case
đó.
Chúng ta tạo ra một use case Lập chứng từ là use case tổng quát cho các use
case: Lập hoá đơn, Xử lý đặt hàng, Xử lý thanh toán đơn hàng, Lập thanh
toán, Lập đặt mua NGK.
o Xác định xem trong một use case có những tính huống xử lý nào là một
trường hợp riêng, đặc biệt cần làm rõ thì nên tạo một use case để mô tả cho
trường hợp đó, sau đó tạo liên kết ‘extends’ từ use case mới thanh lập đến
use case tổng quát.
Trong use case In báo cáo doanh thu, chúng ta phát triển một use case mô tả
trường hợp riêng là In báo cáo doanh thu theo tháng.
<<Extend>>
Laä p chöù n g töø
Laä p hoù a ñôn
<<Extend>>
Kho
175
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
<<Use>>
Laä p ñaë t mua NGK Xaù c ñònh toà n kho
Kho
<<Extend>>
Kho
<<Extend>>
176
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
Nhaâ n vieâ n
Quaû n trò heä thoá ng Thoá ng keâ thoâ ng tin mua saù ch
Hình 73. Mô hình Use case mô tả chức năng phần mềm hệ Quản lý yêu cầu sách
Kết quả phân tích này sẽ phải được hiểu và công nhận bởi thành viên tham gia, do đó nên
tổ chức một cuộc họp để trình bày và kiểm tra lại. Như đã trình bày trong phần qui trình,
quá trình phân tích là một quá trình lặp. Nên cần chắc chắn rằng kết quả phân tích này
phải là một kết quả phải được chấp nhận cao nhất, các thay đổi sẵn sàng được thẩm định
và kiểm tra để làm giảm tối đa các thay đổi trong các giai đoạn sau.
177
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
III.2.1. Hệ luận 1: thiết kế độc lập với việc giảm tối thiểu thông tin trao đổi
(Uncouple Design with Less Information)
Sự cố kết giữa các đối tượng cao có thể làm giảm tính liên kết giữa chúng. Bởi vì chỉ một
lượng nhỏ các thông tin cần thiết trao đổi giữa các đối tượng đó.
Coupling: Ở giai đoạn thiết kế, coupling được dùng để đo mức độ liên kết giữa các đối
tượng hoặc giữa thành phần phần mềm. Coupling là một mối kết hợp nhị phân, và là một
khái niệm quan trọng khi đánh giá một thiết kế bởi vì nó giúp chúng ta tập trung đúng vào
vấn đề quan trọng của thiết kế. Ví dụ, một thành phần trong hệ thống thay đổi sẽ có một
tác động tối thiểu đến những thành phần khác. Coupling trong các đối tượng càng mạnh
càng mạnh thì hệ thống càng phức tạp. Mức độ của coupling có thể được đánh giá trên:
- Mức độ phức tạp của kết nối
- Kết nối tham chiếu đến chính bản thân đối tượng hoặc bên ngoài đối tượng
- Những gì gởi đi hoặc nhận được
Mức độ coupling giữa hai thành phần được xác định bằng mức độ phức tạp của thông tin
trao đổi giữa chúng. Coupling càng gia tăng thì càng làm gia tăng độ phức tạp hoặc mơ
hồ, tối nghĩa của giao diện. Coupling càng giảm khi sự kết nối được thiết lập ở thành
phần giao diện thay vì ở thành phần bên trong. Trong thiết kế hướng đối tượng, có hai
loại coupling là coupling tương tác và coupling thừa kế:
Coupling tương tác: thể hiện qua số lượng và độ phức tạp của các thông điệp giữa những
thành phần, sự tương tác càng ít thì càng được ưu tiên. Coupling cũng áp dụng tới mức độ
phức tạp của thông điệp. Một chỉ dẫn chung là giữ các thông điệp càng đơn giản và càng
ít xảy ra thì càng tốt. Tổng quát, nếu một kết nối thông điệp gồm ba tham số trở lên thì
kiểm tra xem có thể làm đơn giản hoá nó nữa được không. Một đối tượng được kết nối
với nhiều thông điệp phức tạp thì gọi là tightly coupled, có nghĩa là bất kỳ có sự thay đổi
nào có thể tác động đến sự thay đổi trong những cái khác.
178
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
A B D
integer Operation_A()
Operation_A không quan tâm đến nội
{ dung thực hiện của Operation_B mà
chỉ quan tâm đến dữ liệu gởi đến và
int x,y;
nhận từ Operation_B
Class_B cB;
….
y = cB.Operation_B(x);
…
}
Stamp coupling: trong stamp coupling, dữ liệu trao đổi là một phần của cấu trúc hoặc toàn
bộ cấu trúc. Loại coupling này được đánh giá là thấp hơn so với data coupling bởi vì sự
trao đổi là một cấu trúc thay vì một yếu tố đơn nên làm cho nó phức tạp hơn. Một thay
đổi trong cấu trúc sẽ ảnh hưởng đến tất cả đối tượng sử dụng nó. Stamp coupling làm cho
các thành phần phụ thuộc nhiều hơn đến thành phần khác, bởi vì, để tránh những lỗi có
thể xảy ra, những thành phần sẽ phải có hiểu biết về hoạt động bên trong của thành phần
khác sử dụng cùng cấu trúc dữ liệu.
Class_A
Class_B
+ Attribute_A1 : Integer
+ Attribute_A2 : Integer
+ Operation_A () : Integer + Operation_B (Class_A s_Para) : Integer
179
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
integer Operation_A()
{ Operation_B nhận dữ liệu là cấu trúc
Class_A để thực hiện. Do đó, nội dung
int x,y; của nó sẽ sử dụng dữ liệu từng thành
Class_B cB; phần của cấu trúc Class_A. Một sử
thay đổi trong cấu trúc này sẽ ảnh
…. hưởng đến Operation_B
y = cB.Operation_B(this);
…
}
Control coupling: khi một thành phần thành phần gởi một thông tin điều khiển tới một
thành phần khác, hai thành phần này được gọi là có control coupling. Thông tin điều
khiển có thể xuất hiện dưới dạng cờ hiệu thông báo cho thành phần khác hành động sẽ
thực hiện. Khi thông tin điều khiển được gởi đi, thành phần gởi phải biết về hoạt động
bên trong của thành phần nhận, do đó nó tạo ra một sự phụ thuộc giữa các thành phần.
Common coupling: khi hai thành phần tham khảo đến cùng một vùng dữ liệu chung toàn
cục thì có liên kết common coupling. Liên kết này cũng nên tránh bởi vì nó tạo ra một cơ
hội lớn về lỗi trên toàn bộ hệ thống. Một lỗi phát sinh trong bất kỳ một thành phần nào sử
dụng dữ liệu toàn cục này có thể gây ra lỗi trong bất kỳ thành phần khác sử dụng cùng dữ
liệu này.
Content coupling: loại coupling được xếp thấp nhất là content coupling. Bởi vì loại này
giới thiệu một thành phần tham khảo trực tiếp hoạt động bên trong của một thành phần
khác. Ví dụ, một method có thể thay đổi dữ liệu trong một method khác hoặc thay đổi
một đoạn code trong method khác. Hiện nay, các ngôn ngữ lập trình (đặc biệt là ngôn ngữ
lập trình hướng đối tượng) đều không cho phép tạo ra content coupling.
Tên coupling Xếp hạng phụ thuộc
Data coupling Rất thấp
Stamp coupling Thấp
Control coupling Trung bình
Common coupling Cao
Content coupling Rất cao
Coupling thừa kế: là coupling giữa class tổng quát và class chuyên biệt. Một class
chuyên biệt liên kết với class tổng quát của nó thông qua thuộc tính và method. Không
như coupling tương tác, coupling thừa kế càng cao thì càng ưu tiên. Tuy nhiên, để đạt
được mức độ cao coupling thừa kế trong một hệ thống. Mỗi class chuyên biệt không nên
thừa kế những method và thuộc tính không liên quan hoặc không cần thiết. Ví dụ, nếu
một class chuyên biệt chồng lên hầu hết các method hoặc không sử dụng nó từ class tổng
quát, điều này cho thấy coupling thừa kế là thấp và lúc đó thiết kế viên phải thay đổi lại
cách xây dựng tổng quát hoá và chuyên biệt hoá này.
Cohesion
Trong khi coupling đề cập đến mức độ tương tác giữa các đối tượng thành phần thì
cohesion lại đề cập đến sự tương tác bên trong một đối tượng thành phần. Cohesion phản
180
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
ánh tính “đơn mục đích” của một đối tượng. Tất cả các lệnh, chức năng trong một thành
phần được định nghĩa gắn liền tới một nhiệm vụ. Trong hệ thống nếu các thành phần đạt
được mức độ cohesion càng cao thì mức độ liên kết coupling giữa các thành phần càng
yếu, do đó để đạt được đỉnh cao của cohesion thì chúng ta phải làm giảm mức độ
coupling. Cohesion cũng trợ giúp trong thiết kế class bằng việc giúp xác định mục đích và
mục tiêu của class một cách rõ ràng.
Method cohesion: một method chỉ nên đảm nhận một chức năng hoặc một nhiệm vụ.
Thông thường cách đặt tên của method cũng phải ngụ ý nói lên chức năng liên quan của
nó. Ví dụ: Chon_nha_cung_cap(), Tinh_ton(),…
Class cohesion: các method và các thuộc tính trong một class phải có mức độ cohesion
cao, nghĩa là phải được dùng bởi các method bên trong class hoặc chính là method phục
vụ cho mục đích của class.
Cohesion thừa kế: các class chuyên biệt và class tổng quát phải cùng mô tả về một loại
đối tượng của hệ thống. Các thuộc tính và method của class tổng quát phải được thừa
hưởng tối đa trong class chuyên biệt theo cách hoặc là phục vụ cho method của class
chuyên biệt hoặc trở thành một method của class chuyên biệt.
III.2.3. Hệ luận 3: nhiều class đơn. Tạo các class đơn để cho phép tái sử dụng
Kết quả thiết kế hệ thống tốt chính là tạo ra một tập lớn các class đơn giản hơn là một tập
nhỏ class phức tạp. Các class càng ít chuyên biệt thì các vấn đề trong tương lai càng khó
giải quyết hơn thông qua việc kết nối các class đang có và tái sử dụng chúng.
Thiết kế hướng đối tượng luôn đề xuất việc sản sinh thư viện các thành phần tái sử dụng
và nhấn mạnh trên tính bao bọc (encapsulation), đơn vị hoá (modularization), và tính đa
hình (polymorphism) để tái sử dụng khi xây dụng một đối tượng hơn là làm mới.
181
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
dần nó từ việc xây dựng các hệ thống và luôn luôn xem xét việc thừa kế nó khi xây dựng
một hệ thống mới.
182
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
IV.2 Framework
facade
Các class: trong một hệ mẫu façace có ít nhất bốn class: một cho đối tượng truy cập
(client), façade, các class bên dưới façade (ít nhất là 2). Một class façade nên hạn chế
183
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
cách chứa đựng đoạn mã thực sự mà chỉ cần chứa đựng các lời gọi đến các class mức thấp
hơn.
Facade
Thuận lợi/ khó khăn: thuận lợi chính của mẫu façade là giúp chúng ta quản lý tốt hơn sự
tương tác giữa các thành phần, class. Một nhược điểm của mẫu này là chúng ta có thể
đánh mất một vài tính năng chứa đựng trong các class mức thấp hơn. Tuy nhiên điều này
cũng còn phụ thuộc vào cách chúng ta thiết kế một façade.
Ví dụ: giả sử rằng chúng ta muốn xây dựng một hệ thống cho phép phòng quản trị thiết bị
phục vụ cho việc giảng dạy của một trường đại học bao gồm một số hữu hạn các đối
tượng như là: phòng học, máy chiếu, màn chiếu, máy tính, micro,…. Và cho phép giáo
viên có thể giao tiếp với hệ thống để sử dụng các dịch vụ mà hệ thống này cung cấp nhằm
phục vụ cho công việc giảng dạy của mình. Ví dụ một dịch vụ là “đăng ký lịch dạy” và
giáo viên sẽ phải tương tác với những đối tượng như phòng học, máy chiếu, màn chiếu,
máy tính, micro,… để thay đổi trạng thái những đối tượng này liên quan đến một ngày
giờ đăng ký lịch dạy của mình.
Giaùo vieân
Hình 75. Mức độ tương tác phức tạp giữa giáo viên và các đối tượng hệ thống
184
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
Giaùo vieân
Facade
Hình 76. Sử dụng đối tượng Façade làm đơn giản mức độ tương tác
Sơ đồ đầu tiên cho thấy từ phía đối tượng giáo viên phải tương tác với nhiều đối tượng
khác nhau trong hệ thống để thực hiện một dịch vụ, do vậy, nó tạo ra mức độ coupling
phức tạp giữa đối tượng giáo viên và các đối tượng trong hệ thống. Trong khi đó, trong sơ
đồ thứ hai chúng ta đưa vào một lớp đối tượng Façade đối tượng này làm cầu nối giữa đối
tượng giáo viên và các đối tượng trong hệ thống, và từ đây đối tượng giáo viên chỉ cần
thông qua đối tượng Façade để thực hiện dịch vụ hệ thống, đối tượng Façade sẽ tương tác
với các đối tượng hệ thống, và như trên sơ đồ chúng ta thấy, mức độ coupling giữa giáo
viên và các đối tượng hệ thống rất đơn giản.
185
Phần 3 – Thiết kế Chương 7 - Thiết kế hệ thống
Trong mẫu singleton, một phương thức xác định thể hiện được thêm vào phần định nghĩa
lớp. Phương thức này trả về một tham chiếu cho một thể hiện đơn của lớp hoặc sẽ tạo ra
thể hiện đơn nếu nó chưa được tạo trước đó. Để đảm bảo cho class chỉ có một thể hiện,
một cách chung để làm điều này là che dấu phương thức tạo ra thể hiện của class (đó là,
hoặc nó là một hàm static hoặc là một method khai báo private).
Ví dụ: giả sử của hàng phát triển thành công ty và có nhiều nhiều chi nhánh bán hàng tại
nhiều địa điểm trong thành phố.
Thuận lợi:
186