Lập trình hướng khía cạnh

Bách khoa toàn thư mở Wikipedia
Bước tới: menu, tìm kiếm

Bản mẫu:Mẫu hình lập trình

Trong điện toán, lập trình hướng khía cạnh (tiếng Anh: aspect-oriented programming, viết tắt: AOP) là một mẫu hình lập trình nhằm tăng tính mô đun bằng cách cho phép phân tách những mối quan tâm xuyên suốt. Nó làm như vậy bằng cách thêm hành vi bổ sung vào mã đã tồn tại (một lời khuyên) mà không sửa đổi chính mã đó, thay vì xác định cụ thể mã nào được sửa đổi thông qua một đặc tả "điểm cắt" (pointcut), ví dụ như "lưu lại (log) tất cả lời gọi hàm khi tên hàm bắt đầu với từ 'set'". Điều này cho phép những hành vi không phải là trung tâm của logic nghiệp vụ (ví dụ như lưu lại) được thêm vào chương trình mà không làm rối lõi của mã đến các chức năng. AOP tạo cơ sở cho phát triển phần mềm hướng khía cạnh (aspect-oriented software development).

AOP bao gồm các phương thức và công cụ lập trình hỗ trợ cho mô đun hóa các mối quan tâm ở mức độ mã nguồn, trong khi "phát triển phần mềm hướng khía cạnh" dùng để chỉ đến toàn bộ một nguyên lý công nghệ.

AOP đòi hỏi chia nhỏ logic của chương trình thành các phần riêng biệt (gọi là mối quan tâm hay concern, là những khu vực liên kết các chức năng). Gần như các mẫu hình lập trình đều hỗ trợ các mức độ gom nhóm và đóng gói các mối quan tâm thành các thực thể riêng biệt và độc lập bằng cách cung cấp khả năng trừu tượng (ví dụ, các hàm, thủ tục, mô đun, lớp, phương thức) để có thể dùng cho hiện thực, trừu tượng và bố cục những mối quan tâm đó. Vài mối quan tâm "cắt xuyên qua" nhiều trừu tượng trong một chương trình, và gây khó khăn cho hiện thực - chúng được gọi là những mối quan tâm xuyên suốt (cross-cutting concern hay horizontal concern).

Hiện thực[sửa | sửa mã nguồn]

Các ngôn ngữ lập trình sau có hiện thực AOP, trong ngôn ngữ đó, hay thông qua thư viện ngoài:

Xem thêm[sửa | sửa mã nguồn]

Ghi chú và tham khảo[sửa | sửa mã nguồn]

  1. ^ Numerous: Afterthought, LOOM.NET, Enterprise Library 3.0 Policy Injection Application Block, AspectDNG, DynamicProxy, Compose*, PostSharp, Seasar.NET, DotSpect (.SPECT), Spring.NET (as part of its functionality), Wicca and Phx.Morph, SetPoint
  2. ^ as3-commons-bytecode
  3. ^ Ada2012 Rationale
  4. ^ Function Hooks
  5. ^ Several: AspectC++, FeatureC++, AspectC, AspeCt-oriented C, Aspicere
  6. ^ Cobble
  7. ^ AspectCocoa
  8. ^ ColdSpring
  9. ^ “Closer Project: AspectL.”. Truy cập ngày 11 tháng 8 năm 2015. 
  10. ^ “infra - Frameworks Integrados para Delphi - Google Project Hosting”. Truy cập ngày 11 tháng 8 năm 2015. 
  11. ^ “meaop - MeSDK: MeObjects, MeRTTI, MeAOP - Delphi AOP(Aspect Oriented Programming), MeRemote, MeService... - Google Project Hosting”. Truy cập ngày 11 tháng 8 năm 2015. 
  12. ^ “Google Project Hosting”. Truy cập ngày 11 tháng 8 năm 2015. 
  13. ^ RemObjects Cirrus
  14. ^ Emacs Advice Functions
  15. ^ monad (functional programming) (“Monads As a theoretical basis for AOP”.  Đã bỏ qua tham số không rõ |citeseerx= (trợ giúp)) and Aspect-oriented programming with type classes. A Typed Monadic Embedding of Aspects
  16. ^ Numerous others: CaesarJ, Compose*, Dynaop, JAC, Google Guice (as part of its functionality), Javassist, JAsCo (and AWED), JAML, JBoss AOP, LogicAJ, Object Teams, PROSE, The AspectBench Compiler for AspectJ (abc), Spring framework (as part of its functionality), Seasar, The JMangler Project, InjectJ, GluonJ, Steamloom
  17. ^ Many: Advisable, Ajaxpect, jQuery AOP Plugin, Aspectes, AspectJS, Cerny.js, Dojo Toolkit, Humax Web Framework, Joose, Prototype - Prototype Function#wrap, YUI 3 (Y.Do)
  18. ^ Using built-in support for categories (which allows the encapsulation of aspect code) and event-driven programming (which allows the definition of before and after event handlers).
  19. ^ “AspectLua”. Truy cập ngày 11 tháng 8 năm 2015. 
  20. ^ “MAKAO, re(verse)-engineering build systems”. Truy cập ngày 11 tháng 8 năm 2015. 
  21. ^ “McLab”. Truy cập ngày 11 tháng 8 năm 2015. 
  22. ^ “AspectML - Aspect-oriented Functional Programming Language Research”. Truy cập ngày 11 tháng 8 năm 2015. 
  23. ^ Adam Kennedy. “Aspect - Aspect-Oriented Programming (AOP) for Perl - metacpan.org”. Truy cập ngày 11 tháng 8 năm 2015. 
  24. ^ Several: PHP-AOP (AOP.io), Go! AOP framework, PHPaspect, Seasar.PHP, PHP-AOP, TYPO3 Flow, AOP PECL Extension
  25. ^ "Whirl"
  26. ^ Several: PEAK, Aspyct AOP, Lightweight Python AOP, Logilab's aspect module, Pythius, Spring Python's AOP module, Pytilities' AOP module, aspectlib
  27. ^ “PLaneT Package Repository: PLaneT > dutchyn > aspectscheme.plt”. Truy cập ngày 11 tháng 8 năm 2015. 
  28. ^ “AspectR - Simple aspect-oriented programming in Ruby”. Truy cập ngày 11 tháng 8 năm 2015. 
  29. ^ Dean Wampler. “Home”. Truy cập ngày 11 tháng 8 năm 2015. 
  30. ^ “gcao/aspector”. GitHub. Truy cập ngày 11 tháng 8 năm 2015. 
  31. ^ AspectS
  32. ^ “MetaclassTalk: Reflection and Meta-Programming in Smalltalk”. Truy cập ngày 11 tháng 8 năm 2015. 
  33. ^ WEAVR
  34. ^ “aspectxml - An Aspect-Oriented XML Weaving Engine (AXLE) - Google Project Hosting”. Truy cập ngày 11 tháng 8 năm 2015. 

Đọc thêm[sửa | sửa mã nguồn]

Liên kết ngoài[sửa | sửa mã nguồn]