Bài giảng Phân tích và thiết kế hướng đối tượng

Tóm tắt Bài giảng Phân tích và thiết kế hướng đối tượng: ... triù̉n trươc, use-case nao ₫ươc phat triù̉n sau. ƒ kù́t qua cua hoat ₫ửng nay la xờy dưng ₫ươc goc nhũn kiù́n truc cua mử hũnh use-case, no ₫ươc dung ₫ù̉ hoach ₫ịnh cac bươc lăp cung vơi cac yù́u tử́ khac như nghiùp vu, kinh tù́... Săp thư tư ưu tión cac us... thưc hương ₫ử́i tương Architect System Integrator Architectural Implementation Integrate System Implement a Subsystem Perform Unit Test Qui trẫnh hión thưc Component Engineer Implement a Class 92 Bộ mụn Cụng nghệ phần mềm Khoa CNTT ĐH Bỏch Khoa Tp.HCM Mửn TK. Hương ₫ử... ₫ử́i tương Slide 243 Sơ ₫ồ cấu trỳc của mẫu Proxy Chương 10 : Cỏc mẫu cấu trỳc RealSubject Request() ... ... // prolog code realSubject->Request(); // epilog code Proxy Request() ... ... realSubject Subject Request() ... Client Bộ mụn Cụng nghệ phần mềm Khoa CNTT ĐH Bỏch K...

