Share to: share facebook share twitter share wa share telegram print page

 

Lập trình hướng khía cạ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

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

Ghi chú và tham khảo

  1. ^ Numerous: Afterthought, LOOM.NET, Enterprise Library 3.0 Policy Injection Application Block, AspectDNG, DynamicProxy, Compose* Lưu trữ 2009-01-13 tại Wayback Machine, PostSharp, Seasar.NET, DotSpect (.SPECT) Lưu trữ 2006-03-31 tại Wayback Machine, Spring.NET (as part of its functionality), Wicca and Phx.Morph, SetPoint Lưu trữ 2008-10-07 tại Wayback Machine
  2. ^ “as3-commons-bytecode”. Bản gốc lưu trữ ngày 3 tháng 10 năm 2014. Truy cập ngày 22 tháng 5 năm 2017.
  3. ^ Ada2012 Rationale
  4. ^ “Function Hooks”. Bản gốc lưu trữ ngày 17 tháng 1 năm 2013. Truy cập ngày 22 tháng 5 năm 2017.
  5. ^ Several: AspectC++, FeatureC++, AspectC, AspeCt-oriented C Lưu trữ 2008-11-20 tại Wayback Machine, Aspicere Lưu trữ 2012-07-21 tại Archive.today
  6. ^ Cobble[liên kết hỏng]
  7. ^ “AspectCocoa”. Bản gốc lưu trữ ngày 26 tháng 10 năm 2007. Truy cập ngày 22 tháng 5 năm 2017.
  8. ^ “ColdSpring”. Bản gốc lưu trữ ngày 3 tháng 8 năm 2012. Truy cập ngày 22 tháng 5 năm 2017.
  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”. Bản gốc lưu trữ ngày 23 tháng 1 năm 2012. Truy cập ngày 22 tháng 5 năm 2017.
  14. ^ Emacs Advice Functions
  15. ^ monad (functional programming) (“Monads As a theoretical basis for AOP”. CiteSeerX 10.1.1.25.8262. Chú thích journal cần |journal= (trợ giúp)) and Aspect-oriented programming with type classes. A Typed Monadic Embedding of Aspects
  16. ^ Numerous others: CaesarJ Lưu trữ 2008-12-19 tại Wayback Machine, Compose* Lưu trữ 2009-01-13 tại Wayback Machine, Dynaop Lưu trữ 2007-07-24 tại Wayback Machine, JAC Lưu trữ 2004-06-19 tại Wayback Machine, Google Guice (as part of its functionality), Javassist Lưu trữ 2004-09-01 tại Wayback Machine, JAsCo (and AWED), JAML Lưu trữ 2005-04-15 tại Wayback Machine, JBoss AOP Lưu trữ 2006-10-17 tại Wayback Machine, LogicAJ Lưu trữ 2006-05-04 tại Wayback Machine, Object Teams, PROSE, The AspectBench Compiler for AspectJ (abc) Lưu trữ 2014-12-16 tại Wayback Machine, Spring framework (as part of its functionality), Seasar, The JMangler Project Lưu trữ 2005-10-28 tại Wayback Machine, InjectJ, GluonJ Lưu trữ 2007-02-06 tại Wayback Machine, Steamloom Lưu trữ 2007-08-18 tại Wayback Machine
  17. ^ Many: Advisable Lưu trữ 2008-07-04 tại Wayback Machine, Ajaxpect, jQuery AOP Plugin Lưu trữ 2008-01-13 tại Wayback Machine, Aspectes Lưu trữ 2006-05-05 tại Wayback Machine, AspectJS, Cerny.js Lưu trữ 2007-06-27 tại Wayback Machine, Dojo Toolkit, Humax Web Framework, Joose, Prototype - Prototype Function#wrap, YUI 3 (Y.Do) Lưu trữ 2011-01-25 tại Wayback Machine
  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”. Bản gốc lưu trữ ngày 17 tháng 7 năm 2015. Truy cập ngày 11 tháng 8 năm 2015.
  20. ^ “MAKAO, re(verse)-engineering build systems”. Bản gốc lưu trữ ngày 24 tháng 7 năm 2012. 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”. Bản gốc lưu trữ ngày 5 tháng 12 năm 2010. 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 Lưu trữ 2012-07-12 tại Archive.today, TYPO3 Flow Lưu trữ 2017-07-17 tại Wayback Machine, AOP PECL Extension
  25. ^ "Whirl". Bản gốc lưu trữ ngày 20 tháng 4 năm 2016. Truy cập ngày 22 tháng 5 năm 2017.
  26. ^ Several: PEAK, Aspyct AOP Lưu trữ 2011-06-09 tại Wayback Machine, Lightweight Python AOP Lưu trữ 2004-10-09 tại Wayback Machine, Logilab's aspect module Lưu trữ 2005-03-09 tại Wayback Machine, Pythius, Spring Python's AOP module Lưu trữ 2016-03-04 tại Wayback Machine, Pytilities' AOP module Lưu trữ 2011-08-25 tại Wayback Machine, 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”. Bản gốc lưu trữ ngày 26 tháng 10 năm 2007. 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”. Bản gốc lưu trữ ngày 6 tháng 1 năm 2006. Truy cập ngày 22 tháng 5 năm 2017.
  32. ^ “MetaclassTalk: Reflection and Meta-Programming in Smalltalk”. Bản gốc lưu trữ ngày 29 tháng 7 năm 2015. 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

Liên kết ngoài

Kembali kehalaman sebelumnya


Index: pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve 
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9