Xây dựng cấu trúc dữ liệu mô tả biểu đồ trạng thái UML

Một phần của tài liệu KIỂM CHỨNG ĐẶT TẢ UML CHO TÁC TỬ PHẦN MỀM (Trang 44 - 48)

Ta có thể thấy một biểu đồ trạng thái UML gồm hai thành phần chính: Các trạng thái (State) và các cạnh (Transition). Tôi sẽ xây dựng hai lớp để mô tả hai thành này phần của biểu đồ trạng thái UML.

37

4.1.2.1 Lớp State – mô tả các trạng thái (các đỉnh)

Trong biểu đồ trạng thái UML, đỉnh được mô tả gồm có tên của đỉnh, các cạnh đi vào đỉnh và các cạnh đi ra từ đỉnh. Trạng thái bắt đầu chỉ có cạnh đi ra, không có cạnh

đi vào. Trạng thái kết thúc, chỉ có các cạnh đi vào đỉnh, không có các cạnh đi ra từ đỉnh. Như vậy, để mô tả một trạng thái ít nhất ta cần mô tả ba dữ liệu: tên đỉnh, các cạnh đi vào và các cạnh đi ra. Để xét xem còn dữ liệu nào cần mô tả nữa không, ta xem cách tài liệu XMI mô tả một trạng thái của biểu đồ trạng thái UML (Phụ lục A).

<UML:SimpleState xmi.id="UMLCompositeState.17" name="State1"

visibility="public" isSpecification="false"

container="UMLCompositeState.15" outgoing="UMLTransition.22"

incoming="UMLTransition.21"

4.1.2.2 Lớp Transition – mô tả các cạnh của biểu đồ trạng thái UML

/>

Nhìn vào cách tài liệu XMI mô tả một trạng thái, ta thấy cần mô tả thêm một dữ

liệu nữa về một trạng thái, đó là id của trạng thái (xmi.id). Tài liệu XMI dùng id của trạng thái đểđại diện cho một trạng thái bất kỳ trong các liên kết của trạng thái đó với các thành phần khác của biểu dồ, vì vậy dữ liệu vềid của trạng thái là rất quan trọng, không thể bỏ qua.

Tóm lại, ta cần bốn dữ liệu để mô tả một trạng thái: id của trạng thái, tên trạng thái, các cạnh đi vào và các cạnh đi ra. Và lớp State mô tả trạng thái được xây dựng

cơ bản như sau:

public class State {

private String xmiId; private String name;

private String[] incoming; private String[] outgoing;

// các phương thức khác.

}

Một cạnh được mô tả gồm có tên của cạnh và là một đường liên kết giữa hai đỉnh trong biểu đồ trạng thái UML, bắt đầu từ một đỉnh (trạng thái) của biểu đồ và kết thúc

ở một đỉnh khác. Vì vậy, để mô tả một cạnh của biểu đồ, ta phải mô tả tên của cạnh,

đỉnh bắt đầu của cạnh và đỉnh kết thúc của cạnh. Ngoài ra, tài liệu XMI dùng idđể mô tả các thành phần của biểu đồ, như vậy đỉnh bắt đầu và đỉnh kết thúc của cạnh sẽ là id

của đỉnh bắt đầu và kết thúc. Mặt khác ta cũng cần thêm idđể mô tảid của cạnh. Như

38

id của đỉnh bắt đầu, id của đỉnh kết thúc. Ta xét xem XMI mô tả biểu cạnh của biểu đồ

trạng thái như thế nào:

<UML:Transition xmi.id="UMLTransition.11" name="void init()"

visibility="public" isSpecification="false"

stateMachine="UMLStateMachine.4" source="UMLPseudostate.6"

target="UMLCompositeState.7"> (adsbygoogle = window.adsbygoogle || []).push({});

<UML:Transition.guard>

<UML:Guard xmi.id="X.16" transition="UMLTransition.11"> <UML:Guard.expression>

<UML:BooleanExpression xmi.id="X.17" body="a &gt;= b" - Id của cạnh: xmi.id /> </UML:Guard.expression> </UML:Guard> </UML:Transition.guard> </UML:Transition>

