Ví dụ minh họa

Một phần của tài liệu Nghiên cứu về kiểm chứng bất biến của đối tượng sử dụng lập trình hướng khía cạnh (Trang 56)

Để thuận tiện cho việc mô tả phương pháp kiểm chứng bất biến mô tả trong OCL cho biểu đồ lớp UML được đề xuất, phần này xin được đưa ra ví dụ về phân loại các loại card ATMdựa trên các đặc tính và chức năng của chúng. Hình 3.2 mô tả một biểu đồ gồm ba lớp: Thẻ thường (ATMcard), Thẻ bạc (SilverATM) và Thẻ vàng (GoldATM). Ý nghĩa của các thuộc tính như sau:

1. withdrawalAmountPerDay: tổng số tiền rút trong một ngày.

2. balanceAmount: số tiền trong tài khoản, có thể âm đối với thẻ hạng bạc và vàng.

3. gracePeriod: số ngày ân hạn không tính lãi tính từ ngày số tiền trong tài khoản bị âm.

4. insuranceAmount: số tiền bảo hiểm cho chủ thẻ với số tiền tối đa là 60 triệu đồng, chỉ có ở thẻ hạng vàng.

Như đã đề cập trong phần trên, OCL là ngôn ngữ hình thức để mô tả các ràng buộc cho các biểu đồ UML dưới dạng các biểu thức lôgic. Trong luận văn này, chúng tôi xin tập trung vào kiểm chứng các bất biến, việc kiểm chứng này phải được thực hiện bất cứ thời điểm nào trong quá trình thực thi. Các ràng buộc OCL sau biểu diễn các bất biến của các lớp trong biểu đồ lớp hình 3.2:

Đối với thẻ ATM hạng thường, hạng bạc, hạng vàng có số tiền rút tối đa có thể rút trong một ngày tương ứng là $2000 (withdrawalAmountPerDay <= 2000), $3000 và $5000. context ATMcard inv: self.withdrawalAmountPerDay <=2000 context SilverATM inv: self.withdrawalAmountPerDay <=3000 context GoldATM inv: self.withdrawalAmountPerDay <=5000

Đối với các thẻ hạng bạc và vàng số dư trong tài khoản có thể nhỏ hơn 0, nghĩa là loại thẻ cho phép ghi nợ và số tiền có thể ghi nợ tương ứng là $10000 và $20000. Số ngày ân hạn không phải trả lãi khi số dư của tài khoản âm của thẻ hạng bạc là 10 ngày, của thẻ hạng vàng là 15 ngày.

context ATMcard inv: self.balanceAmount >=0 context SilverATM inv: self.balanceAmount >=-5000 inv: self.gacePeriod <=10 context GoldATM inv: self.balanceAmount >=-10000 inv: self.gacePeriod <=15

Đối với thẻ hạng vàng còn có số tiền bảo hiểm cho chủ thẻ tối đa là $60000.

context GoldATM

inv: self.insuranceAmount <= 60000

+withdrawMoney(long amount)() : void +receiveMoney(long amount)() : void +getBalance() : long +withdrawalAmountPerDay : long = 0 +balanceAmount : long = 0 ATMcard +getGracePeriod() : int +gracePeriod : int = 0 SilverATM +getInsuranceAmount() : long +insuranceAmount : long = 0 GoldATM

Hình 3.2. Ví dụ biểu đồ lớp của hệ thống card ATM

Theo sơ đồ hình 3.2 thì lớp ATMsilver kế thừa từ lớp ATMcard nên các thuộc tính công cộng withdrawalAmountPerDay và balanceAmount được kế thừa. Lớp GoldATM kế thừa lớp SilverATM nên các thuộc tính công cộng của hai lớp ATMcard (withdrawalAmountPerDay và balanceAmount) và SilverATM (gracePeriod) được kế thừa.

Trong quá trình thực thi chương trình, Bất biến liên quan đến thuộc tính withdrawalAmountPerDay của lớp ATMcard ràng buộc giá trị của nó phải luôn luôn lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 2000 trong tất cả các đối tượng được tạo ra từ lớp ATMcard. Tuy nhiên, bất biến liên quan đến thuộc tính withdrawalAmountPerDay được lớp SilverATM thừa kế lại có ràng buộc thay đổi ràng buộc giá trị của nó phải luôn lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 3000. Tương tự, bất biến liên quan đến thuộc tính withdrawalAmountPerDay được lớp GoldATM kế thừa có ràng buộc thay đổi ràng buộc giá trị của nó phải luôn lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 5000.

Thuộc tính gracePeriod là thuộc tính được thêm vào ở lớp con SilverATM và cũng được lớp GoldATM kế thừa để tính số ngày ân hạn không phải trả lãi kể từ khi số dư tài khoản âm. Tương tự, bất biến liên quan đến thuộc tính gracePeriod của lớp SilverATM ràng buộc giá trị của nó luôn nhỏ hơn hoặc bằng 10. Thuộc tính gracePeriod được lớp GoldATM kế thừa có ràng buộc thay đổi ràng buộc giá trị của nó luôn nhở hơn hoặc bằng 15.

Thuộc tính insuranceAmount được thêm vào lớp GoldATM để tính số tiền bảo hiểm của chủ thẻ. Bất biến liên quan đến thuộc tính insuranceAmount của lớp GoldATM ràng buộc giá trị của nó luôn nhở hơn hoặc bằng 60000.

Trong phần tiếp theo của chương này, chúng tôi sẽ đề xuất phương pháp kiểm chứng các bất biến nói trên, kể cả những bất biến ở lớp con có ràng buộc thay đổi so với lớp cha và bất biến của các thuộc tính mới được thêm vào lớp con trong quá trình thực thi sử dụng phương pháp AOP.

Một phần của tài liệu Nghiên cứu về kiểm chứng bất biến của đối tượng sử dụng lập trình hướng khía cạnh (Trang 56)