Nhược điểm của phương pháp lập trình hướng khía cạnh

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

Phương pháp lập trình hướng khía cạnh có nhiều ưu điểm kể trên, tuy nhiên nó cũng có một số hạn chế sau:

Liệu các aspect có phá vỡ tính đóng gói của các đối tượng? Bình thường các aspect tuân theo các luật điều khiển truy cập. Bằng cách này hay cách khác, các aspect có thể phá vỡ tính đóng gói của các đối tượng. Nhưng chúng làm theo cách có thể kiểm soát được. Các aspect có thể truy cập đến phần riêng tư của các đối tượng mà chúng tham chiếu đến nhưng không làm tổn hại đến sự đóng gói giữa các đối tượng của các lớp khác nhau. Ví dụ trong AspectJ, để bỏ qua các luật truy cập ta thêm bổ ngữ đặc biệt privileged vào trước từ khóa aspect:

privileged aspect EmployeeVerifier {

pointcut verify_experience(Manager staff, int val):

target(staff)&& set(int Manager.experience)&& args(val); void around(Manager staff, int val):

verify_experience(staff, val) { if(val<3) { System.out.println("Manager.experience>=3"); } else{ proceed(staff, val); } } }

Trong ví dụ này, ta có thể truy cập đến thuộc tính experience của lớp Manager cho dù nó có được bảo vệ bởi từ khóa private hoặc protected hay không.

Giảm hiệu suất thực thi trong trường hợp thực hiện đan kết lúc thực thi hoặc tốn thời gian nạp chương trình trong trường hợp thực hiện đan kết lúc nạp chương trình.

Khi chúng ta mắc sai lầm trong việc diễn đạt thực thi cắt ngang có thể gây lỗi tràn ngập toàn chương trình.

Việc thay đổi các joint point của một chương trình (ví dụ như đổi tên hay di chuyển các phương thức) mà không được lường trước bởi người viết aspect sẽ gây ra các lỗi.

Vấn đề bảo mật có thể bị phá vỡ bởi việc sử dụng AOP để cài thêm các đoạn mã tại các vị trí phù hợp.

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