Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2)
Trạng thái
Trạng thái là một trong các điều kiện có thể để đối tượng tồn tại. Trạng thái được xãc định từ
hai vùng: thuộc tính và quan hệ giữa các lớp. Tương tự các thành phần khác của biểu đồ UML, ta
có thể bổ sung tài liệu vào trạng thái. Tuy nhiên, tài liệu này sẽ không chuyển thành mã nguồn
sau này. Ký pháp trạng thái trong UML như sau:
Khi đối tượng ở trong trạng thái nào đó, nó thực hiện nhiều hoạt động. Thí dụ, phát sinh báo
cáo, thực hiện một vài tính toán hay gởi sự kiện tới đối tượng khác. Có thể gộp năm loại thông tin
để mô tả trạng thái; chúng bao gồm hoạt động, hành động vào, hành động ra, sự kiện, lịch sử
trạng thái.
Lần đầu tiên đối tượng được tạo ra thì nó ở trong trạng thái khởi động. Trong biểu đồ UML
thì trạng thái khởi động được vẽ bằng hình tròn đen. Chỉ có một trạng thái bắt đầu trong biểu đồ.
Trạng thái dừng là trạng thái khi đối tượng bị phá hủy. Số lượng trạng thái dừng trong biểu đồ là
tùy ý, có bao nhiêu trạng thái dừng cho biểu đồ cũng được.
Hoạt động
Hoạt động (activity) là hành vi mà đối tượng thực thi khi nó ở trong trạng thái cụ thể. Thí dụ,
khi tài khoản ở trong trạng thái đóng thì máy đọc thẻ không chấp nhập thể tín dụng của khách
hàng, nếu đã mở tài khoản thì trạng thái có thể là gửi thông điệp, chờ hay tính toán. Hoạt động là
hành vi có thể ngắt được, nó có thể được hoàn thành khi đối tượng đang trong trạng thái hay nó bị
ngắt vì đối tượng chuyển sang trạng thái khác. Hoạt động được biểu diễn trong phần tử biểu đồ
trạng thái (hình 6.4a), trước đó có từ do và dấu : (hoặc dấu /).
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2)
cấp màn hình Độc giả Thông thường makét giao diện được thiết kế trên giấy để mọi người tham gia dự án trao đổi thống nhất.Tiếp theo là xây dựng các màn hình giao diện mẫu.Từ các biểu đồ UML phân tích trong các phần trên,ta có thể vẽ ra được giao diện người sử dụng.Thí dụ,hình 8.24 là biểu đồ trạng thái của giao diện “Độc giả”.Hình 8.25 là biểu đồ tổng hợp phân cấp màn hình “Độc giả”.Hình 8.26 là biểu đồ trạng thái mức cao của giao diện “Nhân viên”.Hình 8.27 là biểu đồ tổng hợp của phân cấp màn hình “Thủ thư”. Maøn hình chính Nhaân vieân Maøn hình Maøn hình chính Nhaân chính Thuû thö vieân nhaäp lieäu Möôïn saùch, Traû saùch, Maøn hình Maøn hình Maøn hình taïp chí taïp chí Taùc giaû Ñoäc giaû saùch Maøn hình Maøn hình Maãu Taïp chí Hình 8.26 Biểu đồ trạng thái của giao diện Nhân viên Phát triển phần mềm bằng UML trang | 212 Tröôøng teân ngöôøi söû duïng Tröôøng maät khaåu Maøn hình chính Nhaân vieân nhaäp lieäu Maøn hình login Nhaân vieân [OR] Phím ñeä trình Maøn hình chính Thuû thö Phím xoùa Maøn hình möôïn saùch Maøn hình traû saùch Phím trôû laïi Phím thöïc hieän Tröôøng Chæ danh nhaân söï Tröôøng chöõ kyù Phím OK Hình 8.27 Phân cấp màn hình Nhân viên Phát triển phần mềm bằng UML trang | 213 PHỤC LỤC CHƯƠNG 9 MÃ TRÌNH PHÁT SINH TRONG ROSE Phụ lục này trình bày một số mẫu mã trình do Rational Rose phát sinh tự động.Các thí dụ trong phụ lục này không mô tả toàn bộ khả năng phát sinh mã trình của Rose mà chỉ mô tả một số tương đương giữa UML và các ngôn ngữ lập trình như C++, Java và SQL. 9.1 PHÁT SINH MÃ TRÌNH C++ 9.1.1 - Các lớp 9.1.1.1 - Lớp rỗng Rose phát sinh cấu tử ,hủy tử ,cấu tử sao chép,toán tử gán và hai toán tử so sánh.Chú ý rằng để cho dễ đọc mã trình thì các thao tác trong thí dụ này sẽ không được viết lặp lại trong các thí dụ về sau. Mô hình Mã trình #ifndef A_h #define A_h 1 class A { public: //## Constructor (generated) A (); A (const A& right); //## Destructor (generated) ~ A () ;//## Assingnment Operation (generated) Const A& operator =(const A& right) //## Equality Operations (generated) int operator == (const A& right)const; int operator != (const A$ right)const; } ; #endif 9.1.1.2 - Lớp có thuộc tính và thoa tác Mô hình Mã trình Phát triển phần mềm bằng UML trang | 214 class A A { A1:String public: A2:String Op1() //## Other operations (specified) Op2() void Op 1() void Op 2() const String get_A 1() const; void set_A (const String value); const String get_A2() const; void set_A2(const String value); private: String A1; String A2; }; inline const String A:: get_A1() const { Return A1; } inline void A:: set_A1(const String value) { A1=value; } inline const String A::get_A2() const { Return A2; } inline void A::set_A2(const String value) { A2=value; } 9.1.1.3 - Lớp tham số (template) Mô hình Mã trình Phát triển phần mềm bằng UML trang | 215 template class D { public: D(); D(const D& right); ~D (); const D& operator=(const D& right); int operator == (const D& right) const; int operator != (const D& right) const; }; 9.1.1.4 - Lớp tiện ích (utility) Mọi thao tác của lớp tiện ích đều có tiền tố là từ khóa static. Mô hình Mã trình class F { pubilc: static void Op 1(); static void Op 2(); }; 9.1.2 - Quan hệ kết hợp 9.1.2.1 - Kết hợp 1-1 Nếu kết hợp theo tham chiếu thì mã trình được phát sinh cho kết hợp bao gồm con trỏ trong vùng private của lớp tham gia kết hợp. Mô hình A Ra Rb B 1 1 Mã trình Class A { const B* get_Rb() const; void set_Rb (B* const value); private: Phát triển phần mềm bằng UML trang | 216 B* Rb; }; inline const B* A:: get_Rb () const { return Rb; } inline void A:: set_Rb (B*const value) { Rb = value; } class B { const A* get_Ra () const; void set_Ra(A* const value); private: A* Ra; }; inline const A* B :: get_Ra() const { return Ra; } inline void A:: set_Ra (A* const value) { Ra=value; } 9.1.2.2 - Kết hợp N-1 Mã trình được phát sinh cho kết hợp bao gồm con trỏ trong vùng private của lớp tham gia kết hợp.Tính nhiều (multiplicity) 0 * được cài đặt bằng tập có kích thước không giới hạn. Mô hình A Ra Rb B 0..n 1 Mã trình class B { const UnboundedSetByReference get_Ra() const; void set_Ra (const UnboundedSetByReferencevalue); Private: Phát triển phần mềm bằng UML trang | 217 unboundedSetByReferenceRa; }; inline const UnboundedSetByReference B:: get_Ra () const { return Ra; } inline void A:: set_Ra(const UnboundedSetByReferencevalue) { Ra=value; } 9.1.2.3 - Kết hợp N-1 có ràng buộc Mã trình được phát sinh cho kết hợp bao gồm con trỏ torng vùng private của lớp tham gia kết hợp.Do có ràng buộc {Ordered} cho nên tính nhiều (multiplicity) 0* được cài đặt bằng danh sách có kích thước không giới hạn thay cho tập như thí dụ trên đây. Mô hình A Ra Rb B 0..n 1 {Ordered} Mã trình class B { const UnboundedListByReference get_Ra() const; void set_Ra(const UnboundedListByReferencvalue); private: unboundedListByReferenceRa; }; 9.1.2.4 - Lớp kết hợp 1-1 Mô hình A B 1 1 C Phát triển phần mềm bằng UML trang | 218 Mã trình class A; classB class C { const B* get_the_B () const; void set_the_B (B* const value); private: A* the_A; B* the_B; }; #include “C.h” class A { const C* get_the_C() const; void set_the_C(C* const value); private: C* the_C; }; #include “C.h” class B { const C* get_the_C() const; void set_the_C(C* const value); private: C* the_C; }; 9.1.2.5 - Lớp kết hợp N-N Mô hình Mã trình #include “C.h” class B { const UnboundedSetByReference get_the_C() const; void set_the_C(const UnboundedSetByReference value); private: Phát triển phần mềm bằng UML trang | 219 unboundedSetByReferencethe_C; }; 9.1.3 - Quan hệ phụ thuộc tập hợp 9.1.3.1 - Phụ thuộc tập hợp (aggregation)1-1 Mô hình B Ra A 1 1 Mã trình #include “B.h” class A { const B* get_the_B () const; void set_the_B (B* const value); private: B* the_B; }; #include “A.h” class B { const A* get_Ra () const; void set_Ra (A* const value); private: A* Ra; }; 9.1.3.2 - Phụ thuộc tập hợp với khả năng dẫn đường hạn chế Mô hình B Ra A 1 1 Mã trình class A { private: Phát triển phần mềm bằng UML trang | 220 }; #include “A.h” class B { const A* get_Ra () const; void set_Ra (A* const value); private: A*Ra; }; 9.1.3.3 - Quan hệ gộp (composition) 1-1 Mô hình B Ra A 1 1 Mã trình #include “B.h” class A { const B* get_the_B() const; void set_the_B (B* Const value); private: B* THE_b; }; #include “A.h” class B { const A get_Ra () const; void set_Ra (const Avalue); private: A Ra; }; 9.1.3.4 - Phụ thuộc tập hợp 1-N Mô hình Phát triển phần mềm bằng UML trang | 221 B Ra A 1 0..n Mã trình #include “A.h” class B { const UnboundedSetByReferenceget_Ra () const; void set_Ra (const UnboundedSetByReferencevalue); private: unboundedSetByReference Ra; }; 9.1.4 - Quan hệ kế thừa 9.1.4.1 - Kết thừa đơn Mô hình Mã trình #include “A.h” class B:public A { }; 9.1.4.2 - Kế thừa bội Mô hình Mã trình #include “A1.h” #include “A2.h” class B:public A2,public A1 { }; 9.2 PHÁT SINH MÃ TRÌNH JAVA Các đoạn mã trình mẫu dưới đây được Rose phát sinh từ mô hình UML.Phần này không mô tả toàn bộ khả năng của Rose mà chỉ mô tả tương ứng giữa một vài biểu đồ UMLvới ngôn ngữ Java. Phát triển phần mềm bằng UML trang | 222 9.2.1 - Các lớp 9.2.1.1 - Lớp rỗng Rose phát sinh cấu tử,hủy tử.Chú ý rằng để cho dễ đọc mã trình thì các thao tác này sẽ không được viết lặp lại trong các thí dụ về sau. Mô hình Mã trình public final class A { public A () { super (); } protected void finalize () throws Throwable { super.finalize (); } } 9.2.1.2 - Lớp có thuộc tính và thao tác Mô hình Mã trình public final class A { private String m_A1; private String m_A2; public void Op 1() { } public void Op 2 () { } } 9.2.1.3 - Lớp trừu tượng Mô hình Mã trình Insert Figure: 08710D01 public abstract class A { } Phát triển phần mềm bằng UML trang | 223 9.2.1.4 - Giao diện Mô hình Mã trình Insert Figure: 08710D01 public interface I_A { } 9.2.2 - Quan hệ kết hợp 9.2.2.1 - Kết hợp 1-1 Mô hình A Ra Rb B 1 1 Mã trình public class A { public B m_Rb; }; public class B { public A m_Ra; }; 9.2.2.2 - Kết hợp 1-N Mô hình A Ra Rb B 0..n 1 Mã trình public class B { public A m_Ra; } Mô hình Phát triển phần mềm bằng UML trang | 224 A -Ra Rb B n 1 Mã trình public class B { public Vector m_Ra = new Vector (); } Mô hình Ra Rb A B 5 1 Khi tính nhiều có hạn chế thì kết hợp được cài đặt bằng mảng . Mã trình public class B { private A[] m_Ra = new A[5]; } 9.2.3 - Quan hệ phụ thuộc tập hợp 9.2.3.1 - Phụ thuộc tập hợp (aggregation) 1-1 Mô hình 1 B 1 A Ra Mã trình public class A { public B m_B; } public class B { public A m_Ra; } Phụ thuộc tập hợp với khả năng dẫn đường hạn chế Mô hình Phát triển phần mềm bằng UML trang | 225 1 B 1 A Rb Ra Mã trình public class A { } public class B { public A m_Ra; } 9.2.4 - Quan hệ kế thừa 9.2.4.1 - Kế thừa đơn Mô hình Mã trình public class B extends A { } 9.2.4.2 - Kế thừa giữa các giao diện Mô hình Mã trình public interface I_C extends I_A { } public interface I_C extends I_A, I_B { } 9.2.4.3 - Cài đặt giao diện bằng lớp trừu tượng Mô hình Mã trình Phát triển phần mềm bằng UML trang | 226 public abstract class A implements I_A { } 9.2.4.4 - Cài đặt giao diện bằng lớp Mô hình Mã trình public class A implements I_A { } 9.2.4.5 - Cài đặt một vài giao diện bằng lớp Mô hình Mã trình public class A implements I_A,I_B { } 9.3 PHÁT SINH MÃ TRÌNH VISUAL BASIC Các đoạn mã trình mẫu dưới đậy được Rose phát sinh từ mô hình UML. Phần này không mô tả toàn bộ khả năng của Rose mà chỉ mô tả tương ứng giữa một vài biểu đồ UML với ngôn ngữ Visual Basic. 9.3.1 - Các lớp 9.3.1.1 - Lớp rỗng Mô hình Mã trình Phát triển phần mềm bằng UML trang | 227 Option Base 0 Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub 9.3.1.2 - Lớp có thuộc tính và thao tác Mô hình Mã trình Option Base 0 Public A1 As String Public A2 As String Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Public Sub Op1() On Error GoTo Op1Err End Sub Op1Err: Call RaiseError (MyUnhandleError, “A:Op1 Method”) End Sub Public Property Get Op2() As Boolean On Error GoTo Op1Err Exit Property Op2Err: Call RaiseError (MyUnhandleError, “A:Op2 Method”) End Property 9.3.1.3 - Lớp có thuộc tính và thao tác Mô hình Mã trình Phát triển phần mềm bằng UML trang | 228 Option Base 0 Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Public Sub Op2() End Sub Public Property Get Op2() As Boolean End Property 9.3.2 - Quan hệ kết hợp 9.3.2.1 - Kết hợp 1-1 Mô hình A Ra Rb B 1 1 Mã trình Option Base 0 Public Rb As B Private Sub Class_Terminate () End Sub Private Sub Class_Initialize () End Sub Option Base 0 Public Ra As A Private Sub Class_Terminate () End Sub Private Sub Class_Initialize () End Sub Phát triển phần mềm bằng UML trang | 229 9.3.2.2 - Kết hợp 1-N Mô hình A Ra Rb B 0..n 1 Mã trình Option Base 0 Public Rb As B Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Option Base 0 Public Ra As Collection Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub 9.3.3 - Quan hệ kế thừa đơn Mô hình Mã trình Option Base 0 Implements A Local superclass object (generated) Private mAObject As New A Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Public Sub Op 2() End Sub Private Sub A_Op1 () Phát triển phần mềm bằng UML trang | 230 mAObject.Op1 End Sub 9.4 PHÁT SINH MÃ TRÌNH SQL. Các đoạn mã trình mẫu dưới đây được Rose phát sinh từ mô hìnhUML. Phần này không mô tả toàn bộ khả năng của Rose mà chỉ mô tả tướng ứng giữa một vài biểu đồ UML với ngôn ngữ ANSI SQL. 9.4.1 - Các lớp 9.4.1.1 - Lớp rỗng Mô hình Mã trình CREATE TABLE T_A( A_Id NUMBER (5), PRIMARY KEY (A_Id) ) 9.4.1.2 - Lớp có thuộc tính và thao tác Mô hình Mã trình CREATE TABLE T_A ( A_ IdNUMBER (5) A1 VARCHAR (), A2 VARCHAR (), PRIMARY KEY (A_Id) ) 9.4.2 - Quan hệ kết hợp 9.4.2.1 - Kết hợp 1-1 Mô hình Phát triển phần mềm bằng UML trang | 231 A Ra Rb B 1 1 Mã trình CREATE TABLE T_B ( B_Id NUMBER (5), PRIMARY KEY (B_Id) ) CREATE TABLE T_A ( A_Id NUMBER (5) B_Id NUMBER (5) REFERENCE T_B (B_Id), PRIMARY KEY (A_Id) ) 9.4.2.2 - Kết hợp N-1 Mô hình A Ra Rb B 0..n 1 Mã trình CREATE TABLE T_B( B_Id NUMBER (5), PRIMARY KEY (B_Id) ) CREATE TABLE T-A( B_Id NUMBER (5) REFERENCES T_B (B_Id), A_Id NUMBER (5), PRIMARY KEY (A_Id) ) 9.4.2.3 - Lớp kết hợp N-N Mô hình Phát triển phần mềm bằng UML trang | 232 A B 0..n 0..n C Mã trình CREATE TABLE T_A( A_Id NUMBER (5), PRIMARY KEY (A_Id) ) CREATE TABLE T_B( B_Id NUMBER (5), PRIMARY KEY (B_Id) ) CREATE TABLE T_C ( A_Id NUMBER (5) REFERENCES T_A(A_Id)ON DELETE CASCADE, B_Id NUMBER (5) REFERENCES T-B (B_Id)ON DELETE CASCADE, PRIMARY KEY (A_Id,B_Id) ) 9.4.3 - Quan hệ kế thừa Trong các thí dụ sau đây, mỗi lớp được cài đặt trong một bảng. 9.4.3.1 - Kế thừa đơn Mô hình Mã trình CREATE TABLE T_A ( A_Id NUMBER (5), PRIMARY KEY (A_Id) ) CREATE TABLE T_B ( A_Id NUMBER(5) REFERENCES T_A (A_Id), PRIMARY KEY (A_Id) ) Phát triển phần mềm bằng UML trang | 233 9.4.3.2 - Kế thừa bội Mô hình Mã trình CREATE TABLE T_A1 ( A1_Id NUMBER (5), PRIMARY KEY (A1_Id) ) CREATE TABLE T_A2 ( A2_Id NUMBER (5), PRIMARY KEY (A2_Id) ) CREATE TABLE T_B ( A1_Id NUMBER (5) REFERENCES T_A1 (A1_Id), A2_Id NUMBER (5) REFERENCES T_A2 (A2_Id), PRIMARY KEY (A1_Id, A2_Id) ) Phát triển phần mềm bằng UML trang | 234
File đính kèm:
- giao_trinh_phan_tich_thiet_ke_huong_doi_tuong_phan_2.pdf