Microsoft PowerPoint tkhdt ppt 1 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 1 Trương Đai hoc Bach Khoa Tp Hö̀ Chñ Minh Khoa Cöng Nghï Thöng Tin Mön h[.]
Trương Đai hoc Bach Khoa Tp Hừ Chđ Minh Khoa Cưng Nghï Thưng Tin Mưn hoc PHÊN TĐCH & THIÏT KÏ HƯƠNG ĐƯ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 Tai liïu tham khao chñnh [1] The Unified Software Development Process, Ivar Jacabson, Grady Booch, James Rumbaugh, Addison-Wesley, 1999 [2] Software Engineering - A practitioner's approach, R.S Pressman, McGraw-Hill, 1997 [3] Design Patterns, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Addison-Wesley, 1998 [4] OMG Unified Modeling Language Specification, version 1.3, Object Management Group (www.omg.org), 1999 [5] UML Toolkit, Hans-Erik Eriksson & Magnus Penker, 1998 [6] Object-Oriented Software Engineering, A Use-Case Driven Approach, I Jacobson, ACM Press/Addison-Wesley, 1992 [7] Object-Oriented Analysis and Design with Applications, G Booch, The Benjamin Cummings Publishing Company, 1994 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 Trương Đai hoc Bach Khoa Tp Hừ Chđ Minh Khoa Cưng Nghï Thưng Tin Chương CAC KHAI NIÏM CƠ BAN CUA MƯ HỊNH HƯƠNG ĐƯI TƯƠNG Mưn TK Hương ₫ứi tương Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Nöi dung 1.1 Tư lêp trịnh co cếu truc ₫ḯn OOP 1.2 Đứi tương, thc tñnh, tac vu 1.3 Abstract type va class 1.4 Tñnh bao ₫ong 1.5 Tñnh thưa kḯ va chḯ 'override' 1.6 Tđnh bao gưp 1.7 Thưng ₫iïp, tđnh ₫a hịnh va kiï̉m tra kiï̉u 1.8 Tđnh tửng quat hoa 1.9 Tđnh vưng bï̀n 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trịnh co cếu truc ₫ḯn OOP May tđnh sứ la thiḯt bị co thï̉ thưc hiïn sö́ hưu han cac chưc ban (têp lïnh), chḯ thưc hiïn cac lïnh la tư ₫öng tư lïnh ₫ều cho ₫ḯn lïnh cuö́i cung Danh sach cac lïnh ₫ươc thưc hiïn nay ₫ươc goi la chương trịnh bết ky cưng viïc ngoai ₫ơi nao cung co thï̉ ₫ươc chia thanh trịnh tư nhiï̀u cưng viïc nho Trịnh tư cac cöng viïc nho nay ₫ươc goi la giai thuêt giai quyḯt cöng viïc ngoai ₫ơi Mö̃i cöng viïc nho cung co thï̉ ₫ươc chia nho nưa, ⇒ cöng viïc ngoai ₫ơi la trònh tư cac lïnh may (chương trịnh) vến ₫ï̀ mếu chứt cua viïc dung may tñnh giai quyḯt vến ₫ï̀ ngoai ₫ơi la lêp trịnh Cho ₫ḯn nay, lêp trịnh la cưng viïc cua ngươi (vơi sư trơ giup ngay cang nhiï̀u cua may tđnh) cac lïnh cua chương trịnh (code) phai tham khao hoăc xư ly (truy xuết) thöng tin (dư liïu) 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trònh co cếu truc ₫ḯn OOP Dư liïu cua chương trònh co thï̉ rết nhiï̀u va ₫a dang Đï̉ truy xuết ₫ung dư liïu ta cền : - tïn nhên dang - kiï̉u dư liïu miïu ta cếu truc dư liïu - tềm vưc truy xuết miïu ta giơi han khach hang truy x́t dư liïu Chương trịnh cử ₫iï̉n = giai thuêt + dư liïu Chương trònh (function, subroutine, ) cho phep cếu truc chương trònh, sư dung lai code Chương trịnh cử ₫iï̉n co cếu truc phên cếp sau : 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trònh co cếu truc ₫ḯn OOP Chương trònh = cếu truc dư liïu + giai thuêt module (package) entry 'start' global data local data of module local data of function 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trònh co cếu truc ₫ḯn OOP Chương trịnh = têp cac ₫ứi tương tương tac ₫ö́i tương (object) entry local data of object local data of operation 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ö́i tương Slide Tö̉ng quat vï̀ hương ₫ứi tương Mư hịnh hương ₫ứi tương giơi thiïu quan ₫iï̉m lêp trịnh (va phên tđch/thiḯt kḯ) khac hăn so vơi trương phai cö̉ ₫iï̉n (co cếu truc) Băt ₫ều nhen nhom vao nhưng năm cuö́i 60s va ₫ḯn ₫ều 90s thị trơ nïn rết phử biḯn cöng nghiïp phền mï̀m Nhưng ngön ngư hương ₫ö́i tương ₫ều tiïn : Smalltalk, Eiffel Sau ₫o xuết hiïn thïm : Object Pascal, C++, Java, C#,… Hònh thanh cac phương phap phên tđch/thiḯt kḯ hương ₫ứi tương Va hiïn ta co qui trònh phat triï̉n phền mï̀m hơp nhết dưa trïn ngön ngư UML 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Đứi tương (Object) ~ Mư hịnh ₫ứi tương quan niïm chương trịnh bao gừm cac ₫ứi tương sinh sö́ng va tương tac vơi ~ Đö́i tương bao gừm : thc tđnh (dư liïu) : mang gia trị nhết ₫ịnh tai tưng thơi ₫iï̉m tac vu (operation) : thưc hiïn cöng viïc nao ₫o Implementation (class) Interface (abstract type) 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 10 Kiï̉u trưu tương (Abstract type) ~ Abstract type (type) ₫ịnh nghĩa interface sư dung ₫ö́i tương ~ Interface la têp cac entry ma bïn ngoai co thï̉ giao tiḯp vơi ₫ö́i tương ~ Dung signature ₫ï̉ ₫ịnh nghĩa mö̃i entry, Signature gö̀m : tïn method (operation) danh sach ₫ö́i sö́ hịnh thưc, mữi ₫ứi sứ ₫ươc ₫ăc ta bơi thc tđnh : tïn, type va chiï̀u chủn ₫ưng (IN, OUT, INOUT) ₫ăc ta chưc cua method (thương la chu thđch) ~ Dung abstract type (chư khưng phai class) ₫ï̉ ₫ăc ta kiï̉u cho biḯn, thc tđnh, tham sứ hịnh thưc ~ User khưng cền quan têm ₫ḯn class (hiïn thưc cu thï̉) cua ₫ứ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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 11 Class (Implementation) ~ Class ₫ịnh nghĩa chi tiḯt hiïn thưc ₫ứi tương : ₫ịnh nghĩa cac thc tđnh dư liïu : gia trị cua tết ca thc tđnh xac ₫ịnh trang thai cua ₫ö́i tương kiï̉u cua thuöc tđnh co thï̉ la type cử ₫iï̉n hay abstract type, trương hơp sau thc tđnh chưa tham khao ₫ḯn ₫ö́i tương khac coding cac method va cac internal function ~ Định nghĩa cac method tao va xoa ₫ö́i tương ~ Định nghĩa cac method constructor va destructor ~ User khöng cền quan tên ₫ḯn class cua ₫ö́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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 12 Vñ du vï̀ class Java class abstract HTMLObject { protected static final int LEFT = 0; protected static final int MIDDLE = 1; protected static final int RIGHT = 2; private int alignment = LEFT; protected Vector objects = null; HTMLObject( ){ // constructor objects = new Vector (5); } public void setAlignment( int algnmt ) { alignment = algnmt; } public int getAlignment( ) { return alignment; } public abstract String toHTML( ); // abstract operation } 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 13 Tđnh bao ₫ong (encapsulation) z Bao ₫ong : che dếu moi chi tiḯt hiïn thưc cua ₫ö́i tương, khöng cho bïn ngoai thếy va truy xuết ⇒ tđnh ₫ưc lêp cao giưa cac ₫ứi tương (hay tđnh kḯt dđnh - cohesion giưa cac ₫ứi tương rết thếp) che dếu cac thc tđnh dư liïu : nḯu cền cho phep truy x́t thc tđnh dư liïu, ta tao method get/set tương ưng ₫ï̉ giam sat viïc truy xuết va che dếu chi tiḯt hiïn thưc bïn che dếu chi tiḯt hiïn thưc cac method che dếu cac internal function va sư hiïn thưc cua chung 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 Chương 1: Cac khai niïm ban cua mö hịnh hương ₫ứi tương Slide 14 Tđnh thưa kḯ (inheritance) ~ Tđnh thưa kḯ cho phep giam nhe cưng sưc ₫ịnh nghĩa type/class : ta co thï̉ ₫ịnh nghĩa cac type/class khöng phai tư ₫ều ma băng cach kḯ thưa type/class co săn, ta ₫ịnh nghĩa thïm cac chi tiḯt mơi ma thưi (thương kha đt) Đa thưa kḯ hay ₫ơn thưa kḯ Mö́i quan hï supertype/subtype va superclass/subclass co thï̉ override cac method cua class cha, kḯt qua override co nghĩa ₫ö́i tương class Đö́i tương cua class co thï̉ ₫ong vai tro cua ₫ö́i tương cha ngươc lai thương khưng ₫ung 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 Chương 1: Cac khai niïm ban cua mö hịnh hương ₫ứi tương Slide 15 Vđ du vï̀ thưa kḯ va override - Java class Geometry { public Draw(Graphics g); protected int xPos, yPos; protected double xScale, yScale; protected COLORREF color; }; class Line extends Geometry { int xPos2, yPos2; // other attributes public Draw(Graphics g) { // cac l nh ve ₫oan thă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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 16 Tđnh bao gưp (aggregation) ₫ứi tương co thï̉ chưa nhiï̀u ₫ö́i tương khac tao nïn mö́i quan hï bao göp cach ₫ï qui giưa cac ₫ö́i tương Co goc nhịn vï̀ tđnh bao gưp : ngư nghĩa va hiïn thưc Goc nhòn ngư nghĩa Goc nhòn hiïn thưc O2 O2 O1 O1 O3 O3 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 17 Vđ du vï̀ bao gưp - C++ class Geometry { // abstract base class public: Geometry( ); ~Geometry( ); virtual void Draw( Window *pWnd ) = 0; // abstract operation protected: int xPos, yPos; double xScale, yScale; COLORREF color; }; class Group : public Geometry { public: Group( ); ~Group( ); virtual void Draw( Window *pWnd ); // override private: // pointer container Geometry **ppGeo; int geoCount; }; 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 18 Thöng ₫iïp (Message) ~ Thöng ₫iïp la phep goi tac vu ₫ḯn ₫ö́i tương tư tham khao ~ Thöng ₫iïp bao gö̀m phền : tham khao ₫ḯn ₫ứi tương ₫đch tïn tac vu muö́n goi danh sach tham sö́ thưc cền truyï̀n theo (hay nhên vï̀ tư) tac vu vđ du : aCircle.SetRadius (3); aCircle.Draw (pWnd); ~ Thưng ₫iïp la phương tiïn giao tiḯp (hay tương tac) nhết giưa cac ₫ứ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 Chương 1: Cac khai niïm ban cua mö hịnh hương ₫ứi tương Slide 19 Tđnh ₫a xa (Polymorphism) ~ Cung lïnh gơi thöng ₫iïp ₫ḯn ₫ö́i tương thưng qua cung tham khao ơ vị trđ/thơi ₫iï̉m khac co thï̉ gêy viïc thưc thi method khac cua cac ₫ö́i tương khac T1 p1; // C1 va C2 la class hiïn thưc T1 p1 = New C1; // tao ₫ö́i tương C1, gan tham khao vao p1 p1.meth1( ); p1 = New C2; // tao ₫ö́i tương C2, gan tham khao vao p1 p1.meth1( ); Lïnh p1.meth1( ); ơ vị trñ khac kñch hoat method khac cua class khac 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 Chương 1: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 20 10 Sơ ₫ồ cấu trúc mẫu Template Method AbstractClass TemplateMethod() PrimitiveOperation1() PrimitiveOperation2() PrimitiveOperation1(); PrimitiveOperation2(); ConcreteClass PrimitiveOperation1() PrimitiveOperation2() Mön TK Hương ₫ứi tương Bộ mơn Cơng nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 321 Các phần tử tham gia AbstractClass (Application) : ₫ịnh nghĩa primitive operation cho lớp override ₫ể thực phần hoạt ₫ộng Các phương thức ₫iểm mà lớp hook vào code lớp cha thực template method, method ₫ịnh nghĩa khung hoạt ₫ộng Template method kết hợp primitive operation ₫ể thực trọn vẹn hoạt ₫ộng ConcreteClass (MyApplication) : thực primitive operation ₫ể can thiệp phần vào trình thực hoạt ₫ộng lớp cha 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 Chương 11 : Các mẫu Creational Slide 322 161 Các ngữ cảnh nên dùng mẫu Template Method Thường sử dụng Template method cần: thực phần cố ₫ịnh hoạt ₫ộng cho phép lớp thực phần thay ₫ổi tập trung hành vi giống lớp ₫ể tránh trùng lắp kiểm soát trình override lớp con: cho phép override ₫iểm hook qui ₫ịnh sẵn Mön TK Hương ₫ö́i tương Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 323 Mẫu Strategy Mục tiêu : Cung cấp họ giải thuật cho phép Client chọn lựa linh ₫ộng giải thuật cụ thể 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 cho vấn ₫ề Nhu cầu phát sinh: quản lý giải thuật ₫ó cách ₫ơn giản cho phép client chọn giải thuật ₫ó ₫ể sử dụng cách linh ₫ộ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 Chương 11 : Các mẫu Creational Slide 324 162 Ví dụ nhu cầu ứng dụng Strategy Chương trình chơi game có nhiều giải thuật tùy vào mức ₫ộ khó chơi Khi người chơi chọn mức ₫ộ khó dễ 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 ₫ược ₫ề nghị sau: Định nghĩa interface chung cho lớp thể giải thuật Định nghĩa lớp concrete thực interface trên, lớp concrete thể giải thuật Chương trình sử dụng ₫ối tượng kiểu interface cho phép client thay ₫ối tượng thể giải thuật cụ thể chạy → hướng giải vấn ₫ề mẫu Strategy Mön TK Hương ₫ứi tương Bộ mơn Cơng nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 325 Ví dụ mẫu Strategy Composition compositor Compositor Compose() Traverse() Repair() compositor->Compose(); SimpleCompositor Compose() Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM TeXCompositor Compose() ArrayCompositor Compose() Mön TK Hương ₫ö́i tương Chương 11 : Các mẫu Creational Slide 326 163 Lược ₫ồ cấu trúc mẫu Strategy Context strategy Strategy AlgorithmInterface() ContextInterface() ConcreteStrategyA AlgorithmInterface() ConcreteStrategyB AlgorithmInterface() ConcreteStrategyC AlgorithmInterface() Mön TK Hương ₫ö́i tương Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 327 Các phần tử tham gia Strategy (Compositor) : ₫ịnh nghĩa interface cho tất lớp thể giải thuật Có thể nhận pointer ₫ến ₫ối tượng Context trình khởi tạo ₫ối tượng ₫ể truy xuất liệu Context ConcreteStrategy (SimpleCompositor, TeXCompositor ) : thực interface Strategy, thể giải thuật cụ thể Context (Composition) : thời ₫iểm dịch: sử dụng ₫ối tượng kiểu Strategy xác ₫ịnh giải thuật cho vấn ₫ề cần xử lý thời ₫iểm run-time: ₫ược cung cấp ₫ối tượng giải thuật cụ thể thay cho ₫ối tượng Strategy cung cấp entry cho phép ₫ối tuợng kiểu Strategy truy xuất liệu 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 Chương 11 : Các mẫu Creational Slide 328 164 Các ngữ cảnh nên dùng mẫu Strategy Thường áp dụng mẫu Strategy trường hợp sau: Một lớp có nhiều hành vi loại loại trừ lẫn trình chuyển từ hành vi sang hành vi khác cần ₫ược thực dễ dàng Khi ₫ó hành vi ₫ược thể lớp Concrete Strategy lớp có nhiều hành vi lớp Strategy Giải thuật cần ₫ược che dấu liệu cấu trúc ₫ối với chương trình Client Một số chương trình áp dụng Strategy : Compiler, OS: q 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 VB…) Mön TK Hương ₫ö́i tương Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 329 Mẫu Command Mục tiêu : ₫óng gói request vào Object, nhờ ₫ó thơng số hóa chương trình nhận request thực thao tác request: xếp, log, undo… Nhu cầu áp dụng : Đôi cần gửi request ₫ến ₫ối tượng ₫ược hành ₫ộng ₫ược thực thi ₫ối tượng bị tác ₫ộng request ₫ó Ví dụ user interface toolkit cần xây dựng trước việc truyền request ₫ến menu button có ứng dụng cụ thể xác ₫ịnh ₫ược hành ₫ộng click vào chúng Vấn ₫ề ₫ược giải sau: 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 Chương 11 : Các mẫu Creational Slide 330 165 Ví dụ nhu cầu ứng dụng mẫu Command Xây dựng lớp trừu tượng Command, ₫ó 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 ₫ối tượng thừa kế Command Các ₫ối tượng override phương thức Execute() ₫ể xác ₫ịnh hành ₫ộng thực thi request Khi ứng dụng cần gửi request ₫ến cho menu hay button cần gửi ₫ối tượng có ₫óng gói request ₫ó ₫i Menu hay button gọi phương thức Execute() ₫ối tượng ₫ó Mưn TK Hương ₫ứi tương Bộ mơn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 331 Ví dụ mẫu Command command Menu Application Add(Document) Add(MenuItem) MenuItem Clicked() Command Execute() Document Open() Close() Cut() Copy() Paste() Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM command->Execute(); Mön TK Hương ₫ö́i tương Chương 11 : Các mẫu Creational Slide 332 166 Ví dụ mẫu Command Thí dụ ₫ối tượng PasteCommand hỗ trợ hoạt ₫ộng dán text từ clipboard vào tài liệu Phần tử nhận PasteCommand ₫ối tượng Document mà PasteCommand ₫ược cung cấp lúc "instantiation" tác vụ Execute gọi chức Paste Document nhận ₫ược Command Execute() Document Open() Close() Cut() Copy() Paste() document PasteCommand document->Paste(); Execute() Mön TK Hương ₫ứi tương Bộ mơn Cơng nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 333 Ví dụ mẫu Command Tác vụ Execute OpenCommand khác : hiển thị cửa sổ yêu cầu user nhập tên document tạo ₫ối tượng Document tương ứng, "add" document vào ứng dụng nhận mở document Command Execute() Application application OpenCommand Add(Document) Execute() AskUser() Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM name = AskUser(); doc = new Document(name); application-.Add(doc); doc->Open(); Mön TK Hương ₫ö́i tương Chương 11 : Các mẫu Creational Slide 334 167 Ví dụ mẫu Command Đôi option Menu cần thực thi chuỗi lệnh, ₫ịnh nghĩa class MacroCommand ₫ể cho phép thi hành số lệnh chưa biết trước Command Execute() commands MacroCommand Execute() forall c in commands c->Execute(); Mön TK Hương ₫ö́i tương Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 335 Lược ₫ồ class mẫu Command Client Command Invoker Execute() Receiver Action() receiver ConcreteCommand Execute() receiver->Action(); state 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 Chương 11 : Các mẫu Creational Slide 336 168 Các phần tử tham gia Command : Khai báo 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 lớp Command ₫ể ₫áp ứng request Client (Application) : khởi tạo ₫ối tượng ConcreteCommand truyền ₫ối tượng nhận tương tác cho Invoker (MenuItem): gửi request ₫ến ₫ối tượng Command Receiver (Document, Application) : Đối tượng nhận tương tác ConcreteCommand Biết cách thực hành ₫ộng ₫ể ₫áp ứng request 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 Chương 11 : Các mẫu Creational Slide 337 Q trình cộng tác phẩn tử 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 Chương 11 : Các mẫu Creational Slide 338 169 Các ngữ cảnh nên dùng mẫu Command Thơng số hóa ₫ối tượng hành vi mà ₫ối tượng ₫ó thực thi Nghĩa entry ₫ối tượng thực thi nhiều hành vi khác tùy thuộc vào thông số (là ₫ối tượng khác) truyền cho Quản lý, lưu trữ thực thi request thời ₫iểm khác Vì mẫu Command, request ₫ược lưu trữ ₫ối tượng nên việc lưu trữ quản lý request việc lưu trữ quản lý ₫ối tượng Hỗ trợ undo, redo thao tác Phương thức Execute() lưu trạng thái cũ ₫ối tượng Receiver ₫ể phục hồi lại có yêu cầu Hỗ trợ việc log lại thay ₫ổi ₫ối tượng Receiver ₫ể thực trở lại 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 recovery) Các hệ thống hỗ trợ transaction Trường hợp kết hợp mẫu Template Method Mưn TK Hương ₫ứi tương Bộ mơn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 339 Mẫu State Mục tiêu : cho phép ₫ối tượng thay ₫ổi hành vi trạng thái bên thay ₫ổi Ta có cảm giác class ₫ối tượng bị thay ₫ổi Nhu cầu áp dụng : class TCPConnection miêu tả mối nối mạng, ₫ối tượng TCPConnection nhiều trạng thái : Established, Listening, Closed Khi ₫ối tượng TCPConnection nhận request, ₫áp ứng khác tùy vào trạng thái hành → hướng giải vấn ₫ề mẫu State 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 Chương 11 : Các mẫu Creational Slide 340 170 Ví dụ mẫu State TCPConnection state TCPState Open() Close() Acknowledge() Open() Close() Acknowledge() state->Open(); TCPEstablished Open() Close() Acknowledge() TCPListen TCPClosed Open() Close() Acknowledge() Open() Close() Acknowledge() Mön TK Hương ₫ö́i tương Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 341 Lược ₫ồ cấu trúc mẫu State Context state State Request() Handle() state->Handle(); ConcreteStateA Handle() Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM ConcreteStateB Handle() ConcreteStateC Handle() Mön TK Hương ₫ö́i tương Chương 11 : Các mẫu Creational Slide 342 171 Các phần tử tham gia Context (TCPConnection) : ₫ịnh nghĩa interface cần dùng cho client trì tham khảo ₫ến ₫ối tượng class ConcreteState mà ₫ịnh nghĩa trạng thái 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ể trì tham khảo ₫ến ₫ối tượng class ConcreteState mà ₫ịnh nghĩa trạng thái hành ConcreteState (TCPEstablished, TCPListen, TCPClose) : ₫ịnh nghĩa hành vi cụ thể kết hợp với trạng thái 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 Chương 11 : Các mẫu Creational Slide 343 Các ngữ cảnh nên dùng mẫu State Thường áp dụng mẫu State trường hợp sau: hành vi ₫ối tượng phụ thuộc vào trạng thái phải thay ₫ổi runtime trạng thái thay ₫ổi tác vụ có lệnh ₫iều kiện số học lớn phụ thuộc vào trạng thái ₫ố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 Chương 11 : Các mẫu Creational Slide 344 172 Mẫu Observer Mục tiêu : ₫ịnh nghĩa phụ thuộc 1-n ối tượng cho ₫ối tượng thay ₫ổi trạng thái ₫ội tượng phụ thuộc ₫ược cảnh báo hầu hiệu chỉnh tự ₫ộng (₫ể ₫ảm bảo tính quán) Nhu cầu áp dụng : ứng dụng quản lý bảng tính, bảng tính database ₫ược trình bày nhiều dạng khác spreadsheet, barchart, piechart, Mỗi nội dung database thay ₫ổi ta muốn cập nhật ₫ồng thời nhiều dạng biểu diễn → hướng giải vấn ₫ề mẫu Observer Mön TK Hương ₫ö́i tương Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 345 Ví dụ mẫu Observer Spreadsheet BarChart PieChart thay ₫ổi, notification Database Bộ môn Công nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM request, modification Mön TK Hương ₫ö́i tương Chương 11 : Các mẫu Creational Slide 346 173 Lược ₫ồ cấu trúc mẫu Observer Subject Attach(Observer) Detach(Observer) Notify() observers Observer Update() forall o in observers o->Update(); ConcreteObserver ConcreteSubject GetState() SetState() return subjectState(); Update() observerState = subject->GetState(); observerState subjectState Mưn TK Hương ₫ứi tương Bộ mơn Cơng nghệ phần mềm Khoa CNTT ĐH Bách Khoa Tp.HCM Chương 11 : Các mẫu Creational Slide 347 Các phần tử tham gia Subject : biết observer Có thể có nhiều observer quan sát subject cung cấp interface ₫ể Attach va Detach observer vào Observer : ₫ịnh nghĩa interface hiệu chỉnh cho ₫ối tượng mà ₫ược cảnh báo ₫ể hiệu chỉnh subject ConcreteSubject : lưu trạng thái lưu ý tới ₫ối tượng ConcreteObserver gởi cảnh báo tới observer trạng thái thay ₫ổi Concretebserver : trì tham khảo tới ₫ối tượng ConcreteSubject lưu trạng thái mà cần phải ln qn với subject thực interface hiệu chỉnh ₫ể giữ trạng thái qn với subject 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 Chương 11 : Các mẫu Creational Slide 348 174 Các ngữ cảnh nên dùng mẫu Observer Thường áp dụng mẫu State trường hợp sau: trừu tượng có khía cạnh phụ thuộc lẫn Bao ₫óng khía cạnh ₫ối tượng ₫ộc lập giúp ta thay ₫ổi dùng lại chúng ₫ộc lập việc thay ₫ổi ₫ối tượng ₫òi hỏi phải thay ₫ổi ₫ối tượng khác bạn khơng biết trước có ₫ối tượng cần thay ₫ổi ₫ối tượng cần có khả cảnh báo ₫ối tượng khác không muốn chúng ghép nối chặt với 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 Chương 11 : Các mẫu Creational Slide 349 175