0
Tải bản đầy đủ (.pdf) (92 trang)

Kiểm chứng bất biến liên quan đến các thuộc tính được thêm vào lớp con

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 68 -68 )

con

Đối với các thuộc tính được thêm vào ở lớp con, chúng ta phân biệt hai trường hợp:

Trường hợp 1: thuộc tính được thêm vào lớp con là thuộc tính riêng tư (được khai báo là private) nên không được các lớp con thừa kế hoặc lớp con là lớp cuối cùng trong cây thừa kế, tức là lớp con này không có lớp con nào thừa kế nó. Để kiểm chứng bất biến liên quan đến các thuộc tính này, ta xây dựng các pointcut, adviceaspect

như thực hiện với một lớp không có lớp con thừa kế. Đối với thuộc tính riêng tư được thêm vào lớp con, từ khóa privileged phải được thêm vào đầu dòng khai báo aspect

kiểm chứng. Ví dụ, lớp GoldATM là lớp cuối cùng trong cây thừa kế nó không có lớp con nào. Chúng ta cần kiểm chứng bất biến liên quan đến thuộc tính insuranceAmount.

Aspect được cài đặt như sau:

privileged public aspect GoldATMVerifier {

pointcut verify_insuranceAmount(GoldATM card, int val):

target(card) && set(int GoldATM.insuranceAmount) && args(val); void around(GoldATM card, int val):

verify_ insuranceAmount(card, val) { if(val>60000) {

System.out.println("GoldATM.insuranceAmount <=60000"); } else {

proceed(card, val); // Cho phép thực hiện tiếp }

} }

Do thuộc tính insuraceAmount không được lớp nào thừa kế nên mã kiểm chứng chỉ cài đặt để kiểm chứng bất biến liên quan đến thuộc tính insuraceAmount của lớp GoldATM. Trong advice không cần đoạn mã kiểm tra xem joint point được so khớp tại đâu.

Trường hợp 2: thuộc tính được thêm vào lớp con là thuộc tính công cộng (được khai báo là public) mà lớp con đó vẫn còn có lớp con thừa kế nó. Để kiểm chứng bất biến liên quan đến các thuộc tính này, coi lớp con đó như là lớp tại nút gốc trong cây thừa kế và tiến hành xây dựng các mã kiểm chứng. Ta cũng phải xét các ràng buộc theo hai trường hợp:

Trường hợp 2.1: Các ràng buộc của thuộc tính được thêm vào lớp con đó không thay đổi trong tất cả các lớp con của nó. Trường hợp này chúng ta cài đặt các

aspect như trong trường hợp các bất biến ở lớp con không thay đổi so với lớp cha.

Trường hợp 2.2: Các ràng buộc của thuộc tính được thêm vào lớp con đó bị thay đổi so với lớp cha. Ví dụ muốn kiểm chứng bất biến của thuộc tính gracePeriod được thêm vào lớp SilverATM và cũng được lớp GoldATM thừa kế. Ràng buộc của thuộc tính gracePeriod của lớp con GoldATM bị thay đổi so với lớp cha SilverATM. Chúng ta xây dựng các aspect theo cách thừa kế không tường minh như sau:

public aspect SilverATMVerifier {

pointcut verify_gracePeriod(SilverATM card, int val): target(card) && set(int SilverATM.gracePeriod) && args(val);

void around(SilverATM card, int val): verify_gracePeriod(card, val) {

Object sl = thisJoinPoint.getTarget(); String objName=sl.getClass().getName(); if(objName.equals("SilverATM") && val>10) {

System.out.println("SilverATM.gracePeriod<=10"); } else if(objName.equals("GoldATM") && val>15) {

System.out.println("GoldATM.gracePeriod<=15"); } else{

proceed(card, val); // Cho phép thực hiện tiếp }

} }

Field set joint point được mô tả trong pointcut verify_gracePeriod sẽ được so khớp tại cả hai đối tượng đích của lớp SilverATM và GoldATM. Trong advice chứa mã kiểm chứng cần kiểm tra joint point được so khớp tại đối tượng của lớp SilverATM hay lớp GoldATM như đoạn mã trên.

Chúng ta cũng có thể cài đặt aspect kiểm chứng theo cách thừa kế tường minh như ở phần trên. Theo đó thì aspect được cài đặt để kiểm chứng bất biến liên quan đến thuộc tính được thêm vào lớp SilverATM là aspect trừu tượng và aspect được cài đặt để kiểm chứng bất biến liên quan đến thuộc tính đó được lớp GoldATM kế thừa là

aspect cụ thể kế thừa aspect trên.

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 68 -68 )

×