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

Tài liệu Bài giảng Phân tích và thiết kế hướng đối tượng dùng UML

pdf175 trang | Chia sẻ: hunglv | Lượt xem: 1098 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Phân tích và thiết kế hướng đối tượng dùng UML, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 1 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 DÙNG UML Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 2 1. ûn lai 1 sú́ khai niøm cơ ban cua hương ₫ú́i tương, cac ngún ngư hương ₫ú́i tương thương dung, cơ chǿ dịch cac type/class sang ngún ngư cú̉ ₫iø̉n (ngún ngư may). 2. ûn lai qui trěnh phat triø̉n phö̀n mø̀m hơp nhö́t. 3. ûn lai ngún ngư UML ₫ươc dung ₫ø̉ miøu ta cac artifacts cua qui trěnh phat triø̉n phö̀n mø̀m hơp nhö́t. 4. Giơi thiøu cac mö̃u thiǿt kǿ hương ₫ú́i tương ₫ươc dung phú̉ biǿn trong cac ưng dung hiøn hanh va cac ưng dung tương lai. Nöi dung mön hoc 2Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 3 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 Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 4 Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh Khoa Cöng Nghï Thöng Tin Chương 1 CAC KHAI NIÏM CƠ BAN CUA MÖ HÒNH HƯƠNG ĐÖI TƯƠNG Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 3Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 5 Nöi dung 1.1 Tư lêp trònh co cếu truc ₫ḯn OOP 1.2 Đö́i tương, thuö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 cơ 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. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 6 1. May tĚnh sú́ la thiǿt bị co thø̉ thưc hiøn 1 sú́ hưu han cac chưc năng cơ ban (töp lønh), cơ 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. 2. 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 hơn. 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 hơn cung co thø̉ ₫ươc chia nho nưa,... ⇒ cúng viøc ngoai ₫ơi la 1 trěnh tư cac lønh may (chương trěnh). 3. 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 con ngươi (vơi sư trơ giup ngay cang nhiø̀u cua may tĚnh). 4. 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). Tư lêp trònh co cếu truc ₫ḯn OOP Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 4Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 7 Tư lêp trònh co cếu truc ₫ḯn OOP Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 5. Dư liøu cua 1 chương trěnh co thø̉ rö́t nhiø̀u va ₫a dang. Đø̉ truy xuö́t ₫ung 1 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 xuö́t dư liøu. 6. Chương trěnh cú̉ ₫iø̉n = giai thuöt + dư liøu. 7. Chương trěnh con (function, subroutine,...) cho phep cö́u truc chương trěnh, sư dung lai code... 8. Chương trěnh cú̉ ₫iø̉n co cö́u truc phön cö́p như sau : Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 8 Chương trěnh = cö́u truc dư liøu + giai thuöt entry 'start' global datamodule (package) local data of module local data of function Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Tư lêp trònh co cếu truc ₫ḯn OOP 5Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 9 Chương trěnh = töp cac ₫ú́i tương tương tac nhau entry ₫ú́i tương (object) local data of object local data of operation Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Tư lêp trònh co cếu truc ₫ḯn OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 10 Tö̉ng quat vï̀ hương ₫ö́i tương ƒ Mú hěnh hương ₫ú́i tương giơi thiøu 1 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 trong 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 nay ta co 1 qui trěnh phat triø̉n phö̀n mø̀m hơp nhö́t dưa trøn ngún ngư UML. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 6Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 11 Đö́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 nhau. ~ Đú́i tương bao gú̀m : ƒ thuúc tĚnh (dư liøu) : mang 1 gia trị nhö́t ₫ịnh tai tưng thơi ₫iø̉m. ƒ tac vu (operation) : thưc hiøn 1 cúng viøc nao ₫o. Interface (abstract type) Implementation (class) Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 12 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 3 thuúc tĚnh : tøn, type va chiø̀u chuyø̉n ₫úng (IN, OUT, INOUT). ƒ ₫ăc ta chưc năng 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, thuú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. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 7Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 13 Class (Implementation) ~ Class ₫ịnh nghĩa chi tiǿt hiøn thưc ₫ú́i tương : ƒ ₫ịnh nghĩa cac thuúc tĚnh dư liøu : gia trị cua tö́t ca thuú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, trong trương hơp sau thuú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. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 14 Vñ du vï̀ class trong 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 } Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 8Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 15 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 thuúc tĚnh dư liøu : nǿu cö̀n cho phep truy xuö́t 1 thuúc tĚnh dư liøu, ta tao 2 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 trong. ƒ 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. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 16 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 chỉ ₫ị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 chỉ co nghĩa trong ₫ú́i tương class con. ƒ Đú́i tương cua class con co thø̉ ₫ong vai tro cua ₫ú́i tương cha nhưng ngươc lai thương khúng ₫ung. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 9Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 17 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 } } Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 18 Tñnh bao göp (aggregation) ƒ 1 ₫ú́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 1 cach ₫ø qui giưa cac ₫ú́i tương. ƒ Co 2 goc nhěn vø̀ tĚnh bao gúp : ngư nghĩa va hiøn thưc. O1 O2 O3 Goc nhěn ngư nghĩa Goc nhěn hiøn thưc O1 O2 O3 Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 10 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 19 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: Geometry **ppGeo; // pointer container int geoCount; }; Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 20 Thöng ₫iïp (Message) ~ Thúng ₫iøp la 1 phep goi tac vu ₫ǿn 1 ₫ú́i tương tư 1 tham khao. ~ Thúng ₫iøp bao gú̀m 3 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) duy nhö́t giưa cac ₫ú́i tương. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 11 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 21 Tñnh ₫a xa (Polymorphism) ~ Cung 1 lønh gơi thúng ₫iøp ₫ǿn ₫ú́i tương thúng qua cung 1 tham khao nhưng ơ vị trĚ/thơi ₫iø̉m khac nhau co thø̉ göy ra viøc thưc thi method khac nhau cua cac ₫ú́i tương khac nhau. T1 p1; // C1 va C2 la 2 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(...); ơ 2 vị trĚ khac nhau kĚch hoat 2 method khac nhau cua 2 class khac nhau. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 22 Kiï̉m tra kiï̉u (type check) ~ Chăt va dung mú́i quan hø 'conformity' (tương thĚch tú̉ng quat). Type A tương thĚch vơi type B ⇔ A chưa moi method cua B va ưng vơi tưng method cua B : ƒ tú̀n tai 1 method cung tøn trong A. ƒ danh sach ₫ú́i sú́ cua 2 method tương ưng phai băng nhau. ƒ kiø̉u ₫ú́i sú́ OUT hay gia trị return cua method trong A phai tương thĚch vơi kiø̉u cua ₫ú́i sú́ tương ưng trong B. ƒ kiø̉u ₫ú́i sú́ IN cua method trong B phai tương thĚch vơi kiø̉u cua ₫ú́i sú́ tương ưng trong A. ƒ kiø̉u ₫ú́i sú́ INOUT cua method trong A phai trung vơi kiø̉u cua ₫ú́i sú́ tương ưng trong B. Ö quan hø so trung hay quan hø con/cha (sub/super) la trương hơp ₫ăc biøt cua quan hø tương thĚch tú̉ng quat. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 12 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 23 Tñnh tö̉ng quat hoa (Generalization) ~ Co 2 ngư nghĩa khac nhau cua tĚnh tú̉ng quat hoa : ƒ class tú̉ng quat hoa cho phep san sinh tư ₫úng cac class běnh thương, cac class běnh thương tư no chỉ co thø̉ tao ra ₫ú́i tương. Thương dung ngư nghĩa nay trong giai ₫oan löp trěnh. ƒ ngươc vơi tĚnh thưa kǿ : supertype/superclass la type/class tú̉ng quat hoa cua cac con cua no. Thương dung ngư nghĩa nay trong giai ₫oan phön tĚch/thiǿt kǿ phö̀n mø̀m. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 24 Tñnh thương tru (persistence) ~ ₫ơi sú́ng cua 1 ₫ú́i tương ₫úc löp vơi ₫ơi sú́ng cua phö̀n tư tao ra no. ƒ ₫ú́i tương phai tú̀n tai khi con Ět nhö́t 1 tham khao ₫ǿn no trong hø thú́ng. ƒ ₫ú́i tương phai bị xoa khi khúng con tham khao nao ₫ǿn no, vě tai thơi ₫iø̉m nay ₫ú́i tương la rac. Viøc xac ₫ịnh chĚnh xac 1 ₫ú́i tương co phai la rac hay khúng la 1 viøc phưc tap code ưng dung khúng ₫ươc phep lam, ₫öy la cúng viøc cua hø thú́ng thúng qua module 'garbage collection'. ƒ vưng bø̀n khúng phai la vĩnh hăng, mưc ₫ú co thø̉ la 1 session cua may ao (JVM) hay løu dai (thúng qua ₫ĩa cưng, CDROM). Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương 13 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 25 Tö̉ng kḯt ~ Mú hěnh hương ₫ú́i tương quan niøm thǿ giơi (hay chương trěnh) bao gú̀m cac ₫ú́i tương sú́ng chung va tương tac vơi nhau. ~ Cac ₫ăc ₫iø̉m chĚnh cua hương ₫ú́i tương : ƒ Bao ₫ong : mú̃i ₫ú́i tương bao gú̀m dư liøu va tac vu. Cac tac vu thiǿt löp nøn hanh vi cua ₫ú́i tương. Cac ₫ú́i tương ₫ươc phön loai băng class. ƒ Cac ₫ú́i tương tương tac vơi nhau băng cach gơi thúng ₫iøp. ƒ giưa cac class/₫ú́i tương co thø̉ tú̀n tai quan hø bao gúp, thưa kǿ, tú̉ng quat hoa. ƒ TĚnh ₫a hěnh : kǿt qua cua sư kiø̉m tra kiø̉u dưa vao mú́i quan hø 'conformity'. ƒ TĚnh vưng bø̀n : ₫ú́i tương tú̀n tai khi con Ět nhö́t 1 tham khao ₫ǿn no. Chương 1: Cac khai niøm cơ ban cua mú hěnh hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 26 Chương 2 THÑ DU VÏ NGÖN NGƯ OOP ) Visual C++ ) Java Chương 2: ThĚ du vø̀ cac ngún ngư OOP Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh Khoa Cöng Nghï Thöng Tin 14 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 27 2.1 Ngön ngư Visual C++ 1. Chỉ hö̃ trơ khai niïm class. 2. Cho phep Đa thưa kḯ. 3. Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface. 4. Tềm vưc truy xuết cac thanh phền. 5. Đa hònh co chon loc nhơ 'virtual function' 6. Chỉ hö̃ trơ cac ₫ö́i tương tam. 7. Override method khi thưa kḯ. 8. Co thï̉ ₫ịnh nghĩa function overloaded. Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 28 Chỉ hö̃ trơ khai niïm class 1. Dung class ₫ø̉ ₫ịnh nghĩa kiø̉u cho cac biǿn, thuúc tĚnh ⇒ ₫ú́i tương co thø̉ chưa vöt ly ₫ú́i tương khac hay chưa tham khao ₫ǿn ₫ú́i tương khac. 2. Đa thưa kǿ trong ₫ịnh nghĩa class ⇒ 1 class co thø̉ chưa nhiø̀u class con trung nhau ⇒ dung "virtual base class" ₫ø̉ tú́i ưu hoa bú nhơ ₫ú́i tương. Chương 2: ThĚ du vø̀ cac ngún ngư OOP 15 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 29 Class trưu tương (Abstract class) 3. Hú̃ trơ khai niøm "abstract class" ₫ø̉ ₫ịnh nghĩa class chỉ chưa thúng tin interface nhưng khúng cho phep dung class nay ₫ø̉ ₫ịnh nghĩa kiø̉u cho biǿn hay thuúc tĚnh. 1 abstract class la 1 class chưa Ět nhö́t 1 "pure virtual funtion". class Geometry { // abstract class public: Geometry( ); ~Geometry( ); virtual void Draw( Window *pWnd ) = 0; // pure virtual function protected: int xPos, yPos; double xScale, yScale; COLORREF color; }; Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 30 Tềm vưc truy xuết thanh viïn 4. Tö̀m vưc truy xuö́t thúng tin trong ₫ú́i tương : private : thúng tin bị che dö́u hoan toan. protected : chỉ che dö́u bøn ngoai nhưng cho phep cac ₫ú́i tương con, chau, chăt... truy xuö́t. public : cho phep tö́t ca moi nơi truy xuö́t. Friend class : la class ma mú̃i function cua no ₫ø̀u co thø̉ truy xuö́t tư do mú̃i thanh phö̀n cua class hiøn tai. Friend function : la function co thø̉ truy xuö́t tư do mú̃i thanh phö̀n cua class hiøn tai. Co thø̉ han chǿ tö̀m vưc cua thanh viøn cua class cha khi thưa kǿ. Chương 2: ThĚ du vø̀ cac ngún ngư OOP 16 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 31 Hö̃ trơ tñnh ₫a hònh co chon loc 5. Định nghĩa 'virtual function' nǿu muú́n ap dung tĚnh ₫a hěnh trong viøc gơi thúng bao yøu cö̀u function nay thưc thi. Tö́t ca cac 'virtual function' ₫ươc quan ly trong 1 danh sach "virtual function table". ₫ịa chỉ function 1 ₫ịa chỉ function 2 ₫ịa chỉ function 3 ₫ịa chỉ function i ₫ịa chỉ function n Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 32 Cac ₫ö́i tương ₫ï̀u tam thơi 6. Cac ₫ú́i tương chỉ tú̀n tai tam thơi trong khúng gian process. Tham khao ₫ǿn ₫ú́i tương thưc chö́t la pointer cuc bú. chương trěnh phai tư viǿt code cho hoat ₫úng save/restore ₫ú́i tương nǿu muú́n lưu giư/dung lai ₫ú́i tương. VC++ hú̃ trơ hoat ₫úng save/restore ₫ú́i tương nhơ kha năng 'Serialization'. 7. Co quyø̀n 'override' bö́t ky toan tư hay function nao cua class cha. 8. Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung tøn nhưng 'signature' khac nhau. Chương 2: ThĚ du vø̀ cac ngún ngư OOP 17 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 33 Skeleton ₫ịnh nghĩa class class Geometry : Object { // == class Geometry : public Object { public: Geometry( ); ~Geometry( ); virtual void Draw( Window *pWnd ); // virtual method BOOL IsDisplayed(void); .... protected: COLORREF color; .... private : int xPos, yPos; double xScale, yScale; ... }; class Point : Geometry {}; class Line : Geometry { .... }; class Polygon : Geometry {....}; class Rectangle : Geometry {....}; .... Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 34 Cếu truc 1 chương trònh Dialog based ₫ơn gian InitInstance() DoModal() CProgramApp CProgramDlg Chương 2: ThĚ du vø̀ cac ngún ngư OOP 18 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 35 Cếu truc 1 chương trònh SDI ₫ơn gian InitInstance() CProgramApp CSingleDocTemplate CMainFrame CProgramView CProgramDoc Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 36 Cếu truc 1 chương trònh MDI ₫ơn gian InitInstance() CProgramApp CMultiDocTemplate CChildFrame CProgramView CProgramDoc Chương 2: ThĚ du vø̀ cac ngún ngư OOP 19 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 37 2.2 Ngön ngư Java 1. Hö̃ trơ 'interface' (1 dang cua type) va class. 2. Hö̃ trơ Đơn thưa kḯ. 3. Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface. 4. Tềm vưc truy xuết cac thanh phền. 5. Hö̃ trơ package 6. Đa hònh ₫ềy ₫u. 7. Chỉ hö̃ trơ ₫ö́i tương tam trong session JVM 8. Override function khi thưa kḯ. 9. Co thï̉ ₫ịnh nghĩa function overloaded. Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 38 1. Chu yǿu dung class ₫ø̉ ₫ịnh nghĩa kiø̉u cho cac biǿn, thuúc tĚnh. Co thø̉ dung interface ₫ø̉ ₫ịnh nghĩa kiø̉u cho cac biǿn, thuúc tĚnh. Đú́i tương chỉ co thø̉ chưa tham khao ₫ǿn ₫ú́i tương khac. 2. Phai goi ham tao ₫ú́i tương 1 cach tương minh, nhưng khúng ₫ươc xoa ₫ú́i tương. class C1 extends RootClass {...} C1 o1; // o1 chưa tham khao ₫ǿn ₫ú́i tương C1 o1 = New C1; 3. Interface chỉ ₫ươc dung trong trương hơp ₫ăc biøt va khúng tương ₫ương vơi abstract type. 4. Đơn thưa kǿ trong ₫ịnh nghĩa class ⇒ mú́i quan hø thưa kǿ giưa cac class kha ₫ơn gian. Hö̃ trơ Class va Interface Chương 2: ThĚ du vø̀ cac ngún ngư OOP 20 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 39 Hö̃ trơ abstract class 5. Hú̃ trơ khai niøm "abstract class" ₫ø̉ ₫ịnh nghĩa class chưa thúng tin interface va khúng cho phep 'instanciate' ₫ú́i tương. Ban chỉ co thø̉ dung class 'abstract class' ₫ø̉ ₫ăc ta kiø̉u cho cac biǿn hoăc ₫ịnh nghĩa cac class con. class abstract Geometry { // abstract class protected int xPos, yPos; protected double xScale, yScale; protected COLORREF color; ... public abstract Draw(Graphics g); // abstract function ... }; Abstract class co thø̉ chưa ₫ö̀y ₫u cac hiøn thưc bøn trong, nhưng thương chỉ co chưa cac 'abstract function'. Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 40 Tềm vưc truy xuết cac thanh phền 6. Tö̀m vưc truy xuö́t cac thanh phö̀n trong ₫ú́i tương : private : thanh phö̀n bị che dö́u hoan toan. protected : che dö́u bøn ngoai nhưng cho phep cac ₫ú́i tương con, chau, chăt... truy xuö́t. public : cho phep tö́t ca moi nơi truy xuö́t. friendly : cho phep moi phö̀n tư trong package truy xuö́t. Đöy la tö̀m vưc default va khúng co tư khoa tö̀m vưc tương minh. Chương 2: ThĚ du vø̀ cac ngún ngư OOP 21 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 41 7. Package la ₫ơn vị quan ly tö̀m vưc cua java, co thø̉ chưa nhiø̀u class. package graphics; public class Circle extends Graphic implements Draggable { . . . } Tö́t ca moi phö̀n tư ₫ươc ₫ịnh nghĩa trong 1 file source ₫ø̀u thuúc 1 package : tøn ₫ươc qui ₫ịnh bơi phat biø̉u package hay la package default. Nhiø̀u file source co thø̉ thuúc cung 1package (dung cung tøn trong phat biø̉u package). Hö̃ trơ package Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 42 Hö̃ trơ ₫ềy ₫u tñnh ₫a hònh 8. Tö́t ca cac public function ₫ươc quan ly trong 1 danh sach "public function table". ₫ịa chỉ function 1 ₫ịa chỉ function 2 ₫ịa chỉ function 3 ₫ịa chỉ function i ₫ịa chỉ function n Chương 2: ThĚ du vø̀ cac ngún ngư OOP 22 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 43 Cac ₫ö́i tương ₫ï̀u 'tam thơi' 9. Cac ₫ú́i tương chỉ tú̀n tai tam thơi trong 1session chay JVM. Ban co thø̉ tao ra cac ₫ú́i tương mơi ma khúng cö̀n xoa no. Đú́i tương se tú̀n tai mút khi con tham khao ₫ǿn no. Module Garbage Collection trong JVM se chịu trach nhiøm phat hiøn ₫ú́i tương 'rac' va xoa no ra khoi bú nhơ JVM. 10.Co quyø̀n 'override' bö́t ky function nao cua class cha. 11.Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung tøn nhưng 'signature' khac nhau. Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 44 Thñ du vï̀ chương trònh Java import java.net.*; public class getnet { public static void main(String args[]) { try { if(args.length!=1) { System.out.println("Usage: java AddrLookupApp "); return; } InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName(); System.out.println ("Host name : "+hostName); System.out.println ("IP address:"+host.getHostAddress()); } catch (UnknownHostException e) {...} } } Chương 2: ThĚ du vø̀ cac ngún ngư OOP 23 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 45 Thñ du vï̀ chương trònh Java Chương 2: ThĚ du vø̀ cac ngún ngư OOP 12.34.25 AlarmClock GUIClock wakeup() > Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 46 Thñ du vï̀ cac class Java public class AlarmClock { private static final int MAX_CAPACITY = 10; private static final int UNUSED = -1; private static final int NOROOM = -1; private Sleeper[] sleepers = new Sleeper[MAX_CAPACITY]; private long[] sleepFor = new long[MAX_CAPACITY]; public AlarmClock () { for (int i = 0; i < MAX_CAPACITY; i++) sleepFor[i] = UNUSED; } Chương 2: ThĚ du vø̀ cac ngún ngư OOP 24 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 47 Thñ du vï̀ cac class Java public synchronized boolean letMeSleepFor(Sleeper s, long time) { int index = findNextSlot(); if (index == NOROOM) { return false; } else { sleepers[index] = s; sleepFor[index] = time; new AlarmThread(index).start(); return true; } } Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 48 Thñ du vï̀ cac class Java private synchronized int findNextSlot() { for (int i = 0; i < MAX_CAPACITY; i++) { if (sleepFor[i] == UNUSED) return i; } return NOROOM; } private synchronized void wakeUpSleeper(int sleeperIndex) { sleepers[sleeperIndex].wakeUp(); sleepers[sleeperIndex] = null; sleepFor[sleeperIndex] = UNUSED; } Chương 2: ThĚ du vø̀ cac ngún ngư OOP 25 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 49 Thñ du vï̀ cac class Java private class AlarmThread extends Thread { int mySleeper; AlarmThread(int sleeperIndex) { super(); mySleeper = sleeperIndex; } public void run() { try { sleep(sleepFor[mySleeper]); } catch (InterruptedException e) {} wakeUpSleeper(mySleeper); } } } Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 50 Thñ du vï̀ cac class Java public interface Sleeper { public void wakeUp(); public long ONE_SECOND = 1000;// in milliseconds public long ONE_MINUTE = 60000; // in milliseconds } import java.applet.Applet; import java.awt.Graphics; import java.util.*; import java.text.DateFormat; public class GUIClock extends Applet implements Sleeper { private AlarmClock clock; public void init() { clock = new AlarmClock(); } Chương 2: ThĚ du vø̀ cac ngún ngư OOP 26 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 51 Thñ du vï̀ cac class Java public void start() { clock.letMeSleepFor(this, 1000); } public void paint(Graphics g) { Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); DateFormat dateFormatter = DateFormat.getTimeInstance(); g.drawString(dateFormatter.format(date), 5, 10); } public void wakeUp() { repaint(); clock.letMeSleepFor(this, 1000); } } Chương 2: ThĚ du vø̀ cac ngún ngư OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 52 Trương Đai Hoc Bach Khoa Tp. HCM Khoa Cöng nghï Thöng tin Chương 3 NGUYÏN TĂÆC DỊCH OOP ) Dịch abstract type ) Dịch class Chương 3: Nguyøn tăc dịch OOP 27 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 53 • Chương trěnh la 1 töp cac ₫ú́i tương sú́ng va tương tac lö̃n nhau. • Cac ₫ú́i tương thuúc 1 sú́ loai nhö́t ₫ịnh (n) • Mú̃i loai ₫ú́i tương ₫ươc miøu ta bơi 1 type + 1 class • Chương trěnh la töp n ₫ịnh nghĩa type + class • Dịch chương trěnh OOP la vong lăp dịch n type + n class. • Ta se miøu ta qui trěnh dịch 1 type va 1 class Tö̉ng quat vï̀ vến ₫ï̀ dịch OOP Chương 3: Nguyøn tăc dịch OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 54 • Abstract type chỉ chưa thúng tin trưu tương (interface), khúng miøu ta sư hiøn thưc→ Kǿt qua viøc dịch 1 type chỉ dưng lai cöy ngư nghĩa cua type tương ưng ₫ø̉ phuc vu viøc kiø̉m tra kiø̉u, chư khúng tao code ma may. • Chỉ cö̀n 3 bươc : duyøt tư vưng, phön tĚch cu phap, phön tĚch ngư canh. • Nøn dung cúng cu hú̃ trơ như LEX, YACC. Dịch 1 abstract type Chương 3: Nguyøn tăc dịch OOP 28 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 55 Chương 3: Nguyøn tăc dịch OOP • Dịch class la cúng viøc chĚnh cua chương trěnh dịch OOP. • Gú̀m 2 cúng viøc chĚnh : dịch thuúc tĚnh dư liøu va dịch cac method (hay cac internal function). • Cö̀n ₫ö̀y ₫u cac bươc : duyøt tư vưng, phön tĚch cu phap, phön tĚch ngư canh, tao ma. • Nøn dung cúng cu hú̃ trơ như LEX, YACC. Dịch 1 class Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 56 Chương 3: Nguyøn tăc dịch OOP • class → cö́u truc record class C1 : C0 { double d; int i ; ... public : int proc4(int i); void proc5 (double d); ... }; Dịch thuöc tñnh dư liïu typedef struct { // import cac field tư cö́u truc // ₫ươc sinh ra tư C0 // cac field tương ưng vơi C1 int C1_d; int C1_i; ... // cac field dư liøu ₫iø̀u khiø̉n // tư tao bơi chương trěnh dịch void (*pvfaddr)() ; } C1; 29 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 57 Dịch thuöc tñnh dư liïu (tt) • mú̃i class → 1 record cú̉ ₫iø̉n. • tøn class → tøn record. • copy cac field dư liøu cua cö́u truc sinh ra tư class cha. • chuyø̉n tưng thuúc tĚnh cua class thanh tưng field cua record, 'tuyøt ₫ú́i hoa' tøn cua thuúc tĚnh ₫ø̉ tranh nhăp nhăng. • thøm cac field dư liøu ₫iø̀u khiø̉n phuc vu cho run-time : thĚ du bang ₫ịa chỉ cac method cua ₫ú́i tương (pvftbl). Chương 3: Nguyøn tăc dịch OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 58 Dịch thuöc tñnh dư liïu (tt) • cö́u truc record ₫ươc dịch ra ma may thanh 1 vung nhơ liøn tuc co ₫ú dai băng ₫ú dai cua record. - field C1 o1; C1_o1 db dup (sizeof(C1)) • truy xuö́t 1 thuúc tĚnh dư liøu trơ thanh viøc truy xuö́t ú nhơ dung cach ₫ịnh ₫ịa chỉ chỉ sú́ : - o1.i = 5; mov bx, C1_o1 mov [bx+4], 5 Chương 3: Nguyøn tăc dịch OOP 30 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 59 class C1 : C0 { int i ; double d; ... public : int proc4(int i, double k); void proc5 (double d); ... }; Tao bang ₫ịa chỉ cac method 0 "proc1" C0_proc1 1 "proc2" C1_proc2 2 "proc3" C0_proc3 3 "proc4" C1_proc4 4 "proc5" C1_proc5 5 .... ... fname faddr pvftbl Chương 3: Nguyøn tăc dịch OOP Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 60 Tao bang ₫ịa chỉ cac method (tt) • tao bang ₫ịa chỉ gú̀m C1METHCNT phö̀n tư (C1METHCNT la sú́ method cua class hiøn hanh, kø̉ ca cac method thưa kǿ. • mú̃i phö̀n tư ₫ươc nhön dang qua chỉ sú́ va gú̀m 2 thúng tin chĚnh : tøn gơi nhơ cua method va ₫ịa chỉ cua method. • copy bang ₫ịa chỉ cua class cha ₫a co. • hiøu chỉnh lai cac ₫ịa chỉ cua cac method bị override. • thøm vao cac method mơi ₫ịnh nghĩa trong class hiøn hanh. Chương 3: Nguyøn tăc dịch OOP 31 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 61 Chương 3: Nguyøn tăc dịch OOP int C1::proc1(int i,double k) { C2 o2; C2 *p2; C1::i = i; d = k; proc5(d); o2.proc2(i,d); p2 = New(C2); p2->proc2(i,d); .... }; Dịch 1 method int C1_proc1(C1* p, int i, double d) { C2 o2; C2 *p2; // truy xuö́t thuúc tĚnh p->C1_i = i; p->C1_d = d; // goi ham C1_proc5(p,d); C2_proc2(&o2, i,d); // gơi thúng bao : kiø̉m tra, load, // anh xa bang ₫ịa chỉ method for (i = 0; i <C1METHCNT; i ++) if (strcmp ("proc2", p2-> pvftbl[i].fname)==0) break; (*pvftbl[i].faddr)(p2,i,d); }; 1 2 3 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 62 Chương 3: Nguyøn tăc dịch OOP Dịch 1 method (tt) • tøn method ₫ươc chuyø̉n tư dang 'tương ₫ú́i' sang 'tuyøt ₫ú́i' (nú́i kǿt tøn class vao). • thøm tham sú́ ₫ö̀u tiøn cho ham sinh ra : miøu ta tham khao ₫ǿn ₫ú́i tương ma ham se truy xuö́t cac thuúc tĚnh dư liøu. • tøn thuúc tĚnh ₫ươc chuyø̉n tư dang 'tương ₫ú́i' sang 'tuyøt ₫ú́i' (nú́i kǿt tøn class vao). • goi ham internal → goi ham nhưng thøm tham sú́ ₫ö̀u tiøn. • gơi thúng bao 3 bươc : — kiø̉m tra, těm, load va anh xa bang ₫ịa chỉ cac method cua ₫ú́i tương. — těm chỉ sú́ cua method cö̀n goi trong bang (i). — goi gian tiǿp method thúng qua ₫ịa chỉ phö̀n tư thư i trong bang. 32 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 63 Chương 3: Nguyøn tăc dịch OOP Tö́i ưu hoa code tao ra • co 2 vö́n ₫ø̀ lơn trong qua trěnh dịch 1 class sang ngún ngư cú̉ ₫iø̉n. — bang ₫ịa chỉ method chiǿm nhiø̀u chú̃. — tú́n thơi gian ₫ø̉ phuc vu lønh gơi thúng bao : kiø̉m tra, load va anh xa bang ₫ịa chỉ, těm chỉ sú́ method cö̀n goi va goi gian tiǿp qua ₫ịa chỉ trong bang. • 1 sú́ chương trěnh dịch těm cach tú́i ưu hoa cac vö́n ₫ø̀ nay. • slide sau la cac tú́i ưu hoa cua chương trěnh dịch C++ va cai gia phai tra. Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 64 Chương 3: Nguyøn tăc dịch OOP Tö́i ưu hoa code tao ra (tt) • trong C++, tö́t ca ₫ú́i tương ₫ø̀u tam thơi va găn chăt vao ưng dung→ bang ₫ịa chỉ cac method cua cac ₫ú́i tương luún năm săn trong khúng gian cua ưng dung. • mú̃i lö̀n tao ₫ú́i tương, biǿn pvftbl trong ₫ú́i tương ₫ươc gan ngay ₫ịa chỉ ₫ö̀u bang method → khúng cö̀n lam bươc 1 cho mú̃i lö̀n gơi thúng bao. • C++ chỉ dung mú́i quan hø con/cha trong kiø̉m tra kiø̉u→ cúng viøc 2 ₫ươc lam tai thơi ₫iø̉m dịch thay vě tai thơi ₫iø̉m gơi thúng bao trong luc chay. • cút tøn gơi nhơ method khúng cö̀n phai lưu trư trong bang ₫ịa chỉ cac method. • chỉ co cac virtual function mơi ₫ươc giai quyǿt theo cơ chǿ ₫a hěnh, con cac function khac ₫ươc dịch ra lơi goi trưc tiǿp. 33 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 65 Chương 3: Nguyøn tăc dịch OOP Tö́i ưu hoa code tao ra (tt) • cai gia phai tra cua viøc tú́i ưu hoa trong C++ : — ngươi löp trěnh phai tư quyǿt ₫ịnh method nao cö̀n xư ly theo cơ chǿ ₫a hěnh, ham nao khúng ? Nǿu sư quyǿt ₫ịnh nay sai thě se göy lú̃i khi chay, ma la ngươi thě kho long quyǿt ₫ịnh chĚnh xac. — tĚnh ₫a hěnh chỉ ₫ung giưa cac ₫ú́i tương co mú́i quan hø con/cha, ơ ₫o thư tư cac ₫ịa chỉ method cua moi class con trong bang ₫ịa chỉ luún giú́ng thư tư cac method tương ưng cua class cha, tuy nhiøn giưa 2 class bö́t ky thě khúng thø̉ ₫am bao→ kiø̉m tra kiø̉u trong C++ khúng thø̉ nöng cö́p løn băng cach dung mú́i quan hø "conformity". Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 66 Trương Đai Hoc Bach Khoa Tp. HCM Khoa Cöng nghï Thöng tin Chương 4 QUI TRÒNH HƠP NHÊT & UML ) Qui trònh phat triï̉n phền mï̀m hơp nhết ) Tö̉ng quat vï̀ ngön ngư mö hònh UML Chương 4: UML & Qui trěnh hơp nhö́t 34 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 67 New or changed requirements New or changed system Software Engineering Process What Is a Process? • Defines Who is doing What, When to do it, and How to reach a certain goal. Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 68 Key concepts • Cycle • Phase, Iterations • Process Workflows — Activity, steps • Artifacts — models — reports, documents • Worker: Architect What does happen? What is produced? Who does it? When does architecture happen? Chương 4: UML & Qui trěnh hơp nhö́t When does product happen? 35 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 69 Key concepts Chương 4: UML & Qui trěnh hơp nhö́t Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle i Cycle n time Phase Arch Iteration ... Dev Iteration Dev Iteration ... Trans Iteration ... Release Release Release Release Release Release Release Release Prelim Iteration ... Inception Elaboration Construction Transition Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 70 Lifecycle Phases time Inception Elaboration Construction Transition • Inception Define the scope of the project and develop business case • Elaboration Plan project, specify features, and baseline the architecture • Construction Build the product • Transition Transition the product to its users Chương 4: UML & Qui trěnh hơp nhö́t 36 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 71 Major Milestones time Vision Baseline Architecture Initial Capability Product Release Inception Elaboration Construction Transition Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 72 Phases and Iterations An iteration is a sequence of activities with an established plan and evaluation criteria, resulting in an executable release Arch Iteration ... Dev Iteration Dev Iteration ... Trans Iteration ... Release Release Release Release Release Release Release Release Prelim Iteration ... Inception Elaboration Construction Transition Chương 4: UML & Qui trěnh hơp nhö́t 37 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 73 Iterations and Workflow P re lim in a ry Ite ra tio n (s ) ite r. # 1 ite r. # 2 ite r. # n ite r. #n + 1 ite r. # n +2 ite r. # m ite r. #m +1 Inception Elaboration Construction Transition Ite ra t io n s Phases Core Workflows An iteration in the elaboration phase Requirements Design Implementation Test Analysis Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 74 Workflows and Models Requirements Design Implementation Test Analysis Use Case Model Design Model Depl. Model Impl. Model Analysis Model Test Model UML diagrams provide views into each model Each workflow is associated with one or more models. Chương 4: UML & Qui trěnh hơp nhö́t 38 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 75 Use Case Model Use Case Diagrams Collaboration Diagrams Component Diagrams Deployment Diagrams Object Diagrams Statechart Diagrams Sequence Diagrams Class Diagrams Activity Diagrams Use Case Model Design Model Depl. Model Impl. Model Analysis Model Test Model Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 76 Analysis & Design Model Use Case Diagrams Collaboration Diagrams Component Diagrams Deployment Diagrams Object Diagrams Statechart Diagrams Sequence Diagrams Class Diagrams Activity Diagrams Use Case Model Design Model Depl. Model Impl. Model Analysis Model Test Model Incl. subsystems and packages Chương 4: UML & Qui trěnh hơp nhö́t 39 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 77 Deployment and Implementation Model Use Case Diagrams Collaboration Diagrams Component Diagrams Deployment Diagrams Object Diagrams Statechart Diagrams Sequence Diagrams Class Diagrams Activity Diagrams Use Case Model Design Model Depl. Model Impl. Model Analysis Model Test Model Incl. active classes and components Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 78 Test Model Use Case Diagrams Collaboration Diagrams Component Diagrams Deployment Diagrams Object Diagrams Statechart Diagrams Sequence Diagrams Class Diagrams Activity Diagrams Use Case Model Design Model Depl. Model Impl. Model Analysis Model Test Model Test model refers to all other models and uses corresponding diagrams Chương 4: UML & Qui trěnh hơp nhö́t 40 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 79 Overview of the Unified Process • The Unified Process is — Iterative and incremental — Use case driven — Architecture-centric — Risk confronting Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 80 Use Case Driven Req.ts Impl. Test Use Cases bind these workflows together Analysis Design Chương 4: UML & Qui trěnh hơp nhö́t 41 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 81 Use Cases Drive Iterations • Drive a number of development activities — Creation and validation of the system’s architecture — Definition of test cases and procedures — Planning of iterations — Creation of user documentation — Deployment of system • Synchronize the content of different models Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 82 Architecture-Centric • Models are vehicles for visualizing, specifying, constructing, and documenting architecture • The Unified Process prescribes the successive refinement of an executable architecture time Architecture Inception Elaboration Construction Transition Chương 4: UML & Qui trěnh hơp nhö́t 42 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 83 Overview of the UML • The UML is a language for — visualizing — specifying — constructing — documenting the artifacts of a software-intensive system • There are 4 key elements : — Modeling elements — Relationships — Extensibility Mechanisms — Diagrams Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 84 Modeling Elements • Structural elements — class, interface, collaboration, use case, active class, component, node • Behavioral elements — interaction, state machine • Grouping elements — package, subsystem • Other elements — note Chương 4: UML & Qui trěnh hơp nhö́t 43 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 85 Relationships • Dependency • Association • Generalization • Realization Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 86 Extensibility Mechanisms • Stereotype • Tagged value • Constraint Chương 4: UML & Qui trěnh hơp nhö́t 44 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 87 Models, Views, and Diagrams Use Case DiagramsUse CaseDiagramsUse CaseDiagrams Scenario DiagramsScenarioDiagramsCollaborationDiagrams State DiagramsStateDiagramsComponentDiagrams Component DiagramsComponent DiagramsDeployment Diagrams State DiagramsStateDiagramsObjectDiagrams Scenario DiagramsScenarioDiagramsStatechartDiagrams Use Case DiagramsUse CaseDiagramsSequenceDiagrams State DiagramsStateDiagramsClassDiagrams Activity Diagrams A model is a complete description of a system from a particular perspective Models Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 88 Diagrams • A diagram is a view into a model — Presented from the aspect of a particular stakeholder — Provides a partial representation of the system — Is semantically consistent with other views • In the UML, there are nine standard diagrams — Static views: use case, class, object, component, deployment — Dynamic views: sequence, collaboration, statechart, activity Chương 4: UML & Qui trěnh hơp nhö́t 45 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 89 Use Case Diagram • Captures system functionality as seen by users Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 90 Use Case Diagram • Captures system functionality as seen by users • Built in early stages of development • Purpose — Specify the context of a system — Capture the requirements of a system — Validate a system’s architecture — Drive implementation and generate test cases • Developed by analysts and domain experts Chương 4: UML & Qui trěnh hơp nhö́t 46 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 91 Class Diagram • Captures the vocabulary of a system Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 92 Class Diagram • Captures the vocabulary of a system • Built and refined throughout development • Purpose — Name and model concepts in the system — Specify collaborations — Specify logical database schemas • Developed by analysts, designers, and implementers Chương 4: UML & Qui trěnh hơp nhö́t 47 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 93 Object Diagram • Captures instances and links Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 94 Object Diagram • Shows instances and links • Built during analysis and design • Purpose — Illustrate data/object structures — Specify snapshots • Developed by analysts, designers, and implementers Chương 4: UML & Qui trěnh hơp nhö́t 48 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 95 Component Diagram • Captures the physical structure of the implementation Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 96 Component Diagram • Captures the physical structure of the implementation • Built as part of architectural specification • Purpose — Organize source code — Construct an executable release — Specify a physical database • Developed by architects and programmers Chương 4: UML & Qui trěnh hơp nhö́t 49 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 97 Deployment Diagram • Captures the topology of a system’s hardware Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 98 Deployment Diagram • Captures the topology of a system’s hardware • Built as part of architectural specification • Purpose — Specify the distribution of components — Identify performance bottlenecks • Developed by architects, networking engineers, and system engineers Chương 4: UML & Qui trěnh hơp nhö́t 50 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 99 Sequence Diagram • Captures dynamic behavior (time- oriented) • Purpose — Model flow of control — Illustrate typical scenarios Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 100 Collaboration Diagram • Captures dynamic behavior (message-oriented) • Purpose – Model flow of control – Illustrate coordination of object structure and control Chương 4: UML & Qui trěnh hơp nhö́t 51 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 101 Statechart Diagram • Captures dynamic behavior (event-oriented) • Purpose — Model object lifecycle — Model reactive objects (user interfaces, devices, etc.) Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 102 Activity Diagram • Captures dynamic behavior (activity- oriented) • Purpose — Model business workflows — Model operations Chương 4: UML & Qui trěnh hơp nhö́t 52 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 103 Architecture and the UML Organization Package, subsystem Dynamics Interaction State machine Design View Implementation View Process View Components Classes, interfaces, collaborations Active classes Deployment View Nodes Use Case View Use cases Chương 4: UML & Qui trěnh hơp nhö́t Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 104 Architecture and Models Architecture embodies a collection of views of the models Views Models Use Case Model Design Model Depl. Model Impl. Model Test Model Analysis Model Chương 4: UML & Qui trěnh hơp nhö́t 53 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 105 Trương Đai Hoc Bach Khoa Tp. HCM Khoa Cöng nghï Thöng tin Chương 5 NĂÆM BĂÆT YÏU CÊU HĐT ƒ Cac artifacts cền tao ra ƒ Cac workers tham gia ƒ Qui trònh phên tñch Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 106 Muc ₫Ěch cua hoat ₫úng năm băt yøu cö̀u la xöy dưng mú hěnh hø thú́ng ma se ₫ươc xöy dưng băng cach dung cac use-case. Cac ₫iø̉m băt ₫ö̀u cho hoat ₫úng nay kha ₫a dang : ƒ tư mú hěnh nghiøp vu (business model) cho cac ưng dung nghiøp vu. ƒ tư mú hěnh lĩnh vưc (domain model) cho cac ưng dung nhung (embeded). ƒ tư ₫ăc ta yøu cö̀u cua hø thú́ng nhưng ₫ươc tao bơi nhom khac va/hoăc dung cac phương phap ₫ăc ta khac (thĚ du như hương cö́u truc). ƒ tư 1 ₫iø̉m nao ₫o năm giưa cac ₫iø̉m xuö́t phat trøn. M u  c ₫ È c h c u  a h o a  t ₫é  n g n ă  m b ă  t yãu cÝ ̀ u Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 54 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 107  Mú hěnh use-case : ƒ actor : ngươi/hø thú́ng ngoai/thiǿt bị ngoai tương tac vơi hø thú́ng ƒ use-case : cac chưc năng co nghĩa cua hø thú́ng cung cö́p cho actor. — flow of events — cac yøu cö̀u ₫ăc biøt cua use-case ƒ ₫ăc ta kiǿn truc (view of use-case model) ƒ bang thuöt ngư ƒ cac prototype giao diøn vơi user (user-interface prototype) C a c artifa ct s c Ý ̀ n ta  o r a tr o n g n ă  m b ă  t yãu c Ý ̀ u Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 108 Use-Case Model Actor Use-Case System Use - Case * 1 * C a c artifa ct s c Ý ̀ n ta  o r a tr o n g n ă  m b ă  t yãu c Ý ̀ u Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 55 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 109 Use-Case Model System Analyst chịu trach nhiøm vø̀ Use-case Specifier User-Interface Designer Architect chịu trach nhiøm vø̀ chịu trach nhiøm vø̀ chịu trach nhiøm vø̀ Architecture Description User Interface Prototype Use-CaseGlossaryActor C a c w o r k er s tr o n g n ă  m b ă  t yãu c Ý ̀ u Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 110 Architect Use-Case Specifier Find Actors & Use-Cases Q u i trÉnh n ă  m b ă  t yãu c Ý ̀ u User-Interface Designer System Analyst Structure the Use-Case Model Prioritize Use-Cases Detail a Use-Case Prototype User-Interface Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 56 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 111 Muc ₫Ěch nhön dang actor va use-case la ₫ø̉ : ƒ Giơi han hø thú́ng vơi múi trương bao quanh no. ƒ Phat hoa ai va cac gě se tương tac vơi hø thú́ng va hø thú́ng cung cö́p cac chưc năng gě. ƒ Năm băt va ₫ịnh nghĩa danh sach cac thuöt ngư chung thiǿt yǿu cho viøc tao cac ₫ăc ta vø̀ cac chưc năng cua hø thú́ng. Hoat ₫úng nay gú̀m 4 bươc : ƒ Těm cac actor cua hø thú́ng. ƒ Těm cac use cases cua hø thú́ng. ƒ Miøu ta văn tăt vø̀ tưng use-case. ƒ Miøu ta toan thø̉ mú hěnh use-case. T É m A ct o r s & U s e c a s e s Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 112 Viøc těm cac actor phu thuúc vao ₫iø̉m xuö́t phat : nǿu xuö́t phat tư mú hěnh nghiøp vu hay mú hěnh lĩnh vưc thě viøc těm actor rö́t ₫ơn gian. Con nǿu xuö́t phat tư cac y niøm mơ hú̀ thě hay tra lơi cac cöu hoi sau : ƒ Ai la ngươi sư dung chưc năng chĚnh cua hø thú́ng ? ƒ Ai cö̀n sư hú̃ trơ tư hø thú́ng ₫ø̉ thưc hiøn cúng viøc thương nhöt cua ho ? ƒ Ai phai thưc hiøn cúng viøc bao dương, quan trị va giư cho hø thú́ng hoat ₫úng ? ƒ Hø thú́ng se kiø̉m soat thiǿt bị phö̀n cưng nao ? ƒ Hø thú́ng ₫ang xöy dưng cö̀n tương tac vơi nhưng hø thú́ng khac khúng ? Hø thú́ng nao ? ƒ Ai hoăc vöt thø̉ nao quan töm ₫ǿn hay chịu anh hương bơi kǿt qua ma hø thú́ng phö̀n mø̀m tao ra ? T É m A ct o r s Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 57 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 113 Viøc těm cac use-case phu thuúc vao ₫iø̉m xuö́t phat : nǿu xuö́t phat tư mú hěnh nghiøp vu hay mú hěnh lĩnh vưc thě viøc těm use-case rö́t ₫ơn gian. Con nǿu xuö́t phat tư cac y niøm mơ hú̀ thě hay tra lơi cac cöu hoi sau : ƒ Actor yøu cö̀u chưc năng gě cua hø thú́ng ? ƒ Actor cö̀n phai ₫oc, tao, xoa, sưa ₫ú̉i hoăc lưu trư thúng tin nao cua hø thú́ng ? ƒ Actor cö̀n thiǿt phai ₫ươc canh bao vø̀ nhưng sư kiøn trong hø thú́ng, hay actor cö̀n phai bao hiøu cho hø thú́ng vø̀ vö́n ₫ø̀ nao ₫o khúng ? ƒ Hø thú́ng co thø̉ hú̃ trơ mút sú́ cúng viøc thương nhöt cua actor nao ₫o khúng ? T É m U s e-C a s e s Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 114 Mú̃i use-case sau khi těm ₫ươc, nøn ₫ươc ₫ăt tøn, ₫ươc miøu ta băng vai cöu tú̉ng kǿt cac hoat ₫úng rú̀i sau ₫o ₫ăc ta tưng bươc hø thú̀ng cö̀n gě ₫ø̉ tương tac vơi actor. Dung lươc ₫ú̀ va cac flow of events ₫ø̉ miøu ta mú hěnh use-case tú̉ng thø̉, ₫ăc biøt la cac mú́i quan hø giưa cac use-case va vơi actor. Quan hø giưa cac actors : tú̉ng quat hoa (generalization). Quan hø giưa actor va use-case : liøn kǿt (association). Quan hø giưa cac use-cases : ƒ tú̉ng quat hoa. ƒ include ƒ extend M iãu ta  văn tăt tưng U s e- C a s e s Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 58 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 115 Cac né́i quan hã giưa cac actor va use-cases Actor A Use-Case X Use-Case Y Actor B Use-Case Z Use-Case B Use-Case C Use-Case D Use-Case A > > Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 116 Store Manager Add New User Remove User Edit User Information POS LoginUser Maintenance <<exten... > > > Cac né́i quan hã giưa cac use-cases va use-cases Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 59 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 117 C ustom er R etail S tore Cu stom er Telephone C ustom er Online Custom er Cus tomers Cac né́i quan hã giưa cac actor va actor Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Quan hø giưa cac actors : tú̉ng quat hoa (generalization). ThĚ du Customer la actor tú̉ng quat hoa cua cac actor Online Customer, Telephone Customer, Retail Store Customer. Lưu y actor tú̉ng quat hoa thương khúng co thöt, no la phö̀n tư trưu tương. Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 118 Lươc ₫é̀ use-case Sales:From Order to Delivery Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Perform Transaction Buyer Order Goods & Services Confirm Order Invoice Buyer Send Reminders Seller Accounting System Pay Overdraft Fee Pay Invoice > Ini tiator Initiator Initiator Initiator Initiator 60 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 119 Lươc ₫é̀ trang thai cua use-case Pay Invoice Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Browsing Invoice Scheduled Invoice Paid Invoice Cancelled rejectschedule pay on due date Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 120 Xöy dưng cac lươc ₫ú̀ use-case va cac ₫ăc ta giai thĚch mú hěnh use- case, nhö́t la cach thưc ma cac use-case quan hø vơi nhau hay vơi cac actor : ƒ lươc ₫ú̀ miøu ta cac use-case phuc vu cho 1 actor hay 1 use-case nghiøp vu. ƒ ₫ø̉ ₫am bao tĚnh nhö́t quan khi miøu ta nhiø̀u use-case ₫ú̀ng thơi, nøn xöy dưng 1 bang thuö ngư chung (glossary). ƒ mú hěnh use-case co thø̉ ₫ươc tú̉ chưc dang cöy thư böc nhơ cac package use-case. ƒ xöy dưng ₫ăc ta "survey" cho mú hěnh use-case tú̉ng thø̉ va nhơ khach hang va ngươi dung kiø̉m tra, ₫anh gia lai. Miãu ta té̉ng thã̉ mé hÉnh Use-Cases Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 61 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 121 ƒ cac use-case těm ₫ươc khúng phai thiǿt yǿu như nhau, do ₫o kiǿn truc sư cö̀n săp xǿp thư tư ưu tiøn chung ₫ø̉ xac ₫ịnh use-case nao nøn ₫ươc phat 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 use-case Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 122 Muc ₫Ěch la ₫ăc ta "flow of events" cho tưng use-case : ƒ cö́u truc ₫ăc ta use-case. ƒ ₫ăc ta use-case bao gú̀m nhưng gě. ƒ hěnh thưc hoa ₫ăc ta use-case. Cö́u truc ₫ăc ta use-case : ƒ gú̀m 1 luú̀ng cúng viøc cơ ban va cac luú̀ng phu. Cac luú̀ng phu co thø̉ xay ra vě cac ly do : ƒ Actor co thø̉ chon thưc hiøn 1 trong nhiø̀u nhanh. ƒ Nǿu hơn 1 actor dung use-case, cac hoat ₫úng cua ho co thø̉ anh hương lö̃n nhau. ƒ Hø thú́ng co thø̉ phat hiøn lú̃i nhöp tư actor. ƒ 1 sú́ tai nguyøn khúng hoat ₫úng tú́t lam cho use-case khúng hoan tö́t cúng viøc ₫ung cua no. Chi tiã́t hoa Use-Case Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 62 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 123 ƒ nøn ₫ịnh nghĩa trang thai băt ₫ö̀u. ƒ khi nao va cach nao use-case băt ₫ö̀u. ƒ thư tư cac hoat ₫úng ₫ươc thưc hiøn. ƒ khi nao va cach nao use-case kǿt thuc. ƒ nøn ₫ịnh nghĩa trang thai kǿt thuc. ƒ khúng cho phep nhiø̀u 'path' thưc thi. ƒ Co thø̉ miøu ta luú̀ng thi hanh phu trong ₫ăc ta luú̀ng cơ ban. ƒ Đăc ta luú̀ng phu ₫ươc rut trĚch tư luú̀ng cơ ban. ƒ Tương tac giưa hø thú́ng va actor va chung trao ₫ú̉i nhưng gě. ƒ Viøc dung cac ₫ú́i tương, gia trị, tai nguyøn trong hø thú́ng. ƒ Phai miøu ta ro rang hø thú́ng lam gě va actor lam gě. Đăc ta use-case gé̀m nhưng gÉ ? Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 124 Khi sư tương tac giưa actor va use-case gú̀m nhiø̀u trang thai phưc tap ta nøn dung ky thuöt mú hěnh trưc quan ₫ø̉ diø̃n ta use- case vě no giup nha phön tĚch hiø̉u ro hơn vø̀ use-case : ƒ lươc ₫ú̀ trang thai UML co thø̉ ₫ươc dung ₫ø̉ miøu ta trang thai cua use-case va sư chuyø̉n giưa cac trang thai. ƒ lươc ₫ú̀ hoat ₫úng co thø̉ ₫ươc dung ₫ø̉ miøu ta sư chuyø̉n trang thai chi tiǿt hơn dươi dang cac hoat ₫úng. ƒ lươc ₫ú̀ tương tac co thø̉ ₫ươc dung ₫ø̉ miøu ta cac tương tac giưa ₫ú́i tương use-case va ₫ú́i tương actor. Khúng nøn lam dung cac lươc ₫ú̀ vě ₫öy la ngún ngư cua nha phat triø̉n, cac khach hang va ngươi dung kho long hiø̉u nú̉i. HÉnh thưc hoa use-case (Formalizing) Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 63 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 125 Mú hěnh use-case ₫ươc cö́u truc lai ₫ø̉ : ƒ rut trĚch cac use-case tú̀ng quat va dung chung bơi cac use- case ₫ăc biøt hơn. ƒ rut trĚch cac use-case nhiøm y va phu thøm ₫ø̉ nơi rúng use- case khac. Trươc khi hoat ₫úng nay xay ra : ƒ nha phön tĚch ₫a nhön diøn tương ₫ú́i ₫ö̀y ₫u cac actor va use-case, miøu ta chung trong cac lươc ₫ú̀ ₫ø̉ cö́u thanh mú hěnh use-case tú̉ng thø̉. ƒ ngươi ₫ăc ta use-case ₫a phat triø̉n ₫ăc ta chi tiǿt cho mú̃i use-case. CÝ́u truc lai mé hÉnh Use-Case Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 126 Cac cúng viøc cu thø̉ : ƒ Nhön dang cac use-case tú̉ng quat ₫ươc dung chung. ƒ Nhön dang cac use-case co quan hø "extend". ƒ Nhön dang cac use-case co quan hø "include". Mút sú́ ₫iø̀u lưu y : ƒ Cö́u truc cac use-case va mú́i quan hø giưa chung nøn phan anh cac chưc năng thưc tǿ. ƒ Mú̃i use-case cö̀n ₫ươc xư ly như 1 artifact riøng biøt, do ₫o khúng nøn chon use-case qua lơn hay qua nho. ƒ Tranh chia nho use-case. CÝ́u truc lai mé hÉnh Use-Case Chương 5: Năm băt yøu cö̀u hương ₫ú́i tương 64 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 127 Trương Đai Hoc Bach Khoa Tp. HCM Khoa Cöng nghï Thöng tin Chương 6 PHÊN TÑCH HƯƠNG ĐÖI TƯƠNG ƒ Cac artifacts cền tao ra ƒ Cac workers tham gia ƒ Qui trònh phên tñch Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 128 Muc ₫Ěch cua hoat ₫úng phön tĚch yøu cö̀u la xöy dưng mú hěnh phön tĚch vơi cac ₫ăc ₫iø̉m sau : ƒ dung ngún ngư cua nha phat triø̉n ₫ø̉ miøu ta mú hěnh. ƒ thø̉ hiøn goc nhěn tư bøn trong cua hø thú́ng. ƒ ₫ươc cö́u truc tư cac class phön tĚch va cac package phön tĚch. ƒ ₫ươc dung chu yǿu bơi nha phat triø̉n ₫ø̉ hiø̉u cach thưc tao hěnh dang hø thú́ng. ƒ loai trư moi chi tiǿt dư thưa, khúng nhö́t quan. ƒ phat hoa cac hiøn thưc cho cac chưc năng bøn trong hø thú́ng. ƒ ₫ịnh nghĩa cac dö̃n xuö́t use-case, mú̃i dö̃n xuö́t use-case cö́p phön tĚch miøu ta sư phön tĚch 1 use-case. Muc ₫Èch cua phÝn tÈch yãu cÝ̀u Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 65 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 129  Mú hěnh phön tĚch = hø thú́ng phön tĚch : ƒ cac class phön tĚch — boundary class — entity class. — control class ƒ cac dö̃n xuö́t use-case cö́p phön tĚch : — cac lươc ₫ú̀ class phön tĚch — cac lươc ₫ú̀ tương tac (cúng tac,...). — 'flow of events' ơ cö́p phön tĚch — cac yøu cö̀u ₫ăc biøt cua use-case ƒ cac package phön tĚch ƒ ₫ăc ta kiǿn truc (view of analysis model) Cac artifacts cÝ̀n tao ra trong phÝn tÈch yãu cÝ̀u Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 130 Analysis Model Analysis System Use-Case Realization - Analysis Analysis Class Analysis Package Cac artifacts cÝ̀n tao ra trong phÝn tÈch yãu cÝ̀u * * ** * *1 Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 66 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 131 Analysis Model Use-Case Engineer Component EngineerArchitect Architecture Description Use-Case Realization - Analysis Analysis class Analysis package chịu trach nhiøm vø̀ chịu trach nhiøm vø̀ chịu trach nhiøm vø̀ Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Cac workers trong phÝn tÈch yãu cÝ̀u Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 132 Architect Use-Case Engineer Architectural Analysis Analyze a Use-Case Analyze a Class Analyze a Package Qui trÉnh phÝn tÈch yãu cÝ̀u Component Engineer Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 67 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 133 Muc ₫Ěch cua phön tĚch kiǿn truc la phat hoa mú hěnh phön tĚch va kiǿn truc hø thú́ng băng cach nhön dang cac package phön tĚch, cac class phön tĚch dø̃ thö́y va cac yøu cö̀u ₫ăc biøt chung cho hø thú́ng. Cac package phön tĚch giup tú̉ chưc hø thú́ng thanh nhưng ₫ơn vị nho dø̃ quan ly. Mú̃i package chưa 1 sú́ use-case vơi tĚnh chö́t sau : ƒ cac use-case hú̃ trơ cho cung 1 qui trěnh nghiøp vu. ƒ cac use-case hú̃ trơ cho cung 1 actor. ƒ cac use-case co quan hø lö̃n nhau : tú̉ng quat hoa, include va extend. Theo thơi gian, khi viøc phön tĚch tiǿn triø̉n, sư tinh chǿ cö́u truc cac package se tiǿn triø̉n theo. PhÝn tÈch kiã́n truc : nhÝn dang cac package phÝn tÈch Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 134 Co 3 loai (stereotype) class phön tĚch : ƒ class biøn (boundary class) mú hěnh sư tương tac giưa actor va hø thú́ng ƒ class thưc thø̉ (entity class) mú hěnh thúng tin cö̀n cho hø thú́ng, loai thúng tin co tĚnh bø̀n vưng, tú̀n tai löu dai. ƒ class ₫iø̀u khiø̉n (control class) mú hěnh viøc xư ly, cúng tac, giao tac trong use-case. 3 loai class phÝn tÈch Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Boundary class Entity class Control class 68 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 135 Tư cac class lĩnh vưc hay cac class nghiøp vu trong bươc năm băt yøu cö̀u, ₫ø̀ nghị 1 sú́ class thưc thø̉ quan trong nhö́t (tư 10-20). Cac class phön tĚch con lai se ₫ươc nhön dang trong hoat ₫úng phön tĚch use-case. Cac yøu cö̀u ₫ăc biøt cung ₫ươc nhön dang ₫ø̉ ₫ươc xư ly trong cac bươc sau, chung gú̀m : ƒ tĚnh bø̀n vưng. ƒ sư phön tan & ₫ú̀ng thơi. ƒ cac tĚnh chö́t an toan dư liøu. ƒ ₫ø̀ khang vơi lú̃i. ƒ quan ly giao tac. TĚnh chö́t cua mú̃i yøu cö̀u ₫ăc biøt se ₫ươc cön nhăc sau trong tưng class va tưng dö̃n xuö́t use-case. PhÝn tÈch kiã́n truc : nhÝn dang cac class thưc thã̉ dã̃ thÝ́y Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 136 Phön tĚch use-case la ₫ø̉ : ƒ nhön dang cac class phön tĚch co ₫ú́i tương cua chung tham gia vao viøc thưc hiøn 'flow of events' cua use-case. ƒ phön phú́i hanh vi cua use-case băng cach cho cac ₫ú́i tương phön tĚch tương tac nhau. ƒ năm băt 1 sú́ yøu cö̀u ₫ăc biøt cho dö̃n xuö́t use-case. PhÝn tÈch use-case Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 69 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 137 Trong bươc nay ta nhön dang cac class ₫iø̀u khiø̉n, biøn, thưc thø̉ cö̀n thiǿt ₫ø̉ hiøn thưc use-case va phat hoa tøn, trach nhiøm, thuúc tĚnh va cac mú́i quan hø giưa chung. Dung cac hương dö̃n sau : ƒ nhön dang cac class thưc thø̉ băng cach chu y cac thúng tin trong ₫ăc ta use-case va trong mú hěnh lĩnh vưc. ƒ nhön dang class biøn cơ sơ cho mú̃i class thưc thø̉ vưa těm ₫ươc. ƒ nhön dang class biøn trung töm cho mú̃i actor la con ngươi. ƒ nhön dang class biøn trung töm cho mú̃i actor la hø thú́ng ngoai hay thiǿt bị I/O. ƒ nhön dang class ₫iø̀u khiø̉n co trach nhiøm xư ly trong dö̃n xuö́t use-case. Töp hơp cac class phön tĚch tham gia vao dö̃n xuö́t use-case thanh 1 (hay nhiø̀u) lươc ₫ú̀ class. PhÝn tÈch use-case : nhÝn dang cac class phÝn tÈch Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 138 Payment Request UI Order Configmation Order Handler Payment Request Payment Scheduler Invoice Buyer (f rom Use-Case Model) ThÈ du vã̀ lươc ₫é̀ class phÝn tÈch cho use-case Pay Invoice Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 70 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 139 Cö̀n chu y cac ₫iø̉m sau trong lươc ₫ú̀ cúng tac : ƒ p. tư actor gơi 1 thúng bao ₫ǿn class biøn ₫ø̉ kĚch hoat use-case. ƒ mú̃i class phön tĚch nøn co Ět nhö́t 1 ₫ú́i tương tham gia vao lươc ₫ú̀ cúng tac. ƒ chưa vúi kǿt hơp tac vu cu thø̉ cho thúng bao. ƒ cac mú́i nú́i trong lươc ₫ú̀ cúng tac thương la 'instance' cua mú́i quan hø kǿt hơp giưa cac class tương ưng. ƒ chưa töp trung vao thư tư thơi gian cac thúng bao. ƒ Lươc ₫ú̀ cúng tac nøn xư ly tö́t ca mú́i quan hø cua use-case ₫ươc hiøn thưc. ƒ cö̀n bú̉ sung ₫ăc ta dang văn ban vao lươc ₫ú̀ cúng tac, ₫ăc ta nay nøn ₫ươc ₫ø̉ vao 'flow of events cö́p phön tĚch". PhÝn tÈch use-case : miãu ta sư tương tac giưa cac ₫é́i tương phÝn tÈch Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 140 Cö̀n chu y cac ₫iø̉m sau trong lươc ₫ú̀ cúng tac : ƒ cac thúng ₫iøp ₫ươc ₫anh sú́ theo kiø̉u phön cö́p. — 3.4.2 xay ra sau 3.4.1 va ca 2 ₫ươc lú̀ng trong 3.4 — 3.4.3a va 3.4.3b xay ra ₫ú̀ng thơi va ₫ươc lú̀ng trong 3.4 ƒ cu phap tú̉ng quat cua 1 thúng ₫iøp : precedessor guard-condition sequence-expression return-value := message-name argument-list Vñ du : — 2/ 1.3.1: p := find(specs) — 1.1, 4.2/ 3.2 *[i:=1..6]: invert(x, color) Lươc ₫é̀ céng tac Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 71 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 141 Lươc ₫é̀ céng tac Cac thanh phö̀n cua lươc ₫ú̀ cúng tac : Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương : Buyer : Payment Scheduler : Payment Request UI : Invoice : Order Confirmation : Order Handler : Payment Request 1: Browse Invoice 4: Get 5: Get 6: Schedule InVoice for payment 8: New 2: Browse 9: setStatus(scheduled) 7: Schedule payment 3: Check Invoice Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 142 Muc ₫Ěch cua viøc phön tĚch class la : ƒ nhön dang va duy trě cac nghĩa vu, trach nhiøm cua class phön tĚch dưa vao vai tro cua no trong dö̃n xuö́t use-case. ƒ nhön dang va duy trě cac thuúc tĚnh va cac mú́i quan hø cua class phön tĚch. ƒ năm băt cac yøu cö̀u ₫ăc biøt liøn quan ₫ǿn viøc hiøn thưc class phön tĚch. PhÝn tÈch class Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 72 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 143 ƒ tú̉ hơp cac vai tro ma class ₫ong trong cac dö̃n xuö́t use-case khac nhau se cho ta 1 sú́ nghĩa vu cua class. ƒ nghiøn cưu cac lươc ₫ú̀ class va lươc ₫ú̀ tương tac trong cac dö̃n xuö́t use-case co class tham gia. ƒ ₫úi khi cö̀n nghiøn cưu 'flow of events cö́p phön tĚch' cua dö̃n xuö́t use-case ₫ø̉ těm thøm cac nghĩa vu cac class. PhÝn tÈch class : nhÝn dang cac nghĩa vu Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 144 Mú̃i nghĩa vu thương cö̀n 1 sú́ thuúc tĚnh. Dung cac hương dö̃n sau : ƒ tøn thuúc tĚnh nøn la danh tư. ƒ kiø̉u thuúc tĚnh ơ cö́p phön tĚch nøn ơ cö́p y niøm, chưa cö̀n kiø̉u cu thø̉, nøn dung lai kiø̉u ₫a co khi ₫ăc ta kiø̉u cho thuúc tĚnh mơi. ƒ nǿu class phön tĚch qua phưc tap, nøn tach 1 sú́ thuúc tĚnh phưc tap ra thanh class riøng. ƒ thuúc tĚnh cua class thưc thø̉ thương dø̃ thö́y. ƒ thuúc tĚnh cua class biøn giao tiǿp vơi ngươi thương miøu ta thúng tin ₫ươc xư ly bơi user như cac field text,... ƒ thuúc tĚnh cua class biøn giao tiǿp vơi hø thú́ng ngoai thương miøu ta cac tĚnh chö́t cua giao tiǿp. ƒ thuúc tĚnh cua class ₫iø̀u khiø̉n Ět khi co. ƒ ₫úi khi khúng cö̀n cac thuúc tĚnh hěnh thưc. PhÝn tÈch class : nhÝn dang cac thuéc tÈnh Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 73 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 145 Cac ₫ú́i tương tương tac nhau thúng qua cac lươc ₫ú̀ cúng tac. Cac mú́i liøn kǿt nay thương la 'instance' cua mú́i quan hø kǿt hơp giưa cac class. Cac mú́i liøn kǿt nay cung co thø̉ am chỉ nhu cö̀u vø̀ sư gúp nhiø̀u ₫ú́i tương. Mú́i quan hø gúp nøn ₫ươc dung khi cac ₫ú́i tương miøu ta : ƒ cac khai niøm chưa vöt ly khai niøm khac (xe chưa tai xǿ va khach) ƒ cac khai niøm ₫ươc xöy dưng tư cac khai niøm khac (xe gú̀m cac banh xe va ₫úng cơ). ƒ cac khai niøm tao thanh töp hơp y niøm nhiø̀u ₫ú́i tương (gia ₫ěnh gú̀m cha, me va con). Đø̉ rut trĚch cac hanh vi chung cua nhiø̀u class phön tĚch, ta co thø̉ dung class tú̉ng quat hoa, nhưng chỉ nøn ơ cö́p y niøm. PhÝn tÈch class : nhÝn dang mé́i quan hã giưa cac class Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 146 Muc ₫Ěch cua phön tĚch package la : ƒ ₫am bao tưng package phön tĚch ₫úc löp vơi cac package khac nhiø̀u như co thø̉ co. ƒ ₫am bao package phön tĚch hoan thanh muc ₫Ěch cua no la hiøn thưc 1 sú́ class lĩnh vưc hoăc 1 sú́ use-case. ƒ miøu ta cac phu thuúc sao cho co thø̉ ươc lương anh hương cua cac thay ₫ú̉i trong tương lai. Dung cac hương dö̃n sau : ƒ ₫am bao package chưa cac class ₫ung, cú́ găng cho tĚnh kǿt dĚnh cao băng cach gúp cac class co mú́i quan hø chưc năng. ƒ han chǿ tú́i ₫a sư phu thuúc giưa cac package, phön phú́i lai cac class qua phu thuúc vao package khac. PhÝn tÈch package Chương 6: Phön tĚch yøu cö̀u hương ₫ú́i tương 74 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 147 Trương Đai Hoc Bach Khoa Tp. HCM Khoa Cöng nghï Thöng tin Chương 7 THIÏT KÏ HƯƠNG ĐÖI TƯƠNG ƒ Cac artifacts cền tao ra ƒ Cac workers tham gia ƒ Qui trònh thiḯt kḯ Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 148 Muc ₫Ěch cua cúng viøc thiǿt kǿ la : ƒ ₫at tơi sư hiø̉u biǿt söu săc cac vö̀n ₫ø̀ vø̀ cac rang buúc va cac yøu cö̀u khúng chưc năng co liøn quan ₫ǿn ngún ngư löp trěnh, sư dung lai linh kiøn, HĐH, cúng nghø phön tan, ₫ú̀ng thơi, database, giao diøn, quan ly giao tac. ƒ tao ra ₫ö̀u vao cho hoat ₫úng hiøn thưc băng cach năm băt cac hø thú́ng con, cac interface va cac class. ƒ chia cúng viøc hiøn thưc ra nhiø̀u phö̀n dø̃ quan ly va xư ly bơi cac ₫úi khac nhau (co thø̉ ₫ú̀ng thơi). ƒ năm băt cac interface chĚnh giưa cac hø thú́ng con. ƒ co thø̉ hiø̉n thị trưc quan va xem xet bang thiǿt kǿ dung cac ky hiøu chung. ƒ tao ra mưc trưu tương cua sư hiøn thưc hø thú́ng. Muc ₫Èch cua thiã́t kã́ Chương 7: Thiǿt kǿ hương ₫ú́i tương 75 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 149 Chương 7: Thiǿt kǿ hương ₫ú́i tương  Mú hěnh thiǿt kǿ = hø thú́ng thiǿt kǿ : ƒ cac hø thú́ng con ƒ cac class thiǿt kǿ. ƒ cac interface cua hø thú́ng con va class. ƒ cac dö̃n xuö́t use-case cö́p thiǿt kǿ : — cac lươc ₫ú̀ class — cac lươc ₫ú̀ tương tac (trěnh tư, trang thai,...). — 'flow of events' ơ cö́p thiǿt kǿ. — cac yøu cö̀u cö́p hiøn thưc. ƒ ₫ăc ta kiǿn truc (view of design model)  Mú hěnh bú́ trĚ : ƒ ₫ăc ta kiǿn truc (view of deployment model) Cac artifacts cÝ̀n tao ra trong thiã́t kã́ Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 150 Desgin Class Design Model Desgin System Use-Case Realization - Design Interface Design Subsystem * * * * * * * *1 Chương 7: Thiǿt kǿ hương ₫ú́i tương Cac artifacts cÝ̀n tao ra trong thiã́t kã́ 76 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 151 Class thiǿt kǿ la sư trưu tương trưc tiǿp cua class hiøn thưc : ƒ dung ngún ngư löp trěnh ₫ø̉ miøu ta class thiǿt kǿ. ƒ thương xac ₫ịnh tö̀m vưc cua cac thanh phö̀n. ƒ cac mú́i quan hø co y nghĩa trưc tiǿp tơi hiøn thưc : tú̉ng quat hoa → thưa kǿ, quan hø gúp, kǿt hơp thanh thuúc tĚnh tương ưng. ƒ method trong thiǿt kǿ→ method trong hiøn thưc. ƒ co thø̉ delay viøc xư ly 1 sú́ yøu cö̀u tơi luc hiøn thưc. ƒ class thiǿt kǿ thương co stereotype tương ưng vơi ngún ngư löp trěnh : >, >, >... ƒ class thiǿt kǿ hiøn thưc (hay cung cö́p) 1 interface. ƒ co thø̀ co 1 sú́ class active, nhưng nøn tú̀n tai trong mú hěnh process thay vě trong mú hěnh thiǿt kǿ. Đăc ₫iã̉m cua class thiã́t kã́ Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 152 Use-Case Engineer Component Engineer chịu trach nhiøm vø̀ chịu trach nhiøm vø̀ chịu trach nhiøm vø̀ Desgin Model Deployment Model Architecture Description Use-Case Realization - Desgin Design class Design Subsystem Interface Chương 7: Thiǿt kǿ hương ₫ú́i tương Cac wokers trong hoat ₫éng thiã́t kã́ Architect 77 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 153 Architect Use-Case Engineer Architectural Design Design a Use-Case Design a Class Design a Subsystem Chương 7: Thiǿt kǿ hương ₫ú́i tương Qui trÉnh thiã́t kã́ Component Engineer Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 154 Muc ₫Ěch cua thiǿt kǿ kiǿn truc la phat hoa mú hěnh thiǿt kǿ va mú hěnh bú́ trĚ cung kiǿn truc cua chung băng cach nhön dang cac vö́n ₫ø̀ sau : ƒ Cac nut tĚnh toan va cac cö́u hěnh mang cua chung. ƒ Cac hø thú́ng con va interface cua chung. ƒ Cac class thiǿt kǿ co y nghĩa kiǿn truc như cac class chu ₫úng. ƒ Cac cơ chǿ thiǿt kǿ tú̉ng quat xư ly cac yøu cö̀u chung như tĚnh bø̀n vưng, hiøu qua,... (₫ươc năm băt trong cac class phön tĚch va cac dö̃n xuö́t use-case ơ cö́p phön tĚch. Chương 7: Thiǿt kǿ hương ₫ú́i tương Thiã́t kã́ kiã́n truc : muc ₫Èch 78 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 155 Chương 7: Thiǿt kǿ hương ₫ú́i tương Cö́u hěnh mang vöt ly se anh hương ₫ǿn kiǿn truc phö̀n mø̀m, gú̀m cac khĚa canh : ƒ cac nut nao liøn quan, kha năng vø̀ bú nhơ va cúng suö́t tĚnh cua nut. ƒ kiø̉u nú́i kǿt va kiø̉u giao thưc nao giưa cac nut. ƒ cac tĚnh chö́t vø̀ sư nú́i kǿt va giao thưc như băng thúng, ₫ú săn sang, chö́t lương... ƒ cö̀n kha năng tĚnh dư thưa, chǿ ₫ú ₫ø̀ khang lú̃i, di cư process, sao lưu dư liøu,... Thiã́t kã́ kiã́n truc : nhÝn dang nut va cÝ́u hÉnh mang Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 156 Chương 7: Thiǿt kǿ hương ₫ú́i tương Chia cúng viøc thiǿt kǿ tư ₫ö̀u hay khi mú hěnh thiǿt kǿ phat triø̉n thanh phưc tap cö̀n ₫ươc chia nho. Mút sú́ hø thú́ng con ₫ươc dung lai tư cac project khac : ƒ nhön dang cac hø thú́ng con cö́p ưng dung ƒ nhön dang cac hø thú́ng con cö́p giưa va cö́p hø thú́ng ƒ ₫ịnh nghĩa sư phu thuúc giưa cac hø thú́ng con. ƒ nhön dang giao tiǿp cua cac hø thú́ng con. Thiã́t kã́ kiã́n truc : nhÝn dang hã thé́ng con va interface cua chung 79 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 157 Chương 7: Thiǿt kǿ hương ₫ú́i tương Cö̀n nhön dang cac class thiǿt kǿ quan trong vø̀ măt kiǿn truc ₫ø̉ lam tiø̀n ₫ø̀ cho hoat ₫úng thiǿt kǿ, cac class khac se ₫ươc nhön dang trong viøc thiǿt kǿ use-case. ƒ nhön dang cac class thiǿt kǿ tư cac class phön tĚch tương ưng ƒ nhön dang cac class chu ₫úng khi chu y yøu cö̀u ₫ú̀ng thơi trøn hø thú́ng : — cac yøu cö̀u vø̀ hiøu qua, ₫ú săn sang, throughput cua hø thú́ng — sư phön tan cua hø thú́ng trøn cac nut. — cac yøu cö̀u khac như khơi ₫úng, kǿt thuc, tranh deadlock, tranh bao hoa, cö́u hěnh lai cac nut, kha năng nú́i kǿt. Thiã́t kã́ kiã́n truc : nhÝn dang cac class thiã́t kã́ quan trong vã̀ kiã́n truc Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 158 Chương 7: Thiǿt kǿ hương ₫ú́i tương Tư cac yøu cö̀u chung va ₫ăc biøt ₫a ₫ươc nhön dang trong phö̀n phön tĚch (trong cac class phön tĚch va cac dö̃n xuö́t use-case cö́p phön tĚch), quyǿt ₫ịnh cach xư ly chung dưa trøn cúng nghø hiøn thưc va thiǿt kǿ săn co. Kǿt qua la 1 töp cac cơ chǿ thiǿt kǿ tú̉ng quat. Cac yøu cö̀u cö̀n xư ly thương liøn quan ₫ǿn : ƒ tĚnh bø̀n vưng. ƒ sư phön tan & ₫ú̀ng thơi. ƒ cac tĚnh chö́t an toan dư liøu. ƒ ₫ø̀ khang vơi lú̃i. ƒ quan ly giao tac. Thiã́t kã́ kiã́n truc : nhÝn dang cac cơ chã́ thiã́t kã́ té̉ng quat 80 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 159 Muc ₫Ěch cua thiǿt kǿ use-case la : ƒ Nhön dang cac class thiǿt kǿ va cac hø thú́ng con co object cö̀n cho viøc thưc hiøn 'flow of events-design' cua use-case. ƒ phön tan hanh vi cua use-case băng cach cho cac object thiǿt kǿ va hø thú́ng con tương tac nhau. ƒ ₫ịnh nghĩa yøu cö̀u trøn cac tac vu cua class thiǿt kǿ, hø thú́ng con va interface cua chung. ƒ năm băt cac yøu cö̀u cö́p hiøn thưc cho use-case. Thiã́t kã́ Use-Case Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 160 Nhön dang cac class thiǿt kǿ như sau : ƒ nghiøn cưu cac class phön tĚch tham gia trong dö̃n xuö́t use- case cö́p phön tĚch tương ưng, nhön dang cac class thiǿt kǿ nú́i vơi cac class phön tĚch nay. ƒ nghiøn cưu cac yøu cö̀u ₫ăc biøt trong dö̃n xuö́t use-case cö́p phön tĚch tương ưng, nhön dang cac class thiǿt kǿ hiøn thưc cac yøu cö̀u ₫ăc biøt nay. ƒ gan nghĩa vu cho cac class thiǿt kǿ těm ₫ươc. ƒ nǿu con thiǿu 1 vai class cö̀n cho viøc thiǿt kǿ use-case ₫ăc biøt, ky sư use-case nøn liøn hø vơi kiǿn truc sư va ky sư linh kiøn ₫ø̉ ban bac. ƒ xöy dưng lươc ₫ú̀ class chưa cac class thiǿt kǿ těm ₫ươc. Thiã́t kã́ Use-Case : nhÝn dang cac class thiã́t kã́ Chương 7: Thiǿt kǿ hương ₫ú́i tương 81 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 161 Dung lươc ₫ú̀ trěnh tư : ƒ lươc ₫ú̀ trěnh tư chưa cac phö̀n tư actor, ₫ú́i tương thiǿt kǿ va cac t.bao giưa chung. ƒ nǿu use-case co nhiø̀u luú̀ng ₫iø̀u khiø̉n khac nhau, nøn tao lươc ₫ú̀ trěnh tư cho tưng luú̀ng. ƒ nøn chuyø̉n lươc ₫ú̀ cúng tac ơ cö́p phön tĚch thanh lươc ₫ú̀ trěnh tư ban ₫ö̀u, tư ₫o phat triø̉n thøm chi tiǿt. ƒ dung 'flow of events', duyøt qua cac bươc trong no ₫ø̉ quyǿt ₫ịnh cac tương tac nao cö̀n thiǿt giưa cac ₫ú́i tương thiǿt kǿ va phö̀n tư actor. Thiã́t kã́ Use-Case : miãu ta cac tương tac giưa cac object thiã́t kã́ Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 162 Thiã́t kã́ Use-Case : miãu ta cac tương tac giưa cac object thiã́t kã́ Chương 7: Thiǿt kǿ hương ₫ú́i tương Nøn chu y cac ghi nhön sau trong viøc xöy dưng lươc ₫ú̀ trěnh tư : ƒ nøn töp trung vao trěnh tư trong lươc ₫ú̀. ƒ actor gơi thúng bao ₫ǿn 1 ₫ú́i tương thiǿt kǿ ₫ø̉ yøu cö̀u thưc hiøn use-case. ƒ mú̃i class thiǿt kǿ nøn co Ět nhö́t 1 ₫ú́i tương tham gia vao lươc ₫ú̀ trěnh tư. ƒ cac message ₫ươc gơi giưa cac ₫ương ₫ơi sú́ng ₫ú́i tương, co thø̉ co tøn tam va se trơ thanh tøn tac vu tương ưng. ƒ dung label va flow of events cö́p thiǿt kǿ ₫ø̉ bú̉ sung lươc ₫ú̀ trěnh tư. ƒ lươc ₫ú̀ trěnh tư nøn xư ly tö́t ca mú́i quan hø cua use-case cö̀n hiøn thưc. 82 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 163 : People : LoginForm : Database 1: login(uname,pswd) 1.2 [succ = true]: welcome 1.1: succ := Verify(uname,pswd) Lươc ₫é̀ céng tac Cac thanh phö̀n cua lươc ₫ú̀ cúng tac : (thĚ du lươc ₫ú̀ cúng tac cho use-case Login cua hø thú́ng ₫ăng ky mún hoc hø tĚn chỉ thúng qua Web. Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 164 : Database: People : LoginForm 1: submit(uname, psswd) 1.1: verify(uname, psswd) 1.2: welcome Lươc ₫é̀ trÉnh tư Cac thanh phö̀n cua lươc ₫ú̀ trěnh tư : (thĚ du lươc ₫ú̀ trěnh tư cho use-case Login cua hø thú́ng ₫ăng ky mún hoc hø tĚn chỉ thúng qua Web. Chương 7: Thiǿt kǿ hương ₫ú́i tương 83 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 165 Composed entry/ assign ID exit/ fill date on char/ handle character compose command Stored entry/ save into folder Read entry/ convert to rich text unhightlight focus hightlight read command / recover( id ) logout save command re-fwd cmd / quote / append subject Sending do/ send( repc ) send command[ recipents != null ] / parse sending done Lươc ₫é̀ trang thai Cac thanh phö̀n cua lươc ₫ú̀ trang thai : (thĚ du lươc ₫ú̀ trang thai cho use-case Send/Read e-mail). Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 166 Show input for username and password Reject [ psswd invalid ] Welcome [ psswd valid ] Verify DatabaseLoginForm Lươc ₫é̀ hoat ₫éng Cac thanh phö̀n cua lươc ₫ú̀ hoat ₫úng : (thĚ du lươc ₫ú̀ hoat ₫úng cho use-case Login cua hø thú́ng ₫ăng ky mún hoc hø tĚn chỉ thúng qua Web. Chương 7: Thiǿt kǿ hương ₫ú́i tương 84 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 167 Muc ₫Ěch cua viøc thiǿt kǿ class la tao ra class thiǿt kǿ hoan thanh vai tro cua no trong dö̃n xuö́t use-case va cac yøu cö̀u phu. Bao gú̀m viøc duy trě class thiǿt kǿ va cac khĚa canh sau cua no : ƒ cac tac vu cua class. ƒ cac thuúc tĚnh cua class. ƒ cac mú́i quan hø ma class tham gia. ƒ cac method cua class (hiøn thưc tac vu tương ưng). ƒ cac trang thai cua ₫ú́i tương. ƒ cac phu thuúc tơi bö́t ky cơ chǿ thiǿt kǿ tú̉ng quat nao. ƒ cac yøu cö̀u co liøn quan ₫ǿn hiøn thưc cua class. ƒ sư hiøn thưc ₫ung cua bö́t ky interface ma class phai cung cö́p. Thiã́t kã́ class Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 168 Bươc ₫ö̀u ta phat hoa cac class thiǿt kǿ tư cac interface va class phön tĚch : 1 interface co 1 class thiǿt kǿ, con class phön tĚch thě : ƒ thiǿt kǿ class biøn phu thuúc vao cúng nghø tao interface : form, activeX control... Đø̉ y dung cac prototype giao diøn vơi user trong bươc trươc. ƒ thiǿt kǿ class thưc thø̉ thương phu thuúc vao cúng nghø database. Viøc anh xa tư mú hěnh hương ₫ú́i tương sang mú hěnh dư liøu quan hø co thø̉ cö̀n worker, mú hěnh va cúng viøc riøng. ƒ cö̀n töp trung thiǿt kǿ class ₫iø̀u khiø̉n, chu y cac nhu cö̀u sau : — vö̀n ₫ø̀ phön tan : cö̀n nhiø̀u class thiǿt kǿ trøn cac nut khac nhau ₫ø̉ hiøn thưc 1 class ₫iø̀u khiø̉n. — vö́n ₫ø̀ hiøu qua : nøn dung 1 class thiǿt kǿ cho 1 class ₫iø̀u khiø̉n — vö́n ₫ø̀ giao tac: class thiǿt kǿ cö̀n tĚch hơp cúng nghø quan ly giao tac. Thiã́t kã́ class : Phat hoa class thiã́t kã́ Chương 7: Thiǿt kǿ hương ₫ú́i tương 85 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 169 Nhön dang cac tac vu ma class thiǿt kǿ cö̀n cung cö́p va tö̀m vưc cua chung (dung cu phap ngún ngư löp trěnh). Cac ₫ö̀u vao cua bươc nay la : ƒ cac trach nhiøm cua bö́t ky class phön tĚch ma dö̃n tơi class thiǿt kǿ.1 trach nhiøm tương ưng 1 hay nhiø̀u tac vu, nhưng ơ ₫öy mơi phat hoa thúng sú́ hěnh thưc cac tham sú́. ƒ cac yøu cö̀u ₫ăc biøt cua bö́t ky class phön tĚch ma dö̃n tơi class thiǿt kǿ. ƒ cac interface ma class thiǿt kǿ phai cung cö́p. ƒ dö̃n xuö́t use-case cö́p thiǿt kǿ ma class tham gia. Thiã́t kã́ class : NhÝn dang cac tac vu Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 170 Tac vu thương ₫oi hoi thuúc tĚnh, cö̀n dưa vao cac hương dö̃n sau : ƒ chu y thuúc tĚnh cua bö́t ky class phön tĚch ma dö̃n tơi class thiǿt kǿ.1 thuúc tĚnh nay am chỉ 1 hay nhiø̀u thuúc tĚnh cua class thiǿt kǿ. ƒ han chǿ dung kiø̉u cua ngún ngư löp trěnh cho thuúc tĚnh. ƒ cú́ găng dung kiø̉u ₫a co. ƒ nǿu class thiǿt kǿ qua phưc tap, 1 vai thuúc tĚnh cua no co thø̉ tach ra thanh cac class riøng. ƒ nǿu co qua nhiø̀u thuúc tĚnh hay thuúc tĚnh qua phưc tap, nøn dung lươc ₫ú̀ class riøng ₫ø̉ miøu ta thuúc tĚnh. Thiã́t kã́ class : NhÝn dang cac thuéc tÈnh Chương 7: Thiǿt kǿ hương ₫ú́i tương 86 Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bach Khoa Tp.HCM Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML Slide 171 Cö̀n theo cac hương dö̃n sau : ƒ chu y cac mú́i quan hø kǿt hơp & gúp cua bö́t ky class phön tĚch ma dö̃n tơi class thiǿt kǿ. ƒ tinh chǿ sú́ phö̀n tư tham gia, tøn vai tro, tĚnh chö́t cua vai tro, class kǿt hơp, kǿt hơp n-ary. ƒ tinh chǿ hương cua mú́i quan hø kǿt hơp tư lươc ₫ú̀ tương tac. Nhön dang mú́i quan hø tú̉ng quat hoa dung cu phap ngún ngư löp trěnh, nǿu ngún ngư löp trěnh khúng hú̃ trơ, dung mú́i quan hø kǿt hơp, gúp ₫ø̉ thay thǿ. Thiã́t kã́ class : NhÝn dang cac mé́i quan hã kã́t hơp & gép Chương 7: Thiǿt kǿ hương ₫ú́i tương Bö mön Cöng nghï phền mï̀m Khoa CNTT ĐH Bac

Các file đính kèm theo tài liệu này:

  • pdfPHANTICHTHIETKEHUONGDOITUONGDUNGUML.pdf