Lập trình OOP và AOP

OOP chắc lập trình viên nào cũng biết, cũng làm, còn AOP(Aspect Oriented Programming) thì sao nhỉ?
Trong group này có cao nhân nào làm nhiều về AOP hay hiểu rõ về nó không, share mọi người với.

AOP có thể nói là một mô hình được phát triển nhằm tăng hiệu quả của OOP và tăng cường tối đa khả năng tái sử dụng lại mã nguồn, để dùng AOP bạn phải hiểu và sử dụng tốt OOP. Khi dùng OOP bạn sẽ chia nhỏ phần mền thành những phần nhỏ nhất, có tính năng riêng biệt tạm gọi là blackbox , sau đó lắp ghép lại để thành một thể thống nhất, việc này giúp bạn dễ bảo trì và quản lí , tuy nhiên một vấn đề khác nảy sinh đó là khi bạn gặp phải sự thay đổi hoặc muốn tận dụng lại dự án cũ để thay đổi thành sản phẩm mới thì lại gặp khó khăn, vì dù chia ra nhỏ nhất, tuy nhiên các blackbox lại được gắn chặc với nhau ( nối cứng ) nên khi muốn thay đổi bạn phải tìm cách tháo ra , điều này làm bạn phải thay đổi cấu trúc mã nguồn tăng nguy cơ gặp lỗi và độ khó của dự án cao thì viec này càng phức tạp . Một câu hỏi đặt ra ?

Liệu có thể thay đổi cách vận hành của một chương trình mà hạn chế gần như thấp nhất việc thay đổi cấu trúc của chương trình ?

Đó chính là lý do ra đời của AOP , AOP thật ra giống như là một người đứng ra nối các blackbox lại , lúc này các blackbox sẽ gọi là nối mền , và để AOP Vận hành được thì phải có một container để quản lí , cụ thể là các server hay framework , lúc này bạn chỉ cần báo cho container biết phải làm gì qua các file cấu hình , thì container sẽ tự khởi tạo, dọn dẹp, thực thi …v.v .Lúc này ở trong mã bạn chỉ cần đánh dấu (Annotiation) để cho container biết ,còn lại là việc của container làm, Chú ý rằng khi muốn thay đổi cách nó làm ra sao, chỉ việc thay đổi lại các file cấu hình và Annotiation nên việc ảnh hưởng đến cấu trúc mã là rất thấp , tăng cao khả năng sử dụng lại.

Nhắc lại một lần nữa cơ sở AOP là giao quyền cho một container làm (Đảo ngược sự điều khiển ) . Nhờ vậy mà các blackbox không nối cứng vào nhau nên dễ tách ra hơn, nôm na là vậy.

Trong ứng dụng thực thì mình đang làm về Java , trong Java có CDI và hệ thống Annotiation của Java EE 7 giúp cho việc làm AOP rất trực quan và hiệu năng rất cao. Mình không nói sâu thêm nữa, bạn chỉ cần hiểu sơ vậy thôi, còn trong công việc cách viết, cách dùng tùy vào container tuy nhiên nguyên lý là không đổi .

14 Likes

theo google translate : AOP có nghĩa là lập trình hướng khía cạnh :3

Riot mới thay đổi cách lập trình đường đạn ko biết có phải aop ko nhỉ

Có chuyên gia nào hiểu rõ lập trình AOP không nhỉ? Chỉ giáo giúp với
Các ví dụ về AOP thường hướng đến sử dụng thư viện của Java, config rồi chạy => Không hiểu rõ bản chất xử lý vấn đề của AOP là gì.

Như ở ví dụ trên các Blackbox đang bị nối cứng với nhau và AOP giải quyền vấn đề bằng cách config các blackbox và action ở container rồi container tự vận hành. Cái quan trọng là sự tự vận hành diễn ra thế nào? phải hiểu được nó thì mới hiểu rõ được AOP làm gì

thấy khái niệm này mới mới, e google thì ra 1 số bài này

http://o7planning.org/vi/10257/huong-dan-lap-trinh-java-huong-khia-canh-voi-aspectj

Mình hay làm theo cách mà một chương trình (viết theo kiểu OOP) có những cách thực thi khác nhau khi đọc được các tập tin cấu hình, template có nội dung khác nhau. Không biết có phải AOP không nữa :stuck_out_tongue:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?