Như vậy sau khi xét tài liệu XMI, ta thấy: Ngoài bốn dữ liệu cần thiết đã chỉ ra ở

trên, tài liệu XMI còn mô tảđiều kiện tiên quyết đểphương thức được thực hiện trong phần tử<UML:Transition.guard> là phần tử con của <UML:Transition>.

Tóm lại, để mô tả một cạnh, ta cần năm dữ liệu sau: - Tên cạnh: name

- Id của đỉnh mà từđó cạnh đi ra: source

- Id của đỉnh mà cạnh đi vào: target

- Điều kiện tiên quyết: guard.expression. Lớp Transitionđược xây dựng như sau: public class Transition {

private String xmiId; // ID của cạnh private String name; // Tên cạnh

private String source; // ID của đỉnh mà cạnh đi ra private String target; // ID của đỉnh mà cạnh đi vào

private String preCondition; // điều kiện để chuyển trạng thái

...

}

4.1.2.3 Mô tả biểu đồ trạng thái bằng các đối tượng trong Java

Hai lớp State và Transition mô tả hai thành phần chính của biểu đồ trạng thái UML. Tuy nhiên, một biểu đồ trạng thái thường có nhiều State và nhiều

Transition, vì vậy để tiện cho việc truy xuất dữ liệu về các thành phần này tôi xây dựng thêm hai lớp nữa mô tả danh sách các State (ListStates) và danh sách các

39

có nhiệm vụ duyệt tài liệu XMI và lấy dữ liệu về các State, các Transition. Sơ đồ lớp mô tảcác đối tượng được minh họa như hình vẽdưới đây:

Hình 4.2: Sơ đồ lớp biểu diễn biểu đồ trạng thái bằng các đối tượng trong Java Trong hai lớp ListStates và ListTransitions, tôi xây dựng thêm một số phương thức khác để lấy các thành phần dữ liệu của một State và Transition một cách dễdàng như: lấy dữ liệu về một State khi biết id của State hay lấy dữ liệu về một

Transition khi biết id của Transition đó. Cách xây dựng các hàm này hết sức

đơn giản, khi ta đã có một danh sách các State và Transition, ta chỉ việc duyệt trong danh sách này, so sánh id của State hoặc Transition với tham số id truyền vào, nếu đúng thì ta xuất dữ liệu ra theo ý muốn.

Như đã trình bày ở chương 3, tôi sử dụng thư viện XML DOM trong Java đểđọc thông tin từ tài liệu XMI. Cấu trúc của tài liệu XMI này tôi chỉ rõ ở phụ lục A; Ở đây,

tôi sẽ chỉ ra các node (thẻ XML) cần đọc để lấy dữ liệu. - Các trạng thái:

o Trạng thái bắt đầu: : <UML:Pseudostate>.

o Trạng thái kết thúc: <UML:FinalState>.

o Trạng thái trung gian: <UML:SimpleState>.

o Với mỗi trạng thái, các thuộc tính (attribute) cần đọc để lấy dữ liệu là:

xmi.id

name (adsbygoogle = window.adsbygoogle || []).push({});

incoming

40

 điều kiện sẽ được lấy thông qua thuộc tính body của phần tử

con: <UML:BooleanExpression>. - Các cạnh (Transition) o Các node cần duyệt: <UML:StateMachine.transitions>. o Các thuộc tính cần đọc để lấy dữ liệu:  xmi.id name source target

Khi đã xác đ ịnh được các node, các thuộc tính cần đọc để lấy dữ liệu, công việc còn lại là đọc tài liệu XMI và tạo ra danh sách các trạng thái và danh sách các Transition là hết sức đơn giản như sau:

- Khởi tạo ListState, ListTransition

- Lấy danh sách các node (NodeList) của Transition và State. - Duyệt từng node trong NodeList

- Tạo ra một Transition và một State mới, thêm vào danh sách.

Sau bước này, ta sẽ có một danh sách mô tả các State và Transition có trong biểu đồUML. Bước tiếp theo, tôi sẽ trình bày cách tạo ra FSM từ hai danh sách này.

Một phần của tài liệu KIỂM CHỨNG ĐẶT TẢ UML CHO TÁC TỬ PHẦN MỀM (Trang 44 - 48)