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