pdf175 trang | Chia sẻ: havih72 | Lượt xem: 103 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Phân tích và thiết kế hướng đối tượng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ơ hội xử 
lý request. Liên kết các ₫ối tượng nềhận request thành dây chuyền rồi 
"pass" request xuyên qua từng ₫ối tượng xử lý ₫ến khi gặp ₫ối tượng xử 
lý cụ thể.
‰ Nhu cầu áp dụng : Trong ứng dụng cĩ trợ giúp theo ngữ cảnh thì user cĩ 
thể thu ₫ược thơng tin trợ giúp của 1 phần tử giao diện nào ₫ĩ bằng cách 
chỉ cần click vào nĩ. Ta nên tổ chức thơng tin trợ giúp theo tính tổng 
quát từ phần tử ₫ặc biệt nhất (nhỏ nhất) ₫ến tổng quát nhất (lớn nhất), 
mỗi thơng tin trợ giúp ₫ược xử lý bởi ₫ối tượng giao diện tương ứng phụ 
thuộc vào ngữ cảnh.
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 314
aPrintButton
handler
anOKButton
handler
aSavingDialog
handler
aPrintDialog
handler
anApplication
handler
Thí dụ về mẫu Chain of Responsibility
Chương 11 : Các mẫu Creational
‰ Thí dụ khi ấn phải chuột vào button OK thì trình trợ giúp của OKButton 
sẽ chạy, nĩ sẽ hoặc hiển thị Help hoặc chuyển ₫iều khiển cho trình trợ 
giúp của Dialog, trình trợ giúp của Dialog cĩ thể chuyển ₫iều khiển ₫ến 
Application...
158
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 315
Thí dụ về mẫu Chain of Responsibility
Chương 11 : Các mẫu Creational
HelpHandler
HandleHelp()
handler
handler->HandleHelp();
Button
HandleHelp()
ShowHelp()
Application Widget
Dialog
if (can handle)
ShowHelp();
else 
Handler::HandleHelp();
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 316
Lược ₫ồ cấu trúc của mẫu Chain of Responsibility
Chương 11 : Các mẫu Creational
Handler
HandleRequest()
successor
ConcreteHandler1
HandleRequest()
Client
ConcreteHandler2
HandleRequest()
aClient
aHandler
aConcreteHandler
successor
aConcreteHandler
successor
159
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 317
‰ Handler (HelpHandler) :
ƒ ₫ịnh nghĩa interface của tác vụ xử lý request.
ƒ (optional) hiện thực mối liên kết ₫ến ₫ối tượng ₫i sau (successor).
‰ ConcreteHandler (PrintButton, PrintDialog) : 
ƒ xử lý request mà nĩ cĩ trách nhiệm xử lý.
ƒ cĩ thể truy xuất ₫ối tượng ₫i sau.
ƒ nếu cĩ thể xử lý ₫ược request, nĩ sẽ xử lý, nếu khơng forward request cho 
₫ối tượng ₫i sau giải quyết.
‰ Client :
ƒ khởi ₫ộng request và gởi tới 1 ConcreteHandler ₫ầu tiên trong dây chuyền.
Các phần tử tham gia
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 318
‰ Thường áp dụng mẫu Chain of Responsibility trong các trường hợp sau:
ƒ hơn 1 ₫ối tượng cĩ thể xử lý request nhưng ₫ối tượng nào sẽ xử lý thì chưa 
biết trước. Đối tượng xử lý sẽ ₫ược xác ₫ịnh ₫ộng.
ƒ bạn muốn gởi request ₫ến 1 ₫ối tượng xử lý nào ₫ĩ nhưng khơng xác ₫ịnh 
rõ ràng.
ƒ muốn xác ₫ịnh tập các ₫ối tượng xử lý 1 request nào ₫ĩ 1 cách ₫ộng.
Các ngữ cảnh nên dùng mẫu Chain of Responsibility
Chương 11 : Các mẫu Creational
160
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 319
Template Method
Chương 11 : Các mẫu Creational
‰ Mục tiêu : ₫ịnh nghĩa bộ khung giải thuật trong một tác vụ nhưng cho 
phép các class con hiện thực một số phần của tác vụ ₫ĩ.
‰ Nhu cầu áp dụng : trong trường hợp Windows cho phép người lập trình 
Hook vào hệ thống, Windows ₫ã ₫ể sẵn những entry mà người lập trình 
cĩ thể chèn thêm phần xử lý của mình. Người lập trình khơng thể thay 
thế trình tự quá trình xử lý của Windows. Phương pháp lập trình hướng 
₫ối tượng cĩ thể cung cấp hướng giải quyết những vấn ₫ề này như sau:
ƒ Một lớp ₫ịnh nghĩa quá trình xử lý bao gồm nhiều tác vụ nhỏ hơn, các tác vụ 
nhỏ hơn cĩ thể cho lớp con override chính là các ₫iểm hook.
ƒ Các lớp con thừa kế hook vào quá trình xử lý của lớp cha bằng cách 
override các ₫iểm hook. 
Hướng tiếp cận như trên là của mẫu Template Method.
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 320
Document
Save()
Open()
Close()
DoRead()
document
Application
AddDocument()
OpenDocument()
DoCreateDocument()
CanOpenDocument()
AboutToOpenDocument()
MyDocument
DoRead()
MyApplication
DoCreateDocument()
CanOpenDocument()
AboutToOpenDocument()
return new MyDocument;
docs
Ví dụ về mẫu Template Method
Chương 11 : Các mẫu Creational
161
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 321
AbstractClass
TemplateMethod()
PrimitiveOperation1()
PrimitiveOperation2()
...
PrimitiveOperation1();
...
PrimitiveOperation2();
...
ConcreteClass
PrimitiveOperation1()
PrimitiveOperation2()
Sơ ₫ồ cấu trúc mẫu Template Method
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 322
‰ AbstractClass (Application) :
ƒ ₫ịnh nghĩa các primitive operation cho lớp con override ₫ể hiện thực một 
phần của hoạt ₫ộng. Các phương thức này là ₫iểm mà lớp con cĩ thể hook 
vào code của lớp cha.
ƒ hiện thực template method, là method ₫ịnh nghĩa bộ khung của hoạt ₫ộng. 
Template method kết hợp các primitive operation ₫ể thực hiện trọn vẹn hoạt 
₫ộng.
‰ ConcreteClass (MyApplication) : hiện thực các primitive operation ₫ể 
can thiệp một phần vào quá trình thực hiện hoạt ₫ộng ở lớp cha.
Các phần tử tham gia
Chương 11 : Các mẫu Creational
162
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 323
‰ Thường sử dụng Template method khi cần:
ƒ hiện thực một phần cố ₫ịnh của hoạt ₫ộng và cho phép lớp con hiện thực 
phần cĩ thể thay ₫ổi. 
ƒ tập trung các hành vi giống nhau ở các lớp ₫ể tránh trùng lắp. 
ƒ kiểm sốt quá trình override của lớp con: chỉ cho phép override những ₫iểm 
hook qui ₫ịnh sẵn. 
Các ngữ cảnh nên dùng mẫu Template Method
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 324
Mẫu Strategy
Chương 11 : Các mẫu Creational
‰ Mục tiêu : Cung cấp một họ giải thuật và cho phép Client chọn lựa linh 
₫ộng một giải thuật cụ thể khi sử dụng.
‰ Nhu cầu áp dụng : Một số chương trình cĩ nhiều giải thuật khác nhau 
cho cùng một vấn ₫ề. Nhu cầu phát sinh: quản lý các giải thuật ₫ĩ một 
cách ₫ơn giản và cho phép client chọn một trong những giải thuật ₫ĩ ₫ể 
sử dụng một cách linh ₫ộng.
163
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 325
Ví dụ về nhu cầu ứng dụng Strategy
Chương 11 : Các mẫu Creational
Chương trình chơi game cĩ thể cĩ nhiều giải thuật tùy vào mức ₫ộ khĩ
của cuộc chơi. Khi người chơi chọn mức ₫ộ khĩ dễ chính là thao tác 
chọn giải thuật. Do ₫ĩ ₫ối tượng giải thuật phải tách biệt với code 
chương trình. Một hướng giải quyết ₫ược ₫ề nghị như sau:
ƒ Định nghĩa 1 interface chung cho các lớp thể hiện các giải thuật.
ƒ Định nghĩa các lớp concrete hiện thực interface trên, mỗi lớp concrete thể 
hiện một giải thuật.
ƒ Chương trình sử dụng ₫ối tượng kiểu interface và cho phép client thay thế 
bằng ₫ối tượng thể hiện giải thuật cụ thể khi chạy. 
→ hướng giải quyết vấn ₫ề của mẫu Strategy.
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 326
Composition
Traverse()
Repair()
compositor->Compose();
compositor
Ví dụ về mẫu Strategy
Chương 11 : Các mẫu Creational
Compositor
Compose()
ArrayCompositor
Compose()
TeXCompositor
Compose()
SimpleCompositor
Compose()
164
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 327
Context
ContextInterface()
strategy
Lược ₫ồ cấu trúc của mẫu Strategy
Chương 11 : Các mẫu Creational
Strategy
AlgorithmInterface()
ConcreteStrategyA
AlgorithmInterface()
ConcreteStrategyB
AlgorithmInterface()
ConcreteStrategyC
AlgorithmInterface()
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 328
‰ Strategy (Compositor) : ₫ịnh nghĩa interface cho tất cả các lớp thể hiện 
giải thuật. Cĩ thể nhận pointer ₫ến ₫ối tượng Context trong quá trình 
khởi tạo ₫ối tượng ₫ể truy xuất dữ liệu trong Context.
‰ ConcreteStrategy (SimpleCompositor, TeXCompositor..) : hiện thực 
interface Strategy, thể hiện một giải thuật cụ thể.
‰ Context (Composition) : 
ƒ tại thời ₫iểm dịch: chỉ sử dụng ₫ối tượng kiểu Strategy khi xác ₫ịnh giải thuật 
cho vấn ₫ề cần xử lý.
ƒ tại thời ₫iểm run-time: ₫ược cung cấp một ₫ối tượng giải thuật cụ thể thay 
thế cho ₫ối tượng Strategy.
ƒ cĩ thể cung cấp entry cho phép ₫ối tuợng kiểu Strategy truy xuất dữ liệu.
Các phần tử tham gia
Chương 11 : Các mẫu Creational
165
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 329
‰ Thường áp dụng mẫu Strategy trong các trường hợp sau:
ƒ Một lớp cĩ nhiều hành vi loại loại trừ lẫn nhau và quá trình chuyển từ hành 
vi này sang hành vi khác cần ₫ược thực hiện dễ dàng. Khi ₫ĩ mỗi hành vi sẽ 
₫ược thể hiện trong 1 lớp Concrete Strategy và lớp cĩ nhiều hành vi là lớp 
Strategy.
ƒ Giải thuật cần ₫ược che dấu cả về dữ liệu và cấu trúc ₫ối với chương trình 
Client.
‰ Một số chương trình cĩ thể áp dụng Strategy :
ƒ Compiler, OS: quá trình tối ưu hĩa 
ƒ Game: Quá trình chọn giải thuật
ƒ Các giao diện tổng quát (common dialog trong VB)
Các ngữ cảnh nên dùng mẫu Strategy
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 330
Mẫu Command
Chương 11 : Các mẫu Creational
‰ Mục tiêu : ₫ĩng gĩi request vào trong một Object, nhờ ₫ĩ cĩ thể thơng 
số hĩa chương trình nhận request và thực hiện các thao tác trên 
request: sắp xếp, log, undo
‰ Nhu cầu áp dụng : Đơi khi chúng ta cần gửi request ₫ến ₫ối tượng nhưng 
khơng biết ₫ược hành ₫ộng sẽ ₫ược thực thi cũng như những ₫ối tượng 
bị tác ₫ộng bởi request ₫ĩ. Ví dụ user interface toolkit cần xây dựng 
trước việc truyền request ₫ến menu và button nhưng chỉ cĩ ứng dụng cụ 
thể mới xác ₫ịnh ₫ược hành ₫ộng khi click vào chúng. Vấn ₫ề này cĩ thể 
₫ược giải quyết như sau:
166
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 331
Ví dụ về nhu cầu ứng dụng mẫu Command
Chương 11 : Các mẫu Creational
ƒ Xây dựng lớp trừu tượng Command, trong ₫ĩ cĩ phương thức trừu tượng 
Execute(). 
ƒ Menu hay button giữ liên kết ₫ến ₫ối tượng kiểu Command
ƒ Request ₫ược ₫ĩng gĩi trong các ₫ối tượng thừa kế Command. Các ₫ối 
tượng này override phương thức Execute() ₫ể xác ₫ịnh hành ₫ộng khi thực 
thi request. 
ƒ Khi ứng dụng cần gửi request ₫ến cho menu hay button chỉ cần gửi ₫ối 
tượng cĩ ₫ĩng gĩi request ₫ĩ ₫i. Menu hay button sẽ gọi phương thức 
Execute() trên ₫ối tượng ₫ĩ.
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 332
Ví dụ về mẫu Command
Chương 11 : Các mẫu Creational
Menu
Add(MenuItem)
Command
Execute()
command
command->Execute();
Document
Open()
Close()
Cut()
Copy()
Paste()
Application
Add(Document)
MenuItem
Clicked()
167
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 333
Ví dụ về mẫu Command
Chương 11 : Các mẫu Creational
Command
Execute()
PasteCommand
Execute()
Document
Open()
Close()
Cut()
Copy()
Paste()
document
document->Paste();
‰ Thí dụ ₫ối tượng PasteCommand hỗ trợ hoạt ₫ộng dán text từ clipboard 
vào 1 tài liệu. Phần tử nhận của PasteCommand là ₫ối tượng Document 
mà PasteCommand ₫ược cung cấp trong lúc "instantiation". tác vụ 
Execute gọi chức năng Paste trên Document nhận ₫ược.
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 334
Ví dụ về mẫu Command
Chương 11 : Các mẫu Creational
‰ Tác vụ Execute của OpenCommand thì khác : nĩ hiển thị cửa sổ yêu
cầu user nhập tên document rồi tạo ₫ối tượng Document tương ứng,
"add" document vào ứng dụng nhận rồi mở document.
Command
Execute()
OpenCommand
Execute()
AskUser()
Application
Add(Document)
application
name = AskUser();
doc = new Document(name);
application-.Add(doc);
doc->Open();
168
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 335
Ví dụ về mẫu Command
Chương 11 : Các mẫu Creational
‰ Đơi khi 1 option Menu cần thực thi 1 chuỗi các lệnh, chúng ta cĩ thể 
₫ịnh nghĩa class MacroCommand ₫ể cho phép thi hành 1 số lệnh chưa
biết trước.
Command
Execute()
MacroCommand
Execute()
commands
forall c in commands
c->Execute();
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 336
Lược ₫ồ class của mẫu Command
Chương 11 : Các mẫu Creational
Command
Execute()
receiver
receiver->Action();
InvokerClient
Receiver
Action() ConcreteCommand
Execute()
state
169
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 337
‰ Command : Khai báo các phương thức ảo (Execute()) ₫ể gọi thực thi 
hay quản lý request.
‰ ConcreteCommand (PasteCommand, OpenCommand):
ƒ Xác ₫ịnh ₫ối tượng nhận tương tác (₫ối tượng lớp Receiver). 
ƒ Override phương thức Execute trong lớp Command ₫ể ₫áp ứng request.
‰ Client (Application) : khởi tạo ₫ối tượng ConcreteCommand và truyền 
₫ối tượng nhận tương tác cho nĩ.
‰ Invoker (MenuItem): gửi request ₫ến ₫ối tượng Command.
‰ Receiver (Document, Application) : 
ƒ Đối tượng nhận tương tác trong ConcreteCommand. 
ƒ Biết cách thực hiện những hành ₫ộng ₫ể ₫áp ứng request. 
Các phần tử tham gia
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 338
Quá trình cộng tác giữa các phẩn tử
Chương 11 : Các mẫu Creational
170
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 339
‰ Thơng số hĩa ₫ối tượng bằng hành vi mà ₫ối tượng ₫ĩ thực thi. Nghĩa là 
một entry của ₫ối tượng cĩ thể thực thi nhiều hành vi khác nhau tùy 
thuộc vào thơng số (là ₫ối tượng khác) truyền cho nĩ. 
‰ Quản lý, lưu trữ và thực thi request tại những thời ₫iểm khác nhau. Vì 
trong mẫu Command, request ₫ược lưu trữ trong các ₫ối tượng nên việc 
lưu trữ và quản lý request chỉ là việc lưu trữ và quản lý các ₫ối tượng. 
‰ Hỗ trợ undo, redo các thao tác. Phương thức Execute() cĩ thể lưu trạng 
thái cũ của ₫ối tượng Receiver ₫ể phục hồi lại khi cĩ yêu cầu. 
‰ Hỗ trợ việc log lại các thay ₫ổi trên ₫ối tượng Receiver ₫ể cĩ thể thực 
hiện trở lại trong trường hợp ứng dụng chưa lưu ₫ối tượng Receiver ₫ã 
thay ₫ổi mà hệ thống lại bị hỏng. (Ví dụ MS Word cĩ chức năng 
recovery).
‰ Các hệ thống hỗ trợ transaction. Trường hợp này cĩ thể kết hợp mẫu 
Template Method.
Các ngữ cảnh nên dùng mẫu Command
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 340
Mẫu State
Chương 11 : Các mẫu Creational
‰ Mục tiêu : cho phép 1 ₫ối tượng thay ₫ổi hành vi khi trạng thái bên trong 
của nĩ thay ₫ổi. Ta cĩ cảm giác như class của ₫ối tượng bị thay ₫ổi.
‰ Nhu cầu áp dụng : trong class TCPConnection miêu tả 1 mối nối mạng, 
₫ối tượng TCPConnection cĩ thể ở 1 trong nhiều trạng thái : Established, 
Listening, Closed. Khi ₫ối tượng TCPConnection nhận request, nĩ sẽ 
₫áp ứng khác nhau tùy vào trạng thái hiện hành.
→ hướng giải quyết vấn ₫ề của mẫu State.
171
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 341
state->Open();
state
Ví dụ về mẫu State
Chương 11 : Các mẫu Creational
TCPState
Open()
Close()
Acknowledge()
TCPConnection
Open()
Close()
Acknowledge()
TCPEstablished
Open()
Close()
Acknowledge()
TCPListen
Open()
Close()
Acknowledge()
TCPClosed
Open()
Close()
Acknowledge()
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 342
Lược ₫ồ cấu trúc của mẫu State
Chương 11 : Các mẫu Creational
state->Handle();
state State
Handle()
...
Context
Request()
...
ConcreteStateA
Handle()
...
ConcreteStateB
Handle()
...
ConcreteStateC
Handle()
...
172
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 343
‰ Context (TCPConnection) :
ƒ ₫ịnh nghĩa interface cần dùng cho client.
ƒ duy trì 1 tham khảo ₫ến ₫ối tượng của 1 class con ConcreteState mà ₫ịnh 
nghĩa trạng thái hiện hành.
‰ State (TCPState) :
ƒ ₫ịnh nghĩa interface nhằm bao ₫ĩng hành vi kết hợp với trạng thái cụ thể.
ƒ duy trì 1 tham khảo ₫ến ₫ối tượng của 1 class con ConcreteState mà ₫ịnh 
nghĩa trạng thái hiện hành.
‰ ConcreteState (TCPEstablished, TCPListen, TCPClose) :
ƒ ₫ịnh nghĩa hành vi cụ thể kết hợp với trạng thái của mình.
Các phần tử tham gia
Chương 11 : Các mẫu Creational
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 344
‰ Thường áp dụng mẫu State trong các trường hợp sau:
ƒ hành vi của ₫ối tượng phụ thuộc vào trạng thái của nĩ và phải thay ₫ổi run-
time khi trạng thái thay ₫ổi.
ƒ các tác vụ cĩ những lệnh ₫iều kiện số học lớn phụ thuộc vào trạng thái ₫ối 
tượng.
Các ngữ cảnh nên dùng mẫu State
Chương 11 : Các mẫu Creational
173
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 345
Mẫu Observer
Chương 11 : Các mẫu Creational
‰ Mục tiêu : ₫ịnh nghĩa sự phụ thuộc 1-n giữa các ối tượng sao cho khi 1 
₫ối tượng thay ₫ổi trạng thái thì các ₫ội tượng phụ thuộc ₫ược cảnh báo 
hầu hiệu chỉnh tự ₫ộng (₫ể ₫ảm bảo tính nhất quán).
‰ Nhu cầu áp dụng : trong ứng dụng quản lý bảng tính, mỗi bảng tính là 1 
database nhưng nĩ ₫ược trình bày dưới nhiều dạng khác nhau như 
spreadsheet, barchart, piechart,... Mỗi khi nội dung database thay ₫ổi ta 
muốn cập nhật ₫ồng thời nhiều dạng biểu diễn nĩ.
→ hướng giải quyết vấn ₫ề của mẫu Observer.
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 346
Ví dụ về mẫu Observer
Chương 11 : Các mẫu Creational
Spreadsheet BarChart PieChart
Database request, modification
thay ₫ổi, notification
174
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 347
Lược ₫ồ cấu trúc của mẫu Observer
Chương 11 : Các mẫu Creational
forall o in observers
o->Update();
observers Observer
Update()
Subject
Attach(Observer)
Detach(Observer)
Notify()
ConcreteObserver
Update()
observerState
observerState = 
subject->GetState();
return subjectState();
ConcreteSubject
GetState()
SetState()
subjectState
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 348
‰ Subject :
ƒ biết observer của nĩ. Cĩ thể cĩ nhiều observer quan sát 1 subject.
ƒ cung cấp interface ₫ể Attach va Detach các observer vào mình.
‰ Observer :
ƒ ₫ịnh nghĩa interface hiệu chỉnh cho các ₫ối tượng mà sẽ ₫ược cảnh báo ₫ể 
hiệu chỉnh subject của mình.
‰ ConcreteSubject :
ƒ lưu trạng thái lưu ý tới các ₫ối tượng ConcreteObserver.
ƒ gởi cảnh báo tới các observer khi trạng thái của nĩ thay ₫ổi.
‰ Concretebserver :
ƒ duy trì tham khảo tới ₫ối tượng ConcreteSubject.
ƒ lưu trạng thái mà cần phải luơn nhất quán với subject của mình.
ƒ hiện thực interface hiệu chỉnh ₫ể giữ trạng thái luơn nhất quán với subject 
của mình.
Các phần tử tham gia
Chương 11 : Các mẫu Creational
175
Bộ mơn Cơng nghệ phần mềm
Khoa CNTT
ĐH Bách Khoa Tp.HCM
Mưn TK. Hương ₫ứi tương
Slide 349
‰ Thường áp dụng mẫu State trong các trường hợp sau:
ƒ khi 1 sự trừu tượng cĩ 2 khía cạnh phụ thuộc lẫn nhau. Bao ₫ĩng các khía 
cạnh này trong những ₫ối tượng ₫ộc lập giúp ta thay ₫ổi và dùng lại chúng 
₫ộc lập.
ƒ khi việc thay ₫ổi ₫ối tượng này ₫ịi hỏi phải thay ₫ổi các ₫ối tượng khác 
nhưng bạn khơng biết trước cĩ bao nhiêu ₫ối tượng cần thay ₫ổi.
ƒ khi ₫ối tượng cần cĩ khả năng cảnh báo các ₫ối tượng khác nhưng khơng
muốn chúng ghép nối chặt với nhau.
Các ngữ cảnh nên dùng mẫu Observer
Chương 11 : Các mẫu Creational

File đính kèm:

  • pdfbai_giang_phan_tich_va_thiet_ke_huong_doi_tuong.pdf