Kiểm chứng giao thức trên nhiều lớp đối tượng giống như việc gọi tuần tự các
phương thức trong biểu đồ trình tựđược đề cập rất rõ trong bài báo [5]. Ởđây, tác giả
của bài báo dùng hai lớp là SharedState và SharedStateManager để kiểm chứng giao thức trên nhiều lớp đối tượng. SharedState để ràng buộc các đối tượng của các lớp trong giao thức và SharedStateManager cung cấp một vài phương thức để tạo ra
SharedState, liên kết SharedState với các đối tượng. Các pointcut trong aspect này
được chia ra làm ba loại:
- pc_entry: pointcutdùng để bắt phương thức đầu tiên trong giao thức - pc_exit: pointcutdùng để bắt phương thức cuối cùng trong giao thức - pc: pointcutdùng để bắt các phương thức khác.
Beforeadvice của pc_entry sẽ tạo ra một đối tượng SharedState mới nếu nó chưa
có ràng buộc với bất kỳđối tượng SharedState nào.
Beforeadvice của pc và pc_exit dùng để kiểm tra đối tượng khi nó còn ràng buộc với bất kỳ đối tượng SharedState nào đó. Nó kiểm tra xem có vi phạm các ràng buộc
không và đưa ra các thông báo khi có vi phạm xảy ra.
After advice của pc_entry và pc pointcut là giống nhau, chúng được sử dụng để lưu lại trạng thái và đặt giá trị mới cho biến trạng thai sau khi mỗi phương thức được gọi.
After advice của pc_exit ngoài việc lưu lại trạng thái, nó xóa bỏ đối tượng
SharedState đã được tạo ra trong before advice của pc_entry. Thuật toán sinh mã aspectđược cài đặt như sau:
51
- Duyệt lần lượt các hàm trong entrySigs tạo ra loại pointcut pc_entry và các
advice.
- Duyệt lần lượt các hàm trong exitSigs tạo ra loại pointcut pc_exit và các
advice.
- Duyệt lần lượt các hàm trong key của fsm, tạo ra loại pointcut pc và các
advice
- Ba loại pointcut này đều được tạo ra bằng cách xử lý các xâu ký tự, tách chuỗi thành tên hàm, kiểu trả về, tên tham số truyền vào, kiểu tham số
truyền vào…
- Kết hợp các pointcut và advice đã tạo ra ở trên thành aspect kiểm chứng hoàn chỉnh.
- Thêm nữa, để quản lý trạng thái của SharedState, ta cần phải có dữ liệu của FSM mô tả biểu đồ trình tự UML. Vì vậy, trong aspect này sẽ chứa thêm phần mã nguồn tạo ra FSM từ biểu đồ trình tự UML như trong chương 4 đã trình bày.