2CNPM/NN
Thiết kế phần mềm
1. Thiết kế?2. Thiết kế mô hình hệ thống.3. Thiết kế điều khiển.4. Thiết kế Module.5. Các mẫu thiết kế.
5CNPM/NN
Thiết kế là gì?
Thiết kế tạo ra một biểu diễn hay mô hình của phần mềm hướng thực thi
Mô hình thiết kế cung cấp các thông tin về kiến trúc (architecture), Giao tiếp (interfaces), thành phần (components) và dữ liệu (data)
7CNPM/NN
Hướng dẫn thiết kế Một thiết kế phải đưa ra một kiến trúc mà
Dùng mẫu (pattern) hay kiểu (style) kiến trúc được thừa nhận
Gồm những thành phần (component) có đặc trưng thiết kế tốt
Có thể thi hành theo cách tiến hóa Thiết kế phải có tính module, thiết kế phải đưa ra những
thành phần mà độc lập chức năng Thiết kế được đưa ra từ việc dùng phương pháp lặp
8CNPM/NN
Kiến trúc (Architecture)? Kiến trúc phần mềm là một sự tổ chức có tính căn bản
của một hệ thống chứa những thành phần, những mối quan hệ lẫn nhau của các thành phần này và của các thành phần này với môi trường, nó chứa đựng những nguyên lý định hướng cho việc thiết kế và tiến hóa kiến trúc
Kiến trúc có tính tổng thể Kiến trúc cho ta một hình ảnh về hệ thống phần mềm Module và hệ thống con (sub-systems):
Module là một thành phần hệ thống mà cung cấp dịch vụ cho những thành phần khác nhưng không được xem là một hệ thống riêng biệt
Một hệ thống con hoạt động có tính độc lập cao
9CNPM/NN
"four bedrooms, three baths,lots of glass ..."
customer requirements
architectural designKiến trúc
10
Target system: Security function
Superordinate systems
Actors
Ví dụ : ACD(Architectural Context Diagram) của SafeHome
uses
uses
Peers
Subordinate systems
Depends on
Used by
Homeowner
Control panelSurveillancesystem
Sensors Sensors
Safehomeproduct
Internet-basedsystem
12CNPM/NN
Thiết kế dữ liệu ở mức kiến trúc
Thiết kế một hay nhiều cơ sở dữ liệu để hỗ trợ kiến trúc ứng dụng
Thiết kế cách thức khai thác nhiều CSDL Duyệt các CSDL Kho dữ liệu (data warehouse) có thể truy cập tới nhiều CSDL
Thiết kế dữ liệu ở mức thành phần Xây dựng các cấu trúc dữ liệu
2. Thiết kế mô hình hệ thống
Trong quá trình thiết kế kiến trúc hệ thống, hoạt động đầutiên phải thực hiện là xây dựng mô hình tổ chức hệ thống.
Phương pháp tổ chức hệ thống thường được sử dụng: Mô hình Kho dữ liệu dùng chung. Kiến trúc gọi trả về. Mô hình Phân lớp. Mô hình client – server.
13CNPM/NN
15CNPM/NN
Kho dữ liệu
Hệ thống con phải biến đổi dữ liệu có thể theo 2 cách: Chia sẻ dữ liệu trung tâm Dùng CSDL riêng và truyền dữ liệu cho hệ thống khác
Khi cần chia sẻ dữ liệu lớn thì thường dùng kho dữ liệu trung tâm
16CNPM/NN
Thuận lợi – bất lợi Thuận lợi
Hiệu quả trong chia sẻ Hệ thống con không quan tâm tới việc xử lý dữ liệu của
trung tâm dữ liệu (an toàn, backup…) Dùng chung mô hình chia sẻ
Bất lợi Tất cả phải theo mô hình dữ liệu của kho Tiến hóa dữ liệu thì khó và đắt Không dùng được chính sách quản lý riêng Khó phân bố một cách hiệu quả
17CNPM/NN
Kiến trúc gọi trả về
Có 2 loại: Kiến trúc chương trình chính /chương trình con (main
program /subprogram) Kiến trúc gọi thủ tục từ xa (remote procedure call
architecture): các thành phần được phân bổ trên nhiều máy tính
18CNPM/NN
Chương trình chính /chương trình con
Main programMain program
ControllersubprogramController
subprogramController
subprogramController
subprogramController
subprogramController
subprogram
ApplicationsubprogramApplicationsubprogram
ApplicationsubprogramApplicationsubprogram
ApplicationsubprogramApplicationsubprogram
ApplicationsubprogramApplicationsubprogram
ApplicationsubprogramApplicationsubprogram
ApplicationsubprogramApplicationsubprogram
ApplicationsubprogramApplicationsubprogram
19CNPM/NN
Mô hình phân lớp
Mô hình phân lớp tổ chức hệ thống thành nhiều lớp và mỗi lớp cung cấp một tập các dịch vụ. Hệ thống này tương đối phức tạp.
20CNPM/NN
Mô hình phân lớp
Tổ chức hệ thống thành một tập những tầng (hay máy trừu tượng), những tầng sẽ cung cấp một tập những dịch vụ
Các hệ thống con tương tác với nhau qua tầng giao tiếp Khi một tầng thay đổi chỉ những tầng liền kề mới bị ảnh
hưởng Việc cấu trúc hệ thống theo mô hình này rất khó
21CNPM/NN
Mô hình client - server Mô hình kiến trúc client-server bao gồm một tập hợp các
server cung cấp dịch vụ và các client truy nhập và sử dụng các dịch vụ đó.
Các thành phần chính của mô hình này bao gồm: Tập hợp các server sẽ cung cấp những dịch vụ cụ thể như:
in ấn, quản lý dữ liệu… Tập hợp các client truy nhập đến server để yêu cầu cung
cấp dịch vụ. Hệ thống mạng cho phép client truy cập tới dịch vụ mà
server cung cấp.
23CNPM/NN
Thuận lợi - bất tiện Thuận lợi
Dễ phân bố dữ liệu Hiệu quả, chi phí thấp Dễ mở rộng (tăng số server) và cập nhật
Bất tiện Tổng quát hóa của kiến trúc Client /Server Client cũng có thể đóng vai trò server và ngược lại
24CNPM/NN
3. Thiết kế điều khiển
Có 2 loại điều khiển: Điều khiển tập trung: một hệ thống con chính chịu
trách nhiệm kiểm soát, khởi tạo hoặc dừng các hệ thống con khác. Mô hình gọi - trả lời (call-return) Mô hình quản lý
Điều khiển hướng sự kiện: mỗi hệ thống đáp ứng với các sự kiện xảy ra từ các hệ thống con khác hoặc từ môi trường của hệ thống. Môhình lan truyền (Broadcast) Mô hình hướng ngắt (Interrupt-driven)
25CNPM/NN
Mô hình gọi - trả lời (call-return) Gồm các thủ tục con được sắp xếp phân cấp, thủ tục điều
khiển nằm ở đỉnh của cấu trúc phân cấp và di chuyển dần xuống dưới. Mô hình này thường được áp dụng cho các hệ thống tuần tự (không là mô hình cấu trúc)
26CNPM/NN
Mô hình quản lý
Thường áp dụng cho các hệ thống xử lý đồng thời. Một thành phần hệ thống điều khiển việc khởi tạo, ngừng, hoặc cộng tác với các hệ thống khác.
27CNPM/NN
Mô hình lan truyền (Broadcast) Trong mô hình lan truyền, sự kiện được lan truyền tới tất cả
các hệ thống con. Hệ thống con được thiết kế để điều khiển sự kiện này sẽ đáp ứng sự kiện.
Mô hình này có hiệu quả đối với các hệ thống con phân bố trên nhiều máy tính khác nhau trong cùng một mạng.
Phát triển tương đối đơn giản Không biết sự kiện có được xử lý không và khi nào được xử
lý Hai phân hệ cùng sinh sự kiện có thể gây xung đột
28CNPM/NN
Mô hình hướng ngắt (Interrupt-driven) Mô hình hướng ngắt được sử dụng trong các hệ thống thời
gian thực (Có thể kết hợp với mô hình quản lý tập trung) Bộ xử lý có thể khởi động hoặc dừng những quá trình khác để
đáp ứng sự kiện Mô hình này cho phép đáp ứng rất nhanh, nhưng lập trình khá
phức tạp và phụ thuộc phần cứng
29CNPM/NN
4. Thiết kế Module
What is the "right" number of modules for a specific software design?
optimal numberof modules
cost ofsoftware
number of modules
moduleintegration
cost
module development cost
32CNPM/NN
Liên kết và phụ thuộc
UncoupledLoosely Couple: Some Dependencies
Highly Couple: Many Dependencies
33CNPM/NN
Liên kết đo lường mức độ kết nối với nhau giữa các thành phần của hệ thống
Liên kết lỏng có nghĩa là khi một thành phần thay đổi Khả năng ảnh hưởng của nó đến các thành phần khác là thấp
Việc trao đổi thông tin điều khiển và những biến chia sẻ dẫn tới liên kết chặt
Liên kết lỏng có thể đạt được bằng cách truyền thông giữa các thành phần bằng cách truyền tham số hay thông điệp message hay tham số, hay là ‘state decentralisation’ (như trong đối tượng)
Liên kết
36
Liên kết dữ liệu
Liên kết giữa các thành phần là dữ liệu nguyên tố hoặc phức hợp, truyền tham trị
Ví dụ:
Class_A
+ Operation_A () : Integer
Class_B
+ Operation_B (Integer Para_1) : Integer
integer Operation_A(){int x,y;Class_B cB;
….y = cB.Operation_B(x);…}
37
Liên kết tem (stamp)
Liên kết giữa hai thành phần là một phần của cấu trúc hoặc toàn bộ cấu trúc
Ví dụ:
integer Operation_A(){int x,y;Class_B cB; Class_C c;….y = cB.Operation_B(c);…}
38
Liên kết điều khiển
Một thành phần gởi các yếu tố điều khiển tới một thành phần khác thì hai thành phần này có control coupling. io (command, device buffer, length); where command is 0,1,2 for read, write open; better
to use read (device buffer, length);
+ A(){int x = 1;sub(x, dk)…}
+ sub(x, dk){
}
dk=1 =2
39
Liên kết chung và Liên kết nội dung
Liên kết chung: hai thành phần cùng tham chiếu đến một cấu trúc toàn cục (hoặc biến toàn cục)
Liên kết nội dung: nếu một thành phần tham khảo trực tiếp đến nội dung của một thành phần khác (biến đổi mã (LISP, Assembler) , con trỏ hay truyền tham chiếu)
40
Mức độ liên kết
Tên coupling Xếp hạng phụ thuộc
Data couplingStamp couplingControl couplingCommon couplingContent coupling
Rất thấpThấpTrung bìnhCaoRất cao
41CNPM/NN
Cohesion (kết dính)
Functional
Sequential
Communicational
Procedural
Temporal
Logical
Coincidental
Chức năng
Trình tự
Thông tin
Thủ tục
Thời gian
Logic
Ngẫu nhiên
42CNPM/NN
Mức kết dính…
Kết dính ngẫu nhiên (Coincidental cohesion -weak)
Kết hợp logic (Logical association - weak): Những thành phần mà thực thi những chức năng tương tự thì được gom lại
output text to screen
output line to printer
output record to file
43CNPM/NN
…Mức kết dính…
Kết dính thời gian (Temporal cohesion (weak)) Nhóm các thành phần được kích hoạt ở thời gian tương tự
clear screen
open file
Initialise total
solution is to make initialisation module all other specialised modules:call init_terminal
call init_files
call init_calculations
44CNPM/NN
…Mức kết dính…
Kết dính thủ tục (Procedural cohesion (weak)) Các phần bên trong một thành phần thể hiện một trình tự điều
khiển duy nhất (a single control sequence) Kết dính truyền thông (Communicational cohesion (medium))
Tất cả các phần trong một thành phần hoạt động trên cùng dữ liệu tương tự (display and log temperature)
Kết dính trình tự (Sequential cohesion (medium)) output của một phần trong thành phần là input của một phần
khác
45CNPM/NN
...Mức kết dính
Kết dính chức năng (Functional cohesion (strong)) Loại kết dính tối ưu Mỗi phần của một thành phần là cần thiết cho việc thực thi
một chức năng duy nhất Thực hiện một hoạt động được xác định rõ duy nhất trên một
đối tượng dữ liệu (vd: calculate average)
46CNPM/NN
Kết dính Chức năng: liên quan tới thực
hiện chức năng duy nhất Trình tự: output của hoạt động
này là input của thành phần kế tiếp
Thông tin: những hoạt động trên cùng dữ liệu tương tự thì thuộc về một module
Thủ tục: Các phần bên trong một thành phần thể hiện một trình tự điều khiển duy nhất
Thời gian: Các phần của module cùng hoạt động ở thời gian tương tự
Logic: Những phần của module tất cả hướng về phía thực hiện một tập những hoạt động tương tự
Ngẫu nhiên: Những phần của module không có quan hệ thiết yếu
Functional
Sequential
Communicational
Procedural
Temporal
Logical
Coincidental
5. Các mẫu thiết kế
Creational Pattern (Mẫu kiến tạo): 5 mẫu Abstractional Factory Method Pattern. Builder pattern. Factory Method pattern. Prototype Pattern. Singleton Pattern.
Structure Pattern: 7 mẫu (có mẫu Composite, adapter). Behavioral Pattern: 10 mẫu (có mẫu Observer).
47CNPM/NN
Lớp?
external entities
things
occurrences roles
organizational units
places
structures
class name
attributes:
operations:
Mẫu thiết kế Singleton
Cho phép có một thể hiện của lớp. Vd: Find Dialog, Unikey, một đối tượng toàn cục lưu giữ kết nối CSDL…
UML/NN52
Mã Singleton
class Singleston{
private static Singleston instance;protect Singleston () {}public static Singleston Instance(){
if (instance==null)instance = new Singleston ();
return instance;}
}
53
54 CNPM/NN
Mẫu thiết kế Observer
Bài toán thực tế: Một đối tượng thời gian để đếm giờ được thể hiện dưới nhiều hình thức như đồng hồ số, đồng hồ kim… Ta có thể Dễ dàng thêm, bớt nhiều đối tượng thể hiện Khi tay đổi đối tượng thời gian thì tất cả các thể hiện của thời
gian đều thay đổi theo
Mô hình Observer
A=10%B=40%C=30%D=20%
Application data
A
BC
D
A DCB
Relative Percentages
Y 10 40 30 20
X 15 35 35 15
Z 10 40 30 20
A B C D
Change notification
Requests, modifications
56
Ví dụ
Subject
Detach(Observer)Notify()
Attach(Observer)
Observer
Update()
ClockTimerDigitalClock
Update()
ClockTimer *sub;
*
AnalogClock
Update()
ClockTimer *sub;
Draw() Draw()
ADAPTER
Tái sử dụng các lớp nhưng giao diện (interface) không tương thích
Có những vấn đề về không tương thích tiềm tàng
Biểu đồ lớp
PayProcessorprintPay(WeeklyEmployee e)
WeeklyEmployeegetPay()getName()
MonthlyAdapterMonthlyEmployee : megetPay()getName()
MonthlyEmployee
getMonthlyPay()getEmployeeName()
Client - unalteredTarget-unaltered.
Adapteeunaltered
Adaptor
Contains an adaptee objectProvides own implementation of target’s methods – which call adaptee’s methods
MonthlyAdapterpublic class MonthlyAdapter
extends WeeklyEmployee {
private MonthlyEmployee me; //composed with adaptee
//created with adaptee objectpublic MonthlyAdapter(MonthlyEmployee memp) { me = memp; }
//own implementation of target method, //adapting to use adaptee’s insteadpublic String getName() { return me.getEmployeeName(); }
public int getPay() { return me.getMonthlyPay(); }
}
Testclass Test { public static void main(String arg[]){
WeeklyEmployee we = new WeeklyEmployee (“tim”, 150);
PayProcessor.printPay(we);MonthlyEmployee me =
new MonthlyEmployee(“jane”, 200);MonthlyAdapter ma = new MonthlyAdapter
(me);PayProcessor.printPay(ma);
}}
61
Graphic
Draw()
Text
Draw()
Line
Draw()
Rectangle
Draw()
Add(Graphic)Remove(Graphic)
GetChild(int)
Picture
Draw()Add(Graphic)Remove(Graphic)
GetChild(int)
*
Mẫu composite