Phương pháp lập trình hướng khía canh (Aspect-Oriented Programming - AOP) [18, 59, 60] là phương pháp lập trình phát triển trên tư duy tách biệt các mối quan
tâm khác nhau thành các môdun khác nhau. Ở đây, một môi quan tâm thường không phải là một chức năng nghiệp vụ cụ thể và có thể được đóng gói mà là một khía cạnh (thuộc fính) chung mà nhiều môdun phần mềm trong cùng hệ thống
nên có, ví dụ như lưu vết thao tác và lỗi (error logging). Với AOP, chúng ta có thể
cài đặt các mối quan tâm chung cất ngang hệ thống bằng các môđun đặc biệt gọi
là khía cạnh (aspeef) thay vì dầu trải chúng trên các môđun nghiệp vụ liên quan, Các khía cạnh sau đó được kết hợp tự động với các môđun nghiệp vụ khác bằng
quá trình gọi là đan (weaving) bing bo bien dich dic biet.
AspectJ [36, 53, 60] là mot cong cu AOP cho ngôn ngữ lập trình Java. Trình biên dich AspeetJ sẽ đan xen chương trình Java chính với các khía cạnh thành các tep mã bytecode chạy trên chính máy ảo Java. Trong mục này chúng tôi trình bày một số khái niệm liên quan về AspeetJ được sử dụng trong các chương 5 và 6 của
luận án.
2.6.1 Thực thi cắt ngang
Trong Aspeet], quá trình trình biên dịch thực thi các qny tie dan để đan kết
cỏc mửđun cắt ngang vào mụđun nghiệp vụ chớnh được gọi là thực thi cất ngang
(or
động và thực thi cit ngang tĩnh : Thực thi cắt ngang dong (dynamic crosscutting)
utfing). AspeetJ định nghĩa hai loại thực thi cắt ngang là thực thi cất ngang
là việc đan các hành vị mới vào quá trình thực thi một chương trình. Trình biên
dich sẽ dựa vào tập các quy tắc đan để xác định điểm đan và chèn thêm hoặc thay
bi
thể luồng thực thi chương trình chính bằng môđun cắt ngang, từ đó làm thay:
hành vị của hệ thống. Hầu hết việc thực thi cất ngang trong AspeetJ đều là thực thi cất ngang động.
Thue thi cit ngang tinh (static crosscutting) la qua trinh đan một sửa đổi vào
cấu trúc tĩnh của lớp, giao diện hay các khía cạnh hệ thống. Chức năng chính của.
thực thi cắt ngang tĩnh là hỗ trợ cho thực thi cat ngang động. Ví dụ như thêm.
dữ liên và phương thức mới vào lớp đã có nhằm định nghĩa trạng thái và hành vi của lớp đó để sử dụng trong các hành vi cắt ngang động. Thực thi cắt ngang tĩnh
Chương 9. Kiến thức cơ sở 37
còn được sử dụng nhằm khai báo các cảnh báo và lỗi tại thời điểm biên dịch cho nhiều môđun.
Trong AOP, mỗi khía cạnh được coi là biểu diễn của một quy tắc đan, nó chỉ ra
môdun cần được đan, vị trí đan trong, mõđun đó, hành vi sẽ được đan vào thông.
qua các định nghĩa của điểm nối, hướng cất và mã hành vi.
2.6.2 Điểm nối
Đì
chương trình, điểm này chính là vị trí mà các hành động thực thi cắt ngang được
néi (joinpoint) la một điểm có thể xác định trong quá trình thực thi mot
dan vào. Trong AspectJ cé một số loại điểm nối được chia thành hai loại thực thi và triệu hồi phương thức sau.
1. Điểm nối thực thi phương thite (method execution jứinpoim) : điểm này nằm.
trên chính phần thân của phương thức thực thi, nó gồm toàn bộ các lệnh nằm trong thân phương thức,
9. Diểm nối triệu gọi phuong thite (method call joinpoint) : điểm này nằm trên phần chương trình gọi phương thức đang xét, nó chính là điểm mà phương.
thức đang xét được gọi.
2.6.3. Hướng cắt
Trong AspeetJ, điểm nối thường được sử dụng trong một hướng cất (poinfeut),
mỗi hướng cất chứa một nhóm các điểm nối cùng với ngữ cảnh của nó. Ta có thể khai báo hướng cất trong một khía cạnh, một lớp hoặc một giao điện. Giống như
phương thức, ¢6 thé sit dung dinh danh truy cap (public, private) dé gidi hạn quyền
truy cập đến hướng eat. Các hướng cất có thể có tên hoặc không tên. Các hướng.
cất không tên, giống như các lớp không tên, được định nghĩa tại nơi sử dụng. Các hướng cắt được đặt tên thì có thể được tham chiếu từ nhiều nơi khác. Cú pháp khai
báo hướng cắt như trong Danh sách 9.4 [61]. Trong đó access_specifier khai bio
định danh truy cập có thể la public hoje private, poinfcut_name khai báo tên của.
hướng cắt, argument list danh sách các tham số, và cuối cing pointeut_definition là định nghĩa hướng cất
c lệnh).
<access_specifier> <pointcut> <pointcut_name>(<argument_list >):
pointcut_definition;
DANH SácH 3.4 - Cấu trúc cơ bản của hướng cất.