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 /).

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 1

Trang 1

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 2

Trang 2

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 3

Trang 3

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 4

Trang 4

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 5

Trang 5

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 6

Trang 6

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 7

Trang 7

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 8

Trang 8

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 9

Trang 9

Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 98 trang duykhanh 7420
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

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)

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:

  • pdfgiao_trinh_phan_tich_thiet_ke_huong_doi_tuong_phan_2.pdf