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 nao ₫ươc phat triù̉n sau. kù́t qua cua hoat ₫ửng nay la xờy dưng ₫ươc goc nhũn kiù́n truc cua mử hũnh use-case, no ₫ươc dung ₫ù̉ hoach ₫ịnh cac bươc lăp cung vơi cac yù́u tử́ khac như nghiùp vu, kinh tù́... Săp thư tư ưu tión cac 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...
ơ 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:
- bai_giang_phan_tich_va_thiet_ke_huong_doi_tuong.pdf