1. Trang chủ
  2. » Giáo án - Bài giảng

Bài Giảng Môn Học Phân Tíchx Và Phân Tích Hướng Đối Tượng

175 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

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 Đai hoc Bach Khoa Tp Hö̀ Chñ Minh Khoa Cöng Nghï Thöng Tin Mön h[.]

Trương Đai hoc Bach Khoa Tp Hừ Chđ Minh Khoa Cưng Nghï Thưng Tin Mưn hoc 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 Tai liïu tham khao 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 Đai hoc Bach Khoa Tp Hừ Chđ Minh Khoa Cưng Nghï Thưng Tin Chương CAC KHAI NIÏM CƠ BAN CUA MƯ HỊNH HƯƠNG ĐƯI TƯƠNG Mưn TK Hương ₫ứi tương Chương 1: Cac khai niïm ban cua 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 truc ₫ḯn OOP 1.2 Đứi tương, thc tñnh, tac vu 1.3 Abstract type va class 1.4 Tñnh bao ₫ong 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 quat hoa 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: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trịnh co cếu truc ₫ḯn OOP May tđnh sứ la thiḯt bị co thï̉ thưc hiïn sö́ hưu han cac chưc ban (têp lïnh), chḯ thưc hiïn cac lïnh la tư ₫öng tư lïnh ₫ều cho ₫ḯn lïnh cuö́i cung Danh sach cac lïnh ₫ươc thưc hiïn nay ₫ươc goi la chương trịnh bết ky cưng viïc ngoai ₫ơi nao cung co thï̉ ₫ươc chia thanh trịnh tư nhiï̀u cưng viïc nho Trịnh tư cac cöng viïc nho nay ₫ươc goi la giai thuêt giai quyḯt cöng viïc ngoai ₫ơi Mö̃i cöng viïc nho cung co thï̉ ₫ươc chia nho nưa, ⇒ cöng viïc ngoai ₫ơi la trònh tư cac lïnh may (chương trịnh) vến ₫ï̀ mếu chứt cua viïc dung may tñnh giai quyḯt vến ₫ï̀ ngoai ₫ơi la lêp trịnh Cho ₫ḯn nay, lêp trịnh la cưng viïc cua ngươi (vơi sư trơ giup ngay cang nhiï̀u cua may tđnh) cac lïnh cua chương trịnh (code) phai tham khao 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: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trònh co cếu truc ₫ḯn OOP Dư liïu cua chương trònh co thï̉ rết nhiï̀u va ₫a dang Đï̉ truy xuết ₫ung dư liïu ta cền : - tïn nhên dang - kiï̉u dư liïu miïu ta cếu truc dư liïu - tềm vưc truy xuết miïu ta giơi han khach hang truy x́t dư liïu Chương trịnh cử ₫iï̉n = giai thuêt + dư liïu Chương trònh (function, subroutine, ) cho phep cếu truc chương trònh, sư dung lai code Chương trịnh cử ₫iï̉n co cếu truc 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: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trònh co cếu truc ₫ḯn OOP Chương trònh = cếu truc dư liïu + giai 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: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide Tư lêp trònh co cếu truc ₫ḯn OOP Chương trịnh = têp cac ₫ứi tương tương tac ₫ö́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: Cac khai niïm ban cua mư hịnh hương ₫ö́i tương Slide Tö̉ng quat 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ḯ) khac hăn so vơi trương phai cö̉ ₫iï̉n (co cếu truc) ƒ Băt ₫ều nhen nhom vao 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 thanh cac phương phap phên tđch/thiḯt kḯ hương ₫ứi tương ƒ Va hiïn ta co qui trònh phat 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: Cac khai niïm ban cua 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 cac ₫ứi tương sinh sö́ng va tương tac vơi ~ Đö́i tương bao gừm : ƒ thc tđnh (dư liïu) : mang gia trị nhết ₫ịnh tai tưng thơi ₫iï̉m ƒ tac vu (operation) : thưc hiïn cöng viïc nao ₫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: Cac khai niïm ban cua 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ư dung ₫ö́i tương ~ Interface la têp cac entry ma bïn ngoai co thï̉ giao tiḯp vơi ₫ö́i tương ~ Dung signature ₫ï̉ ₫ịnh nghĩa mö̃i entry, Signature gö̀m : ƒ tïn method (operation) ƒ danh sach ₫ö́i sö́ hịnh thưc, mữi ₫ứi sứ ₫ươc ₫ăc ta bơi thc tđnh : tïn, type va chiï̀u chủn ₫ưng (IN, OUT, INOUT) ƒ ₫ăc ta chưc cua method (thương la chu thđch) ~ Dung abstract type (chư khưng phai class) ₫ï̉ ₫ăc ta kiï̉u cho biḯn, thc tđnh, tham sứ hịnh thưc ~ User khưng cền quan têm ₫ḯn class (hiïn thưc cu thï̉) cua ₫ứ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: Cac khai niïm ban cua 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 cac thc tđnh dư liïu : gia trị cua tết ca thc tđnh xac ₫ịnh trang thai cua ₫ö́i tương ƒ kiï̉u cua thuöc tđnh co thï̉ la type cử ₫iï̉n hay abstract type, trương hơp sau thc tđnh chưa tham khao ₫ḯn ₫ö́i tương khac ƒ coding cac method va cac internal function ~ Định nghĩa cac method tao va xoa ₫ö́i tương ~ Định nghĩa cac method constructor va destructor ~ User khöng cền quan tên ₫ḯn class cua ₫ö́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: Cac khai niïm ban cua 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: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 13 Tđnh bao ₫ong (encapsulation) z Bao ₫ong : che dếu moi chi tiḯt hiïn thưc cua ₫ö́i tương, khöng cho bïn ngoai thếy va truy xuết ⇒ tđnh ₫ưc lêp cao giưa cac ₫ứi tương (hay tđnh kḯt dđnh - cohesion giưa cac ₫ứi tương rết thếp) ƒ che dếu cac thc tđnh dư liïu : nḯu cền cho phep truy x́t thc tđnh dư liïu, ta tao method get/set tương ưng ₫ï̉ giam sat 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 cac method ƒ che dếu cac internal function va sư hiïn thưc cua chu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: Cac khai niïm ban cua mö hịnh hương ₫ứi tương Slide 14 Tđnh thưa kḯ (inheritance) ~ Tđnh thưa kḯ cho phep giam nhe cưng sưc ₫ịnh nghĩa type/class : ta co thï̉ ₫ịnh nghĩa cac type/class khöng phai tư ₫ều ma băng cach kḯ thưa type/class co săn, ta ₫ịnh nghĩa thïm cac 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 cac method cua class cha, kḯt qua override co nghĩa ₫ö́i tương class ƒ Đö́i tương cua class co thï̉ ₫ong vai tro cua ₫ö́i tương cha ngươc lai thương khưng ₫u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: Cac khai niïm ban cua 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) { // cac l nh ve ₫oan 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: Cac khai niïm ban cua 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 khac tao nïn mö́i quan hï bao göp cach ₫ï qui giưa cac ₫ö́i tương ƒ Co goc nhịn vï̀ tđnh bao gưp : ngư nghĩa va hiïn thưc Goc nhòn ngư nghĩa Goc 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: Cac khai niïm ban cua 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: Cac khai niïm ban cua mư hịnh hương ₫ứi tương Slide 18 Thöng ₫iïp (Message) ~ Thöng ₫iïp la phep goi tac vu ₫ḯn ₫ö́i tương tư tham khao ~ Thöng ₫iïp bao gö̀m phền : ƒ tham khao ₫ḯn ₫ứi tương ₫đch ƒ tïn tac vu muö́n goi ƒ danh sach tham sö́ thưc cền truyï̀n theo (hay nhên vï̀ tư) tac vu ƒ vđ du : aCircle.SetRadius (3); aCircle.Draw (pWnd); ~ Thưng ₫iïp la phương tiïn giao tiḯp (hay tương tac) nhết giưa cac ₫ứ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: Cac khai niïm ban cua mö hịnh hương ₫ứi tương Slide 19 Tđnh ₫a xa (Polymorphism) ~ Cung lïnh gơi thöng ₫iïp ₫ḯn ₫ö́i tương thưng qua cung tham khao ơ vị trđ/thơi ₫iï̉m khac co thï̉ gêy viïc thưc thi method khac cua cac ₫ö́i tương khac T1 p1; // C1 va C2 la class hiïn thưc T1 p1 = New C1; // tao ₫ö́i tương C1, gan tham khao vao p1 p1.meth1( ); p1 = New C2; // tao ₫ö́i tương C2, gan tham khao vao p1 p1.meth1( ); Lïnh p1.meth1( ); ơ vị trñ khac kñch hoat method khac cua class kha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 Chương 1: Cac khai niïm ban cua 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

Ngày đăng: 31/03/2023, 05:01

Xem thêm: