+1

Aspect Oriented Programming

1. Aspect Oriented Programming là gì?

  • Aspect Oriented Programming (AOP) là một xu hướng lập trình mới ra đời nhằm tăng hiệu quả của Object-orented programming (OOP) và tăng cường tối đa khả năng tái sử dụng của mã nguồn.

  • AOP không thay thế cho OOP mà AOP phát triển dựa trên OOP.

  • OOP là mô hình phát triển được lựa chọn cho hầu hết các dự án phần mềm. Nếu như OOP hữu hiệu trong việc lập mô hình hành vi chung của các đối tượng tuy nhiên nó không giải quyết thỏa đáng những hành vi liên quan đến đối tượng, thì AOP giải quyết được vấn đề này và rất có thể sẽ có bước phát triển lớn kế tiếp trong phương pháp lập trình.

2. Lịch sử ra đời của AOP

aop1.png

3. Programming paradigms

  • Procedural programming:

    • thực hiện các lệnh tính toán theo thứ tự: "First do this and next do that"
    • Ngôn ngữ: Fortran, Pascal, C
  • Functional programming:

    • sử dụng hàm và toán học, tránh sử dụng biến.
    • Ngôn ngữ: Lisp, Scheme
  • Logic programming:

    • lập trình khai báo, sử dụng ngôn ngữ mô tả để đặc tả vấn đề.
    • Ngôn ngữ: Prolog
  • Object-oriented programming:

    • sử dụng các lớp với các thuộc tính và chức năng hoạt động riêng
    • Ngôn ngữ: C++, Java
  • Aspect-oriented programming:

    • bổ sung cho OOP bằng cách bổ sung khái niệm aspect, cho phép module hóa các concerns.
    • AspectJ là 1 cài đặt cho AOP

4. Tại sao AOP ra đời?

Lập trình OOP có khá nhiều vấn đề, dưới đây tôi sẽ nêu ra hai vấn đề chính tại sao cần AOP.

  • Tangling: với cách implement thông thường, core và crosscutting concerns bị rối với nhau ở mọi module. aop2.png

  • Scattering: code bị phân mảnh.

aop3.png

  • Nếu không có AOP: code vừa bị phân mảnh, vừa bị rối trộn với nhau.

aop4.png

  • Với AOP:
    • có nhiều thời gian cho việc viết business logic chính của chương trình.
    • viết được nhiều chiều cho chương trình có thể chứa nhiều cài đặt vấn đề khác cho chương trình mà chúng ta cần về sau.
    • trộn các aspect này vào chương trình chính thành thư viện.

aop5.png

5. Ưu điểm của AOP

  • Thiết kế đơn giản: "You aren't gonna need it (YAGNI)" - chúng ta chỉ cài đặt những thứ chúng ta thực sự cần mà không bao giờ cài đặt trước.
  • Cài đặt chương trình một cách trong sáng: mỗi một module chỉ làm cái mà nó cần phải làm, giải quyết được hai vấn đề code tangling và code scattering.
  • Tái sử dụng dễ dàng.

AOP là xu hướng mới, nên đòi hỏi người lập trình phải có:

  • Kỹ năng cao: độ trừu tượng của chương trình cao
  • Luồng chương trình phức tạp.

6. Ngôn ngữ AOP

AOP là một mô hình, cần có ngôn ngữ để cài đặt nó.

  • Đặc tả ngôn ngữ AOP:

    • Cài đặt những vấn đề quan tâm bằng các ngôn ngữ như: C, C++, Java..
    • Đặc tả những luật trộn lại với nhau:

    aop6.png

  • Có hai cách trộn code

  • Cách 1: weaving source-to-source

aop7.png

Nhược điểm của cách này là khó debug, viết một đằng ra code một nẻo.

  • Cách 2: weaving compiled code: là cách dùng phổ biến hiện nay

aop8.png

7. Các thuật ngữ mới.

  • Core concerns: hàm chính của chương trình
  • Crosscutting concerns: những chức năng khác của chương trình: security, logging, tracing, monitoring..
  • Join points: một điểm của chương trình, là nơi có thể chèn những "custom action" của bạn
  • Pointcut: có nhiều cách để xác định joinpoint, những cách như thế được gọi là pointcut.
  • Advice: là những xử lý phụ được thêm vào xử lý chính, code để thực hiện các xử lý đó được gọi Adivce.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí