Knowledge

Aspect-oriented programming

Source 📝

1835:
general, have whole-program knowledge to reason about the dynamic execution of an aspect-oriented program." Further, while its goals (modularizing cross-cutting concerns) are well understood, its actual definition is unclear and not clearly distinguished from other well-established techniques. Cross-cutting concerns potentially cross-cut each other, requiring some resolution mechanism, such as ordering. Indeed, aspects can apply to themselves, leading to problems such as the
1573:. One advantage of modularizing cross-cutting concerns is enabling one programmer to easily affect the entire system. As a result, such problems manifest as a conflict over responsibility between two or more developers for a given failure. AOP can expedite solving these problems, as only the aspect must be changed. Without AOP, the corresponding problems can be much more spread out. 692:) when one can access a bank account, and the code in the advice body defines how the security check is implemented. That way, both the check and the places can be maintained in one place. Further, a good pointcut can anticipate later program changes, so if another developer creates a new method to access the bank account, the advice will apply to the new method when it executes. 4726: 1381:
reads the aspect-oriented code and generates appropriate object-oriented code with the aspects integrated. The same AOP language can be implemented through a variety of weaving methods, so the semantics of a language should never be understood in terms of the weaving implementation. Only the speed of
1834:
General criticisms are that AOP purports to improve "both modularity and the structure of code", but some counter that it instead undermines these goals and impedes "independent development and understandability of programs". Specifically, quantification by pointcuts breaks modularity: "one must, in
1560:
Programmers need to be able to read and understand code to prevent errors. Even with proper education, understanding cross-cutting concerns can be difficult without proper support for visualizing both static structure and the dynamic flow of a program. Starting in 2002, AspectJ began to provide IDE
1415:
existing classes so that the modifications are introduced by method-overriding. The existing classes remain untouched, even at runtime, and all existing tools, such as debuggers and profilers, can be used during development. A similar approach has already proven itself in the implementation of many
212:
function, possibly in entirely unrelated systems or written in different languages. Thus, changing logging can require modifying all affected modules. Aspects become tangled not only with the mainline function of the systems in which they are expressed but also with each other. Changing one concern
1449:
Even though most classes in an object-oriented model will perform a single, specific function, they often share common, secondary requirements with other classes. For example, we may want to add logging to classes within the data-access layer and also to classes in the UI layer whenever a thread
1551:
Though it may seem unrelated, in testing, the use of mocks or stubs requires the use of AOP techniques, such as around advice. Here the collaborating objects are for the purpose of the test, a cross-cutting concern. Thus, the various Mock Object frameworks provide these features. For example, a
97:
of concerns into separate, independent entities by providing abstractions (e.g., functions, procedures, modules, classes, methods) that can be used for implementing, abstracting, and composing these concerns. Some concerns "cut across" multiple abstractions in a program, and defy these forms of
886:
because they are points in a running program where additional behavior can be usefully joined. A join point needs to be addressable and understandable by an ordinary programmer to be useful. It should also be stable across inconsequential program changes to maintain aspect stability. Many AOP
1400:
Any solution that combines programs at runtime must provide views that segregate them properly to maintain the programmer's segregated model. Java's bytecode support for multiple source files enables any debugger to step through a properly woven .class file in a source editor. However, some
1264:, this enables programmers to declare in one place members or parents of another class, typically to combine all the code related to a concern in one aspect. For example, if a programmer implemented the cross-cutting display-update concern using visitors, an inter-type declaration using the 115:
All AOP implementations have some cross-cutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided. For example, interceptors that specify the methods to express a limited form of
1593:, which is fundamental to many definitions of AOP (the code in question has no indication that an advice will be applied, which is specified instead in the pointcut), means that the advice is not visible, in contrast to an explicit method call. For example, compare the COME FROM program: 1568:
Given the power of AOP, making a logical mistake in expressing cross-cutting can lead to widespread program failure. Conversely, another programmer may change the join points in a program, such as by renaming or moving methods, in ways that the aspect writer did not anticipate and with
1389:) that require access to program source files. However, Java's well-defined binary form enables bytecode weavers to work with any Java program in .class-file form. Bytecode weavers can be deployed during the build process or, if the weave model is per-class, during class loading. 1540:
approach. Since at least the 1970s, developers have been using forms of interception and dispatch-patching that resemble some of the implementation methods for AOP, but these never had the semantics that the cross-cutting specifications provide in one place.
1165:
Advice specifies to run at (before, after, or around) a join point (specified with a pointcut) certain code (specified like code in a method). The AOP runtime invokes Advice automatically when the pointcut matches the join point. For example:
1484:
This refers to the point of execution in the application at which cross-cutting concern needs to be applied. In our example, a pointcut is reached when the thread enters a method, and another pointcut is reached when the thread exits the
937:
The join points in AspectJ include method or constructor call or execution, the initialization of a class or object, field read and write access, and exception handlers. They do not include loops, super calls, throws clauses, or multiple
867:
One can think of AOP as a debugging tool or a user-level tool. Advice should be reserved for cases in which one cannot get the function changed (user level) or do not want to change the function in production code (debugging).
1349:
Any structural additions are required to be compatible with the original class, so that clients of the existing class continue to operate, unless the AOP implementation can expect to control all clients at all times.
4877: 346:
However, this transfer method overlooks certain considerations that a deployed application would require, such as verifying that the current user is authorized to perform this operation, encapsulating
1552:
process invokes a service to get a balance amount. In the test of the process, it is unimportant where the amount comes from, but only that the process uses the balance according to the requirements.
4662: 921:
Join-point models can be compared based on the join points exposed, how join points are specified, the operations permitted at the join points, and the structural enhancements that can be expressed.
4586: 1827:
Indeed, the pointcut may depend on runtime condition and thus not be statically deterministic. This can be mitigated but not solved by static analysis and IDE support showing which advices
1499:
The combination of the pointcut and the advice is termed an aspect. In the example above, we add a logging aspect to our application by defining a pointcut and giving the correct advice.
1472:
This is the additional code that you want to apply to your existing model. In our example, this is the logging code that we want to apply whenever the thread enters or exits a method.:
2571: 4783: 665:
Now consider what would happen if we suddenly need to change the security considerations for the application. In the program's current version, security-related operations appear
4847: 1842:
Technical criticisms include that the quantification of pointcuts (defining where advices are executed) is "extremely sensitive to changes in the program", which is known as the
3005: 4796: 4655: 4224: 2167: 208:
as code, making it harder to understand and maintain. It is scattered by the function (such as logging) being spread over a number of unrelated functions that might use
136:(that detects whether a given join point matches). An aspect can also make binary-compatible structural changes to other classes, such as adding members or parents. 684:(structural members added to other classes). For example, a security module can include advice that performs a security check before accessing a bank account. The 4946: 3990: 5617: 4881: 4648: 3473: 4635: 947:"Kinded" PCDs match a particular kind of join point (e.g., method execution) and often take a Java-like signature as input. One such pointcut looks like this: 2831: 2472: 2336: 3492: 1548:'s partial types, but such approaches lack a quantification mechanism that allows reaching several join points of the code with one declarative statement. 4605: 1393:
started with source-level weaving in 2001, delivered a per-class bytecode weaver in 2002, and offered advanced load-time support after the integration of
4776: 2390: 3157: 5010: 4583: 1893:
provides an API to facilitate proven practices in core areas of programming including data access, security, logging, exception handling and others.
3617:
Using built-in support for categories (which allows the encapsulation of aspect code) and event-driven programming (which allows the definition of
5360: 5222: 3948: 1401:
third-party decompilers cannot process woven code because they expect code produced by Javac rather than all supported bytecode forms (see also
5366: 4095: 3867: 1458:. Even though each class has a very different primary functionality, the code needed to perform the secondary functionality is often identical. 2207: 4769: 4399: 4380: 4353: 4327: 4301: 4282: 2296: 2262: 1846:. The problems with pointcuts are deemed intractable. If one replaces the quantification of pointcuts with explicit annotations, one obtains 1455: 913: 125: 1411:
weaving offers another approach. This basically implies post-processing, but rather than patching the generated code, this weaving approach
5612: 5551: 5299: 2568: 900:. Pointcuts determine whether a given join point matches. Most useful pointcut languages use a syntax like the base language (for example, 216:
For example, consider a banking application with a conceptually very simple method for transferring an amount from one account to another:
1224:
There are other kinds of JPMs. All advice languages can be defined in terms of their JPM. For example, a hypothetical aspect language for
917:, and can run it before, after, and around join points. Some implementations also support defining a method in an aspect on another class. 2560: 1362:
a combined program is produced, valid in the original language and indistinguishable from an ordinary program to the ultimate interpreter
1850:
instead, which is simply an explicit subroutine call and suffers the identical problem of scattering, which AOP was designed to solve.
5019: 3272: 4554: 3023: 1581:
The most basic criticism of the effect of AOP is that control flow is obscured, and that it is not only worse than the much-maligned
4483: 4258: 4232: 3959: 3226: 3072:"meaop – MeSDK: MeObjects, MeRTTI, MeAOP – Delphi AOP(Aspect Oriented Programming), MeRemote, MeService... – Google Project Hosting" 2232: 2201: 2175: 2438: 5391: 5071: 5015: 2897: 2701: 2235:
presents a well-worked version of essentially the same thing (Lieberherr subsequently recognized this and reframed his approach).
175: 94: 3970: 3713: 5251: 5124: 5055: 4990: 4913: 2549: 3344: 2856: 2629: 82:
AOP includes programming methods and tools that support the modularization of concerns at the level of the source code, while
5622: 5429: 5192: 4822: 3462: 3440: 3178: 2798: 2001: 1874: 1847: 1545: 1369:
The difficulty of changing environments means most implementations produce compatible combination programs through a type of
4625: 3915: 3691: 3388: 108:
exemplifies a cross-cutting concern because a logging strategy must affect every logged part of the system. Logging thereby
3602: 2596: 672:
AOP tries to solve this problem by allowing the programmer to express cross-cutting concerns in stand-alone modules called
5207: 5197: 4975: 4690: 3591: 2051: 2046: 1974: 876:
The advice-related component of an aspect-oriented language defines a join point model (JPM). A JPM defines three things:
213:
thus entails understanding all the tangled concerns or having some means by which the effect of changes can be inferred.
5591: 5571: 5501: 5444: 5406: 5396: 5356: 5281: 5217: 5187: 5114: 5103: 5000: 4980: 4955: 4918: 2106: 185: 170:
AOP extension to Java. IBM's research team pursued a tool approach over a language design approach and in 2001 proposed
153: 4016: 2763: 2690: 5309: 5276: 5171: 5147: 5109: 5089: 4985: 4894: 4872: 4857: 3986: 3311: 3101: 2712: 2358: 2319: 2056: 1984: 1509: 1358:
AOP programs can affect other programs in two different ways, depending on the underlying languages and environments:
3926: 3639: 3470: 3123: 4568: 4125: 3377: 3153: 2332: 5493: 5479: 5386: 5346: 5271: 5177: 5157: 5024: 4903: 4837: 4526: 3543: 3514: 3366: 2820: 2006: 1909: 3814: 3489: 2463: 2416:
T. Pasquier, J. Bacon and B. Shand. "FlowR: Aspect Oriented Programming for Information Flow Control in Ruby". In
5586: 5351: 5261: 5241: 5227: 4185: 3503: 2953: 2657: 2112: 2021: 1963: 1561:
plug-ins to support the visualizing of cross-cutting concerns. Those features, as well as aspect code assist and
1495: 1225: 121: 3771: 3576: 124:. For example, an aspect can alter the behavior of the base code (the non-aspect part of a program) by applying 89:
Aspect-oriented programming entails breaking down program logic into cohesive areas of functionality (so-called
5566: 5526: 5469: 5401: 5139: 4970: 4159: 1919: 1529: 49: 4073: 3525: 2730: 3937: 3451: 3075: 3049: 2983: 5576: 5556: 5497: 5484: 5464: 5291: 5028: 4932: 4890: 4039: 3900: 3851: 3825: 2679: 1890: 1570: 4577: 3565: 2774: 5536: 5511: 5505: 5449: 5411: 5099: 5094: 5046: 4941: 4842: 4814: 4805: 4236: 3355: 3318: 3188: 2916: 2526: 2179: 2095: 1521: 1513: 1370: 145: 53: 4595: 4509: 3554: 2752: 2741: 2668: 2418:
ACM Proceedings of the 13th international conference on Modularity (Aspect Oriented Software Development)
5438: 5434: 5376: 5328: 4898: 4705: 4533: 4442: 2719: 1445: 658: 56: 4620: 4471: 3661: 3329: 3833: 3532: 5581: 5561: 5521: 5323: 5182: 5051: 5038: 4792: 4685: 4520: 4464: 4311: 3945: 3421: 3399: 3181:
allow program semantics to be altered by changing the type of the program without altering its code:
2908: 2134: 2101: 1859: 1468: 1385:
Systems can implement source-level weaving using preprocessors (as C++ was implemented originally in
347: 189: 60: 45: 4241: 4103: 3908: 2531: 2184: 17: 5516: 5454: 5266: 5246: 5232: 4964: 4832: 4827: 3875: 3840: 3803: 3410: 3193: 2890: 1878: 1863: 1533: 105: 1254:
provide a way to express cross-cutting concerns affecting the structure of modules. Also known as
5333: 5286: 5256: 5202: 5061: 4960: 4852: 4761: 4408:"Adaptive Object-Oriented Programming Using Graph-Based Customization" – Lieberherr, Silva-Lepe, 4215: 3796: 3300: 3278: 3232: 2158: 2118: 1408: 1236: 4465:
Aspect Oriented Development, Lecture Notes, University of Colombo School of Computing, Sri Lanka
4341: 3207:
Proceedings of the 12th annual international conference on Aspect-oriented software development
5489: 5381: 5236: 5212: 5152: 5119: 5081: 5066: 5005: 4610: 4479: 4418:"Addressing aspect interactions in an industrial setting: experiences, problems and solutions" 4395: 4376: 4368: 4349: 4323: 4297: 4278: 4270: 4254: 3268: 3222: 2999: 2557: 2384: 2292: 2286: 2258: 2254: 2228: 2197: 2129: 2091: 1953: 1899:
is an AOP implementation allowing to weave the aspects directly on the .NET executable files.
1382:
an implementation and its ease of deployment are affected by the method of combination used.
5371: 5303: 5167: 4908: 4421: 4246: 3429: 3260: 3214: 2536: 2403:
B. De Win, B. Vanhaute and B. De Decker. "Security through aspect-oriented programming". In
2189: 1562: 1365:
the ultimate interpreter or environment is updated to understand and implement AOP features.
1260: 2462:
Constantinides, Constantinos; Skotiniotis, Therapon; Störzer, Maximilian (September 2004).
5421: 5295: 5161: 4862: 4590: 4572: 4455: 4211: 3974: 3963: 3952: 3941: 3930: 3919: 3904: 3855: 3844: 3829: 3818: 3807: 3606: 3595: 3580: 3569: 3558: 3547: 3536: 3518: 3507: 3496: 3477: 3466: 3455: 3444: 3425: 3414: 3403: 3392: 3381: 3370: 3359: 3348: 3333: 3322: 3304: 2912: 2901: 2778: 2767: 2756: 2745: 2734: 2723: 2705: 2694: 2683: 2672: 2661: 2575: 2564: 2553: 2442: 2429: 2154: 2086: 2011: 1265: 159: 79:(such as logging) to be added to a program without cluttering the code of core functions. 71:" specification, such as "log all function calls when the function's name begins with 'set 4515: 3956: 2864: 4214:; Lamping, J.; Mendhekar, A.; Maeda, C.; Lopes, C.; Loingtier, J. M.; Irwin, J. (1997). 3739: 2433: 2157:; Lamping, J.; Mendhekar, A.; Maeda, C.; Lopes, C.; Loingtier, J. M.; Irwin, J. (1997). 5473: 5129: 4995: 4362: 2223:"Adaptive Object Oriented Programming: The Demeter Approach with Propagation Patterns" 2124: 1451: 1242:
The means of affect at these points are a visualization of all the matched join points.
1052:
is one form of the wildcards that can be used to match many things with one signature.
1008:. Note that the unqualified name of a class can be used via Java's normal type lookup. 76: 2894: 2698: 5606: 5459: 4700: 4337: 4316: 3967: 3717: 3019: 2247: 1378: 1142:
This pointcut matches a method-execution join point, if the method name starts with "
978:
This pointcut matches a method-execution join point, if the method name starts with "
120:
has a number of such expressions and encapsulates them in a special class, called an
3236: 2546: 350:
to prevent accidental data loss, and logging the operation for diagnostic purposes.
4182:"aspectxml – An Aspect-Oriented XML Weaving Engine (AXLE) – Google Project Hosting" 3584: 3341: 3337: 3282: 2618: 1958: 1904: 1836: 4606:
Early Aspects for Business Process Modeling (An Aspect Oriented Language for BPMN)
4551:
A detailed series of articles on basics of aspect-oriented programming and AspectJ
3459: 3437: 3251: 3205: 1544:
Designers have considered alternative ways to achieve separation of code, such as
1004:
This pointcut matches when the currently executing object is an instance of class
4740: 4615: 3912: 3687: 2886: 2790: 2471:. European Interactive Workshop on Aspects in Software (EIWAS). Berlin, Germany. 2318:
Note: The examples in this article appear in a syntax that resembles that of the
5341: 4499: 4392:
Aspect Oriented Software Development: An Approach to Composing UML Design Models
3385: 3247: 2592: 1948: 1937: 1934: 1394: 67:
modifying the code, instead separately specifying which code is modified via a "
4417: 3599: 3588: 2928: 2517:
Steimann, F. (2006). "The paradoxical success of aspect-oriented programming".
4710: 4640: 4560: 3241: 1996: 1969: 1943: 1914: 1517: 1450:
enters or exits a method. Further concerns can be related to security such as
887:
implementations support method executions and field references as join points.
882: 689: 163: 149: 129: 2687: 4538: 3987:"PLaneT Package Repository : PLaneT > dutchyn > aspectscheme.plt" 3264: 3218: 3201: 2540: 2064: 1586: 1425: 33: 4426: 3253:
Proceedings of the 6th workshop on Foundations of aspect-oriented languages
3097: 2760: 2365: 1896: 4725: 4229:
Proceedings of the 11th European Conference on Object-Oriented Programming
3923: 3635: 3131: 2172:
Proceedings of the 11th European Conference on Object-Oriented Programming
4715: 4565: 4265:
The paper generally considered to be the authoritative reference for AOP.
4129: 1516:. AOP languages have functionality similar to, but more restricted than, 1480: 896: 685: 133: 68: 3540: 3511: 3374: 3363: 4750: 4745: 4600: 4250: 4181: 4012: 3811: 2193: 2026: 1989: 1979: 1537: 1417: 1390: 930: 908: 901: 669:
across numerous methods, and such a change would require major effort.
171: 167: 117: 93:). Nearly all programming paradigms support some level of grouping and 4503: 4292:
Renaud Pawlak, Lionel Seinturier & Jean-Philippe Retaillé (2005).
3573: 3500: 3308: 2961: 2709: 2654: 1436:
Standard terminology used in Aspect-oriented programming may include:
132:(points in a program) specified in a quantification or query called a 3767: 3744: 3714:"AspectML – Aspect-oriented Functional Programming Language Research" 3433: 3183:
De Meuter, Wolfgang (1997). "Monads As a theoretical basis for AOP".
2579: 2496: 2061: 2041: 2016: 1386: 1011:"Scope" PCDs limit the lexical scope of the join point. For example: 904:
uses Java signatures) and allow reuse through naming and combination.
4630: 4621:
Introduction to AOP – Software Engineering Radio Podcast Episode 106
3768:"Aspect – Aspect-Oriented Programming (AOP) for Perl – metacpan.org" 3046:"infra – Frameworks Integrados para Delphi – Google Project Hosting" 985:"Dynamic" PCDs check runtime types and bind variables. For example, 4151: 4065: 3071: 3045: 2727: 1923: 1887:
is a commercial AOP implementation with a free but limited edition.
188:
is considered to be the first major application of AOP followed by
3934: 3665: 3448: 2749: 2285:
Roman, Ed; Sriganesh, Rima Patel; Brose, Gerald (1 January 2005).
2094:, a formalism that can be used for aspect-oriented programming on 2069: 1928: 1532:. Other ways to use aspect-oriented programming paradigms include 1525: 116:
cross-cutting, without much support for type-safety or debugging.
4363:
Aspect-oriented Software Development and PHP, Dmitry Sheiko, 2006
4043: 3897: 3848: 3822: 2676: 166:
developed the explicit concept of AOP and followed this with the
3562: 3200:
Tabareau, Nicolas; Figueroa, Ismael; Tanter, Éric (March 2013).
2986:. 5 November 2005. Archived from the original on 5 November 2005 2771: 2031: 1870: 1582: 4765: 4644: 4566:
Aspect- vs. Object-Oriented Programming: Which Technique, When?
3352: 4578:
Gregor Kiczales, Professor of Computer Science, explaining AOP
3522: 3418: 3396: 3315: 3185:
International Workshop on Aspect-Oriented Programming at ECOOP
2738: 2665: 2074: 2036: 1421: 4631:
Aspect-Oriented programming for iOS and OS X by Manuel Gebele
4126:"MetaclassTalk: Reflection and Meta-Programming in Smalltalk" 1884: 1862:
have implemented AOP, within the language, or as an external
3326: 2716: 1055:
Pointcuts can be composed and named for reuse. For example:
695:
So for the example above implementing logging in an aspect:
353:
A version with all those new concerns might look like this:
3529: 4636:
DevExpress MVVM Framework. Introduction to POCO ViewModels
4626:
An Objective-C implementation of AOP by Szilveszter Molnar
3551: 3297: 2905: 4596:
Aspect-Oriented Programming in Java with Spring Framework
4416:
Zambrano Polo y La Borda, Arturo Federico (5 June 2013).
2677:
Enterprise Library 3.0 Policy Injection Application Block
4318:
AspectJ in Action: Practical Aspect-Oriented Programming
3837: 3407: 1042:
This pointcut matches any join point in any type in the
4373:
Aspect-Oriented Analysis and Design: The Theme Approach
3800: 4013:"AspectR – Simple aspect-oriented programming in Ruby" 1520:. Aspects relate closely to programming concepts like 3244:
allow additional capabilities to be added to a type:
2593:"More Modular Reasoning for Aspect-Oriented Programs" 2121:, an older alternative to aspect-oriented programming 680:(code joined to specified points in the program) and 656:). Transactions, security, and logging all exemplify 75:". This allows behaviors that are not central to the 59:. It does so by adding behavior to existing code (an 2405:
Advances in Network and Distributed Systems Security
5535: 5420: 5322: 5138: 5080: 5037: 4940: 4931: 4871: 4813: 4804: 4733: 4678: 4346:
Aspect-Oriented Software Development with Use Cases
907:A means of specifying code to run at a join point. 652:with the basic functionality (sometimes called the 4315: 2246: 982:" and there is exactly one argument of any type. 156:, Composition Filters, and Adaptive Programming. 3793: 3004:: CS1 maint: bot: original URL status unknown ( 1585:statement, but is closely analogous to the joke 3248:"Aspect-oriented programming with type classes" 2115:, an alternative to aspect-oriented programming 2109:, an alternative to aspect-oriented programming 1665:with an AOP fragment with analogous semantics: 1158:package. It can be referred to using the name " 1210:pointcut matches the join point, run the code 144:AOP has several direct antecedents A1 and A2: 4777: 4656: 648:In this example, other interests have become 8: 4527:Series of IBM developerWorks articles on AOP 3740:"nemerle/README.md at master · rsdn/nemerle" 3662:"MAKAO, re(verse)-engineering build systems" 3246:Sulzmann, Martin; Wang, Meng (March 2007). 2512: 2510: 2508: 2506: 2504: 941:Pointcuts are specified by combinations of 4937: 4810: 4784: 4770: 4762: 4663: 4649: 4641: 4616:AOSD Graduate Course at Bilkent University 4235:(LNCS). Vol. 1241. pp. 220–242. 3419:The AspectBench Compiler for AspectJ (abc) 2457: 2455: 2453: 2451: 2249:Essential.NET: The common language runtime 2178:(LNCS). Vol. 1241. pp. 220–242. 880:When the advice can run. These are called 181:The examples in this article use AspectJ. 98:implementation. These concerns are called 86:refers to a whole engineering discipline. 4848:Programming in the large and in the small 4425: 4240: 3192: 2530: 2183: 1504:Comparison to other programming paradigms 2578:), Friedrich Steimann, Gary T. Leavens, 2245:Don Box; Chris Sells (4 November 2002). 4294:Foundations of AOP for J2EE Development 3868:"Aspect-Oriented Programming in Prolog" 2253:. Addison-Wesley Professional. p.  2146: 4561:Constraint-Specification Aspect Weaver 4451: 4440: 4188:from the original on 12 September 2015 3694:from the original on 24 September 2015 3202:"A typed monadic embedding of aspects" 3078:from the original on 10 September 2015 2997: 2389:: CS1 maint: archived copy as title ( 2382: 850:"User requested money back." 4462:Wijesuriya, Viraj Brian (2016-08-30) 4162:from the original on 12 December 2008 3993:from the original on 5 September 2015 3104:from the original on 25 December 2014 3052:from the original on 9 September 2015 3026:from the original on 23 February 2011 2339:from the original on 24 December 2017 2213:from the original on 12 January 2016. 7: 5618:Aspect-oriented software development 4601:Wiki dedicated to AOP methods on.NET 4584:Aspect Oriented Programming in COBOL 4555:What is Aspect-Oriented Programming? 4532:Laddad, Ramnivas (18 January 2002). 4521:The AspectBench Compiler for AspectJ 4510:Aspect-Oriented Software Development 4275:Aspect-Oriented Software Development 3160:from the original on 24 October 2011 2291:. John Wiley and Sons. p. 285. 1204:This effectively specifies: "if the 84:aspect-oriented software development 18:Aspect-oriented software development 4611:Spring AOP and AspectJ Introduction 4557:, introduction with RemObjects Taco 4076:from the original on 4 January 2015 4019:from the original on 12 August 2015 3774:from the original on 31 August 2013 2801:from the original on 3 October 2014 2599:from the original on 12 August 2015 1232:Join points are all model elements. 637:"Transaction successful." 490:"User has no permission." 3874:. 14 December 2005. Archived from 2837:from the original on 18 April 2016 2635:from the original on 9 August 2017 2619:"AOP and the Antinomy of the Liar" 2478:from the original on 23 March 2016 25: 4233:Lecture Notes in Computer Science 3642:from the original on 17 July 2015 2791:"Welcome to as3-commons-bytecode" 2176:Lecture Notes in Computer Science 1268:might look like this in AspectJ: 1220:Other potential join point models 784:"Transferring money..." 442:"Transferring money..." 128:(additional behavior) at various 5392:Partitioned global address space 4724: 4269:Robert E. Filman; Tzilla Elrad; 3432:(as part of its functionality), 3340:(as part of its functionality), 2759:(as part of its functionality), 1214:after the join point completes." 924: 178:, which have not seen wide use. 176:Concern Manipulation Environment 112:all logged classes and methods. 2984:"ColdSpring Framework: Welcome" 2435:Notes on Structured Programming 553:"Insufficient funds." 4371:& Elisa Baniassad (2005). 3213:. Aosd '13. pp. 171–184. 2288:Mastering Enterprise JavaBeans 1848:attribute-oriented programming 1402: 943:primitive pointcut designators 1: 4523:, another Java implementation 1420:application servers, such as 1330:// other crosscutting code... 1239:combining the model elements. 196:Motivation and basic concepts 4919:Uniform Function Call Syntax 2107:Subject-oriented programming 1591:obliviousness of application 1228:may have the following JPM: 186:Microsoft Transaction Server 154:subject-oriented programming 5613:Aspect-oriented programming 5387:Parallel programming models 5361:Concurrent constraint logic 4696:Aspect-oriented programming 4672:Aspect-oriented programming 4390:Raghu Yedduladoddi (2009). 4217:Aspect-oriented programming 2160:Aspect-oriented programming 1510:object-oriented programming 1338:This code snippet adds the 859:// Other crosscutting code. 38:aspect-oriented programming 5639: 5480:Metalinguistic abstraction 5347:Automatic mutual exclusion 4512:, annual conference on AOP 3946:Spring Python's AOP module 1613:'Result is :' 1493: 1478: 1466: 1443: 928: 925:AspectJ's join-point model 565:InsufficientFundsException 299:InsufficientFundsException 5352:Choreographic programming 4722: 4516:AspectJ Programming Guide 3020:"Closer Project: AspectL" 2113:Role-oriented programming 1496:Aspect (computer science) 502:UnauthorisedUserException 5402:Relativistic programming 4534:"I want my AOP!, Part 1" 3154:"Emacs Advice Functions" 3098:"Google Project Hosting" 1844:fragile pointcut problem 1667: 1595: 1456:information flow control 1270: 1167: 1057: 1013: 987: 949: 697: 355: 218: 200:Typically, an aspect is 102:or horizontal concerns. 4273:; Mehmet Aksit (2004). 3924:Logilab's aspect module 3799:2014-08-18 at Wikiwix, 3589:Prototype Function#wrap 3528:2006-05-08 at Wikiwix, 3314:2005-08-21 at Wikiwix, 3265:10.1145/1233833.1233842 3219:10.1145/2451436.2451457 2715:2005-08-21 at Wikiwix, 2541:10.1145/1167515.1167514 1571:unforeseen consequences 1252:Inter-type declarations 1247:Inter-type declarations 1150:is an instance of type 682:inter-type declarations 5412:Structured concurrency 4797:Comparison by language 4706:Cross-cutting concerns 4450:Cite journal requires 3957:Pytilities' AOP module 3913:Lightweight Python AOP 2465:AOP Considered Harmful 2096:functional programming 1514:reflective programming 1440:Cross-cutting concerns 1371:program transformation 894:) join points, called 676:. Aspects can contain 659:cross-cutting concerns 654:business logic concern 100:cross-cutting concerns 57:cross-cutting concerns 48:that aims to increase 5623:Programming paradigms 5377:Multitier programming 5193:Interface description 4793:Programming paradigms 4571:15 April 2021 at the 2102:Programming paradigms 1873:framework languages ( 1860:programming languages 1508:Aspects emerged from 1446:Cross-cutting concern 890:A way to specify (or 348:database transactions 4427:10.35537/10915/35861 3438:The JMangler Project 2141:Notes and references 2135:Domain-driven design 1518:metaobject protocols 1469:Advice (programming) 622:// Atomic operation. 190:Enterprise JavaBeans 46:programming paradigm 27:Programming paradigm 5517:Self-modifying code 5125:Probabilistic logic 5056:Functional reactive 5011:Expression-oriented 4965:Partial application 3563:Humax Web Framework 3124:"RemObjects Cirrus" 2821:"Ada2012 Rationale" 2761:Wicca and Phx.Morph 2519:ACM SIGPLAN Notices 1879:Visual Basic (.NET) 1534:Composition Filters 1235:Pointcuts are some 688:defines the times ( 5430:Attribute-oriented 5203:List comprehension 5148:Algebraic modeling 4961:Anonymous function 4853:Design by contract 4823:Jackson structures 4589:2008-12-17 at the 4472:Groves, Matthew D. 4375:. Addison-Wesley. 4348:. Addison-Wesley. 4277:. Addison-Wesley. 4251:10.1007/BFb0053381 4046:on 26 October 2007 3973:2014-11-05 at the 3962:2011-08-25 at the 3951:2016-03-04 at the 3940:2005-04-08 at the 3929:2005-03-09 at the 3918:2004-10-09 at the 3903:2005-04-09 at the 3854:2017-04-11 at the 3849:AOP PECL Extension 3843:2018-01-04 at the 3828:2005-12-26 at the 3817:2016-08-22 at the 3806:2013-03-01 at the 3720:on 5 December 2010 3605:2011-01-25 at the 3594:2009-05-05 at the 3579:2015-03-18 at the 3568:2008-12-09 at the 3557:2006-02-21 at the 3546:2007-06-27 at the 3535:2008-12-16 at the 3517:2008-01-13 at the 3506:2016-07-09 at the 3495:2008-07-04 at the 3476:2007-08-18 at the 3465:2007-02-06 at the 3454:2005-04-05 at the 3443:2005-10-28 at the 3424:2014-12-16 at the 3413:2007-01-24 at the 3402:2005-08-31 at the 3391:2006-05-04 at the 3380:2006-10-17 at the 3369:2005-04-15 at the 3358:2005-04-11 at the 3347:2004-09-01 at the 3332:2004-06-19 at the 3321:2007-07-24 at the 3303:2008-12-19 at the 3259:. pp. 65–74. 3134:on 23 January 2012 2964:on 26 October 2007 2911:2008-11-20 at the 2900:2006-08-21 at the 2867:on 17 January 2013 2777:2008-10-07 at the 2766:2006-12-07 at the 2755:2006-04-02 at the 2744:2006-03-31 at the 2733:2006-07-25 at the 2722:2016-05-03 at the 2704:2015-12-05 at the 2693:2004-09-29 at the 2682:2007-01-19 at the 2671:2008-08-27 at the 2660:2016-03-15 at the 2574:2015-09-24 at the 2563:2015-09-23 at the 2552:2016-03-04 at the 2441:2006-10-12 at the 2194:10.1007/BFb0053381 2119:Predicate dispatch 1565:, are now common. 1237:Boolean expression 162:and colleagues at 5600: 5599: 5490:Program synthesis 5382:Organic computing 5318: 5317: 5223:Non-English-based 5198:Language-oriented 4976:Purely functional 4927: 4926: 4759: 4758: 4506:in .NET framework 4504:list of AOP tools 4401:978-3-639-12084-4 4382:978-0-321-24674-5 4355:978-0-321-26888-4 4329:978-1-930110-93-9 4303:978-1-59059-507-7 4284:978-0-321-21976-3 4106:on 6 January 2006 3801:Go! AOP framework 3512:jQuery AOP Plugin 3296:Numerous others: 2906:AspeCt-oriented C 2739:DotSpect (.SPECT) 2371:on 8 October 2005 2298:978-0-7645-8492-3 2264:978-0-201-73411-9 2130:Decorator pattern 2092:Attribute grammar 1261:extension methods 872:Join point models 16:(Redirected from 5630: 5502:by demonstration 5407:Service-oriented 5397:Process-oriented 5372:Macroprogramming 5357:Concurrent logic 5228:Page description 5218:Natural language 5188:Grammar-oriented 5115:Nondeterministic 5104:Constraint logic 5006:Point-free style 5001:Functional logic 4938: 4909:Immutable object 4828:Block-structured 4811: 4786: 4779: 4772: 4763: 4728: 4665: 4658: 4651: 4642: 4550: 4548: 4546: 4489: 4459: 4453: 4448: 4446: 4438: 4436: 4434: 4429: 4405: 4386: 4359: 4333: 4321: 4312:Laddad, Ramnivas 4307: 4288: 4264: 4244: 4222: 4198: 4197: 4195: 4193: 4178: 4172: 4171: 4169: 4167: 4148: 4142: 4141: 4139: 4137: 4128:. Archived from 4122: 4116: 4115: 4113: 4111: 4102:. Archived from 4092: 4086: 4085: 4083: 4081: 4062: 4056: 4055: 4053: 4051: 4042:. Archived from 4035: 4029: 4028: 4026: 4024: 4009: 4003: 4002: 4000: 3998: 3983: 3977: 3894: 3888: 3887: 3885: 3883: 3864: 3858: 3794:PHP-AOP (AOP.io) 3790: 3784: 3783: 3781: 3779: 3763: 3757: 3756: 3754: 3752: 3736: 3730: 3729: 3727: 3725: 3716:. Archived from 3710: 3704: 3703: 3701: 3699: 3684: 3678: 3677: 3675: 3673: 3664:. Archived from 3658: 3652: 3651: 3649: 3647: 3632: 3626: 3615: 3609: 3486: 3480: 3430:Spring framework 3353:JAsCo (and AWED) 3294: 3288: 3286: 3258: 3240: 3212: 3198: 3196: 3176: 3170: 3169: 3167: 3165: 3150: 3144: 3143: 3141: 3139: 3130:. Archived from 3120: 3114: 3113: 3111: 3109: 3094: 3088: 3087: 3085: 3083: 3068: 3062: 3061: 3059: 3057: 3042: 3036: 3035: 3033: 3031: 3016: 3010: 3009: 3003: 2995: 2993: 2991: 2980: 2974: 2973: 2971: 2969: 2960:. Archived from 2950: 2944: 2943: 2941: 2939: 2925: 2919: 2883: 2877: 2876: 2874: 2872: 2863:. Archived from 2857:"Function Hooks" 2853: 2847: 2846: 2844: 2842: 2836: 2825: 2817: 2811: 2810: 2808: 2806: 2787: 2781: 2651: 2645: 2644: 2642: 2640: 2634: 2626:fernuni-hagen.de 2623: 2615: 2609: 2608: 2606: 2604: 2589: 2583: 2544: 2534: 2514: 2499: 2494: 2488: 2487: 2485: 2483: 2477: 2470: 2459: 2446: 2427: 2421: 2414: 2408: 2401: 2395: 2394: 2388: 2380: 2378: 2376: 2370: 2364:. Archived from 2363: 2355: 2349: 2348: 2346: 2344: 2329: 2323: 2316: 2310: 2309: 2307: 2305: 2282: 2276: 2275: 2273: 2271: 2252: 2242: 2236: 2221: 2215: 2214: 2212: 2187: 2165: 2151: 1823: 1820: 1819: 1816: 1813: 1810: 1806: 1803: 1800: 1797: 1794: 1791: 1788: 1785: 1782: 1779: 1776: 1773: 1770: 1767: 1764: 1761: 1758: 1755: 1752: 1749: 1746: 1743: 1740: 1737: 1734: 1731: 1728: 1725: 1722: 1719: 1716: 1713: 1710: 1707: 1704: 1701: 1698: 1695: 1692: 1689: 1686: 1683: 1680: 1677: 1674: 1671: 1661: 1658: 1655: 1652: 1649: 1646: 1643: 1640: 1637: 1636: 1633: 1630: 1627: 1623: 1620: 1617: 1614: 1611: 1608: 1605: 1602: 1599: 1403:§ Criticism 1345: 1341: 1334: 1331: 1328: 1325: 1322: 1319: 1316: 1313: 1310: 1307: 1304: 1301: 1298: 1295: 1292: 1289: 1286: 1283: 1280: 1277: 1274: 1213: 1212:Display.update() 1208: 1201: 1198: 1195: 1192: 1189: 1186: 1183: 1180: 1177: 1174: 1171: 1161: 1157: 1153: 1149: 1145: 1139: 1136: 1133: 1130: 1127: 1124: 1121: 1118: 1115: 1112: 1109: 1106: 1103: 1100: 1097: 1094: 1091: 1088: 1085: 1082: 1079: 1076: 1073: 1070: 1067: 1064: 1061: 1050: 1045: 1038: 1035: 1032: 1029: 1026: 1023: 1020: 1017: 1007: 1000: 997: 994: 991: 981: 974: 971: 968: 965: 962: 959: 956: 953: 863: 860: 857: 854: 851: 848: 845: 842: 839: 836: 833: 830: 827: 824: 821: 818: 815: 812: 809: 806: 803: 800: 797: 794: 791: 788: 785: 782: 779: 776: 773: 770: 767: 764: 761: 758: 755: 752: 749: 746: 743: 740: 737: 734: 731: 728: 725: 722: 719: 716: 713: 710: 707: 704: 701: 644: 641: 638: 635: 632: 629: 626: 623: 620: 617: 614: 611: 608: 605: 602: 599: 596: 593: 590: 587: 584: 581: 578: 575: 572: 569: 566: 563: 560: 557: 554: 551: 548: 545: 542: 539: 536: 533: 530: 527: 524: 521: 518: 515: 512: 509: 506: 503: 500: 497: 494: 491: 488: 485: 482: 479: 476: 473: 470: 467: 464: 461: 458: 457:isUserAuthorised 455: 452: 449: 446: 443: 440: 437: 434: 431: 428: 425: 422: 419: 416: 413: 410: 407: 404: 401: 398: 395: 392: 389: 386: 383: 380: 377: 374: 371: 368: 365: 362: 359: 342: 339: 336: 333: 330: 327: 324: 321: 318: 315: 312: 309: 306: 303: 300: 297: 294: 291: 288: 285: 282: 279: 276: 273: 270: 267: 264: 261: 258: 255: 252: 249: 246: 243: 240: 237: 234: 231: 228: 225: 222: 74: 52:by allowing the 21: 5638: 5637: 5633: 5632: 5631: 5629: 5628: 5627: 5603: 5602: 5601: 5596: 5538: 5531: 5422:Metaprogramming 5416: 5332: 5327: 5314: 5296:Graph rewriting 5134: 5110:Inductive logic 5090:Abductive logic 5076: 5033: 4996:Dependent types 4944: 4923: 4895:Prototype-based 4875: 4873:Object-oriented 4867: 4863:Nested function 4858:Invariant-based 4800: 4790: 4760: 4755: 4729: 4720: 4674: 4669: 4591:Wayback Machine 4580:, video 57 min. 4573:Wayback Machine 4544: 4542: 4531: 4496: 4486: 4470: 4449: 4439: 4432: 4430: 4415: 4402: 4389: 4383: 4367: 4356: 4336: 4330: 4310: 4304: 4291: 4285: 4268: 4261: 4242:10.1.1.115.8660 4220: 4210: 4207: 4205:Further reading 4202: 4201: 4191: 4189: 4180: 4179: 4175: 4165: 4163: 4150: 4149: 4145: 4135: 4133: 4132:on 29 July 2015 4124: 4123: 4119: 4109: 4107: 4094: 4093: 4089: 4079: 4077: 4066:"gcao/aspector" 4064: 4063: 4059: 4049: 4047: 4037: 4036: 4032: 4022: 4020: 4011: 4010: 4006: 3996: 3994: 3985: 3984: 3980: 3975:Wayback Machine 3964:Wayback Machine 3953:Wayback Machine 3942:Wayback Machine 3931:Wayback Machine 3920:Wayback Machine 3905:Wayback Machine 3895: 3891: 3881: 3879: 3878:on 3 March 2012 3866: 3865: 3861: 3856:Wayback Machine 3845:Wayback Machine 3830:Wayback Machine 3819:Wayback Machine 3808:Wayback Machine 3791: 3787: 3777: 3775: 3765: 3764: 3760: 3750: 3748: 3738: 3737: 3733: 3723: 3721: 3712: 3711: 3707: 3697: 3695: 3686: 3685: 3681: 3671: 3669: 3668:on 24 July 2012 3660: 3659: 3655: 3645: 3643: 3634: 3633: 3629: 3616: 3612: 3607:Wayback Machine 3596:Wayback Machine 3581:Wayback Machine 3570:Wayback Machine 3559:Wayback Machine 3548:Wayback Machine 3537:Wayback Machine 3519:Wayback Machine 3508:Wayback Machine 3497:Wayback Machine 3487: 3483: 3478:Wayback Machine 3467:Wayback Machine 3456:Wayback Machine 3445:Wayback Machine 3426:Wayback Machine 3415:Wayback Machine 3404:Wayback Machine 3393:Wayback Machine 3382:Wayback Machine 3371:Wayback Machine 3360:Wayback Machine 3349:Wayback Machine 3334:Wayback Machine 3323:Wayback Machine 3305:Wayback Machine 3295: 3291: 3275: 3256: 3245: 3229: 3210: 3199: 3182: 3177: 3173: 3163: 3161: 3156:. GNU Project. 3152: 3151: 3147: 3137: 3135: 3122: 3121: 3117: 3107: 3105: 3096: 3095: 3091: 3081: 3079: 3070: 3069: 3065: 3055: 3053: 3044: 3043: 3039: 3029: 3027: 3018: 3017: 3013: 2996: 2989: 2987: 2982: 2981: 2977: 2967: 2965: 2952: 2951: 2947: 2937: 2935: 2927: 2926: 2922: 2913:Wayback Machine 2902:Wayback Machine 2884: 2880: 2870: 2868: 2855: 2854: 2850: 2840: 2838: 2834: 2823: 2819: 2818: 2814: 2804: 2802: 2789: 2788: 2784: 2779:Wayback Machine 2768:Wayback Machine 2757:Wayback Machine 2746:Wayback Machine 2735:Wayback Machine 2724:Wayback Machine 2706:Wayback Machine 2695:Wayback Machine 2684:Wayback Machine 2673:Wayback Machine 2662:Wayback Machine 2652: 2648: 2638: 2636: 2632: 2621: 2617: 2616: 2612: 2602: 2600: 2591: 2590: 2586: 2576:Wayback Machine 2565:Wayback Machine 2554:Wayback Machine 2532:10.1.1.457.2210 2525:(10): 481–497. 2516: 2515: 2502: 2495: 2491: 2481: 2479: 2475: 2468: 2461: 2460: 2449: 2443:Wayback Machine 2430:Edsger Dijkstra 2428: 2424: 2415: 2411: 2402: 2398: 2381: 2374: 2372: 2368: 2361: 2359:"Archived copy" 2357: 2356: 2352: 2342: 2340: 2335:. GNU Project. 2331: 2330: 2326: 2317: 2313: 2303: 2301: 2299: 2284: 2283: 2279: 2269: 2267: 2265: 2244: 2243: 2239: 2222: 2218: 2210: 2204: 2185:10.1.1.115.8660 2163: 2153: 2152: 2148: 2143: 2087:Distributed AOP 2083: 1856: 1854:Implementations 1825: 1824: 1821: 1817: 1814: 1811: 1808: 1807: 1804: 1801: 1798: 1795: 1792: 1789: 1786: 1783: 1780: 1777: 1774: 1771: 1768: 1765: 1762: 1759: 1756: 1753: 1750: 1747: 1744: 1741: 1738: 1735: 1732: 1729: 1726: 1723: 1720: 1717: 1714: 1711: 1708: 1705: 1702: 1699: 1696: 1693: 1690: 1687: 1684: 1681: 1678: 1675: 1672: 1669: 1663: 1662: 1659: 1656: 1653: 1650: 1647: 1644: 1641: 1638: 1634: 1631: 1628: 1625: 1624: 1621: 1618: 1615: 1612: 1609: 1606: 1603: 1600: 1597: 1589:statement. The 1579: 1558: 1556:Adoption issues 1506: 1498: 1483: 1471: 1448: 1434: 1356: 1343: 1339: 1336: 1335: 1332: 1329: 1326: 1323: 1320: 1317: 1314: 1311: 1308: 1305: 1302: 1299: 1296: 1293: 1290: 1287: 1284: 1281: 1278: 1275: 1272: 1266:visitor pattern 1249: 1222: 1217: 1211: 1206: 1203: 1202: 1199: 1196: 1193: 1190: 1187: 1184: 1181: 1178: 1175: 1172: 1169: 1159: 1155: 1151: 1147: 1143: 1141: 1140: 1137: 1134: 1131: 1128: 1125: 1122: 1119: 1116: 1113: 1110: 1107: 1104: 1101: 1098: 1095: 1092: 1089: 1086: 1083: 1080: 1077: 1074: 1071: 1068: 1065: 1062: 1059: 1048: 1043: 1040: 1039: 1036: 1033: 1030: 1027: 1024: 1021: 1018: 1015: 1005: 1002: 1001: 998: 995: 992: 989: 979: 976: 975: 972: 969: 966: 963: 960: 957: 954: 951: 933: 927: 874: 865: 864: 861: 858: 855: 852: 849: 846: 843: 840: 837: 834: 831: 828: 825: 822: 819: 816: 813: 810: 807: 804: 801: 798: 795: 792: 789: 786: 783: 780: 777: 774: 771: 768: 765: 762: 759: 756: 753: 750: 747: 744: 741: 738: 735: 732: 729: 726: 723: 720: 717: 714: 711: 708: 705: 702: 699: 646: 645: 642: 639: 636: 633: 630: 627: 624: 621: 618: 615: 612: 609: 606: 603: 600: 597: 594: 591: 588: 585: 582: 579: 576: 573: 570: 567: 564: 561: 558: 555: 552: 549: 546: 543: 540: 537: 534: 531: 528: 525: 522: 519: 516: 513: 510: 507: 504: 501: 498: 495: 492: 489: 486: 483: 480: 477: 474: 471: 468: 465: 462: 459: 456: 453: 450: 447: 444: 441: 438: 435: 432: 429: 426: 423: 420: 417: 414: 411: 408: 405: 402: 399: 396: 393: 390: 387: 384: 381: 378: 375: 372: 369: 366: 363: 360: 357: 344: 343: 340: 337: 334: 331: 328: 325: 322: 319: 316: 313: 310: 307: 304: 301: 298: 295: 292: 289: 286: 283: 280: 277: 274: 271: 268: 265: 262: 259: 256: 253: 250: 247: 244: 241: 238: 235: 232: 229: 226: 223: 220: 198: 160:Gregor Kiczales 142: 72: 28: 23: 22: 15: 12: 11: 5: 5636: 5634: 5626: 5625: 5620: 5615: 5605: 5604: 5598: 5597: 5595: 5594: 5589: 5584: 5579: 5574: 5569: 5564: 5559: 5554: 5549: 5543: 5541: 5533: 5532: 5530: 5529: 5524: 5519: 5514: 5509: 5487: 5482: 5477: 5467: 5462: 5457: 5452: 5447: 5442: 5432: 5426: 5424: 5418: 5417: 5415: 5414: 5409: 5404: 5399: 5394: 5389: 5384: 5379: 5374: 5369: 5364: 5354: 5349: 5344: 5338: 5336: 5320: 5319: 5316: 5315: 5313: 5312: 5307: 5292:Transformation 5289: 5284: 5279: 5274: 5269: 5264: 5259: 5254: 5249: 5244: 5239: 5230: 5225: 5220: 5215: 5210: 5205: 5200: 5195: 5190: 5185: 5180: 5178:Differentiable 5175: 5165: 5158:Automata-based 5155: 5150: 5144: 5142: 5136: 5135: 5133: 5132: 5127: 5122: 5117: 5112: 5107: 5097: 5092: 5086: 5084: 5078: 5077: 5075: 5074: 5069: 5064: 5059: 5049: 5043: 5041: 5035: 5034: 5032: 5031: 5025:Function-level 5022: 5013: 5008: 5003: 4998: 4993: 4988: 4983: 4978: 4973: 4968: 4958: 4952: 4950: 4935: 4929: 4928: 4925: 4924: 4922: 4921: 4916: 4911: 4906: 4901: 4887: 4885: 4869: 4868: 4866: 4865: 4860: 4855: 4850: 4845: 4840: 4838:Non-structured 4835: 4830: 4825: 4819: 4817: 4808: 4802: 4801: 4791: 4789: 4788: 4781: 4774: 4766: 4757: 4756: 4754: 4753: 4748: 4743: 4737: 4735: 4731: 4730: 4723: 4721: 4719: 4718: 4713: 4708: 4703: 4698: 4693: 4688: 4682: 4680: 4676: 4675: 4670: 4668: 4667: 4660: 4653: 4645: 4639: 4638: 4633: 4628: 4623: 4618: 4613: 4608: 4603: 4598: 4593: 4581: 4575: 4563: 4558: 4552: 4529: 4524: 4518: 4513: 4507: 4495: 4494:External links 4492: 4491: 4490: 4484: 4468: 4460: 4452:|journal= 4413: 4406: 4400: 4387: 4381: 4369:Siobhán Clarke 4365: 4360: 4354: 4338:Jacobson, Ivar 4334: 4328: 4308: 4302: 4289: 4283: 4271:Siobhán Clarke 4266: 4259: 4206: 4203: 4200: 4199: 4173: 4143: 4117: 4087: 4057: 4038:Dean Wampler. 4030: 4004: 3978: 3889: 3859: 3785: 3766:Adam Kennedy. 3758: 3731: 3705: 3679: 3653: 3627: 3610: 3481: 3289: 3274:978-1595936615 3273: 3227: 3194:10.1.1.25.8262 3171: 3145: 3115: 3089: 3063: 3037: 3011: 2975: 2945: 2920: 2878: 2861:autohotkey.com 2848: 2812: 2795:as3commons.org 2782: 2646: 2610: 2584: 2500: 2489: 2447: 2422: 2409: 2396: 2350: 2324: 2311: 2297: 2277: 2263: 2237: 2216: 2202: 2145: 2144: 2142: 2139: 2138: 2137: 2132: 2127: 2125:Executable UML 2122: 2116: 2110: 2104: 2099: 2089: 2082: 2079: 2078: 2077: 2072: 2067: 2059: 2054: 2049: 2044: 2039: 2034: 2029: 2024: 2019: 2014: 2009: 2004: 1999: 1994: 1993: 1992: 1982: 1977: 1972: 1967: 1961: 1956: 1951: 1946: 1941: 1931: 1926: 1917: 1912: 1907: 1902: 1901: 1900: 1894: 1888: 1855: 1852: 1668: 1596: 1578: 1575: 1557: 1554: 1505: 1502: 1501: 1500: 1494:Main article: 1491: 1488: 1486: 1479:Main article: 1476: 1473: 1467:Main article: 1464: 1461: 1459: 1452:access control 1444:Main article: 1441: 1433: 1430: 1367: 1366: 1363: 1355: 1354:Implementation 1352: 1342:method to the 1271: 1248: 1245: 1244: 1243: 1240: 1233: 1221: 1218: 1216: 1215: 1168: 1163: 1058: 1014: 988: 950: 939: 934: 929:Main article: 926: 923: 919: 918: 905: 888: 873: 870: 698: 356: 219: 197: 194: 141: 138: 77:business logic 26: 24: 14: 13: 10: 9: 6: 4: 3: 2: 5635: 5624: 5621: 5619: 5616: 5614: 5611: 5610: 5608: 5593: 5590: 5588: 5585: 5583: 5580: 5578: 5575: 5573: 5570: 5568: 5565: 5563: 5562:Data-oriented 5560: 5558: 5555: 5553: 5550: 5548: 5545: 5544: 5542: 5540: 5534: 5528: 5525: 5523: 5520: 5518: 5515: 5513: 5510: 5507: 5503: 5499: 5495: 5491: 5488: 5486: 5483: 5481: 5478: 5475: 5471: 5468: 5466: 5463: 5461: 5460:Homoiconicity 5458: 5456: 5453: 5451: 5448: 5446: 5443: 5440: 5436: 5433: 5431: 5428: 5427: 5425: 5423: 5419: 5413: 5410: 5408: 5405: 5403: 5400: 5398: 5395: 5393: 5390: 5388: 5385: 5383: 5380: 5378: 5375: 5373: 5370: 5368: 5367:Concurrent OO 5365: 5362: 5358: 5355: 5353: 5350: 5348: 5345: 5343: 5340: 5339: 5337: 5335: 5330: 5325: 5321: 5311: 5308: 5305: 5301: 5297: 5293: 5290: 5288: 5285: 5283: 5280: 5278: 5275: 5273: 5270: 5268: 5265: 5263: 5262:Set-theoretic 5260: 5258: 5255: 5253: 5250: 5248: 5245: 5243: 5242:Probabilistic 5240: 5238: 5234: 5231: 5229: 5226: 5224: 5221: 5219: 5216: 5214: 5211: 5209: 5206: 5204: 5201: 5199: 5196: 5194: 5191: 5189: 5186: 5184: 5181: 5179: 5176: 5173: 5169: 5166: 5163: 5159: 5156: 5154: 5151: 5149: 5146: 5145: 5143: 5141: 5137: 5131: 5128: 5126: 5123: 5121: 5118: 5116: 5113: 5111: 5108: 5105: 5101: 5098: 5096: 5093: 5091: 5088: 5087: 5085: 5083: 5079: 5073: 5070: 5068: 5065: 5063: 5060: 5057: 5053: 5050: 5048: 5045: 5044: 5042: 5040: 5036: 5030: 5026: 5023: 5021: 5020:Concatenative 5017: 5014: 5012: 5009: 5007: 5004: 5002: 4999: 4997: 4994: 4992: 4989: 4987: 4984: 4982: 4979: 4977: 4974: 4972: 4969: 4966: 4962: 4959: 4957: 4954: 4953: 4951: 4948: 4943: 4939: 4936: 4934: 4930: 4920: 4917: 4915: 4912: 4910: 4907: 4905: 4902: 4900: 4896: 4892: 4889: 4888: 4886: 4883: 4879: 4874: 4870: 4864: 4861: 4859: 4856: 4854: 4851: 4849: 4846: 4844: 4841: 4839: 4836: 4834: 4831: 4829: 4826: 4824: 4821: 4820: 4818: 4816: 4812: 4809: 4807: 4803: 4798: 4794: 4787: 4782: 4780: 4775: 4773: 4768: 4767: 4764: 4752: 4749: 4747: 4744: 4742: 4739: 4738: 4736: 4732: 4727: 4717: 4714: 4712: 4709: 4707: 4704: 4702: 4701:Aspect weaver 4699: 4697: 4694: 4692: 4689: 4687: 4684: 4683: 4681: 4677: 4673: 4666: 4661: 4659: 4654: 4652: 4647: 4646: 4643: 4637: 4634: 4632: 4629: 4627: 4624: 4622: 4619: 4617: 4614: 4612: 4609: 4607: 4604: 4602: 4599: 4597: 4594: 4592: 4588: 4585: 4582: 4579: 4576: 4574: 4570: 4567: 4564: 4562: 4559: 4556: 4553: 4541: 4540: 4535: 4530: 4528: 4525: 4522: 4519: 4517: 4514: 4511: 4508: 4505: 4501: 4498: 4497: 4493: 4487: 4485:9781617291142 4481: 4477: 4473: 4469: 4467: 4466: 4461: 4457: 4444: 4428: 4423: 4419: 4414: 4411: 4407: 4403: 4397: 4393: 4388: 4384: 4378: 4374: 4370: 4366: 4364: 4361: 4357: 4351: 4347: 4343: 4339: 4335: 4331: 4325: 4320: 4319: 4313: 4309: 4305: 4299: 4295: 4290: 4286: 4280: 4276: 4272: 4267: 4262: 4260:3-540-63089-9 4256: 4252: 4248: 4243: 4238: 4234: 4230: 4226: 4219: 4218: 4213: 4209: 4208: 4204: 4187: 4183: 4177: 4174: 4161: 4157: 4153: 4147: 4144: 4131: 4127: 4121: 4118: 4105: 4101: 4100:tu-ilmenau.de 4097: 4091: 4088: 4075: 4071: 4067: 4061: 4058: 4045: 4041: 4034: 4031: 4018: 4014: 4008: 4005: 3992: 3988: 3982: 3979: 3976: 3972: 3969: 3965: 3961: 3958: 3954: 3950: 3947: 3943: 3939: 3936: 3932: 3928: 3925: 3921: 3917: 3914: 3910: 3906: 3902: 3899: 3893: 3890: 3877: 3873: 3872:bigzaphod.org 3869: 3863: 3860: 3857: 3853: 3850: 3846: 3842: 3839: 3835: 3831: 3827: 3824: 3820: 3816: 3813: 3809: 3805: 3802: 3798: 3795: 3789: 3786: 3773: 3769: 3762: 3759: 3747: 3746: 3741: 3735: 3732: 3719: 3715: 3709: 3706: 3693: 3689: 3683: 3680: 3667: 3663: 3657: 3654: 3641: 3637: 3631: 3628: 3624: 3620: 3614: 3611: 3608: 3604: 3601: 3597: 3593: 3590: 3586: 3582: 3578: 3575: 3571: 3567: 3564: 3560: 3556: 3553: 3549: 3545: 3542: 3538: 3534: 3531: 3527: 3524: 3520: 3516: 3513: 3509: 3505: 3502: 3498: 3494: 3491: 3485: 3482: 3479: 3475: 3472: 3468: 3464: 3461: 3457: 3453: 3450: 3446: 3442: 3439: 3435: 3431: 3427: 3423: 3420: 3416: 3412: 3409: 3405: 3401: 3398: 3394: 3390: 3387: 3383: 3379: 3376: 3372: 3368: 3365: 3361: 3357: 3354: 3350: 3346: 3343: 3339: 3335: 3331: 3328: 3324: 3320: 3317: 3313: 3310: 3306: 3302: 3299: 3293: 3290: 3284: 3280: 3276: 3270: 3266: 3262: 3255: 3254: 3249: 3243: 3238: 3234: 3230: 3228:9781450317665 3224: 3220: 3216: 3209: 3208: 3203: 3195: 3190: 3186: 3180: 3175: 3172: 3159: 3155: 3149: 3146: 3133: 3129: 3125: 3119: 3116: 3103: 3099: 3093: 3090: 3077: 3073: 3067: 3064: 3051: 3047: 3041: 3038: 3025: 3021: 3015: 3012: 3007: 3001: 2985: 2979: 2976: 2963: 2959: 2955: 2954:"AspectCocoa" 2949: 2946: 2934: 2930: 2924: 2921: 2918: 2914: 2910: 2907: 2903: 2899: 2896: 2892: 2888: 2882: 2879: 2866: 2862: 2858: 2852: 2849: 2833: 2829: 2822: 2816: 2813: 2800: 2796: 2792: 2786: 2783: 2780: 2776: 2773: 2769: 2765: 2762: 2758: 2754: 2751: 2747: 2743: 2740: 2736: 2732: 2729: 2725: 2721: 2718: 2714: 2711: 2707: 2703: 2700: 2696: 2692: 2689: 2685: 2681: 2678: 2674: 2670: 2667: 2663: 2659: 2656: 2650: 2647: 2631: 2627: 2620: 2614: 2611: 2598: 2594: 2588: 2585: 2581: 2577: 2573: 2570: 2566: 2562: 2559: 2555: 2551: 2548: 2542: 2538: 2533: 2528: 2524: 2520: 2513: 2511: 2509: 2507: 2505: 2501: 2498: 2493: 2490: 2474: 2467: 2466: 2458: 2456: 2454: 2452: 2448: 2444: 2440: 2437: 2436: 2431: 2426: 2423: 2419: 2413: 2410: 2406: 2400: 2397: 2392: 2386: 2367: 2360: 2354: 2351: 2338: 2334: 2328: 2325: 2321: 2315: 2312: 2300: 2294: 2290: 2289: 2281: 2278: 2266: 2260: 2256: 2251: 2250: 2241: 2238: 2234: 2233:0-534-94602-X 2230: 2226: 2225:Karl Liebherr 2220: 2217: 2209: 2205: 2203:3-540-63089-9 2199: 2195: 2191: 2186: 2181: 2177: 2173: 2169: 2162: 2161: 2156: 2150: 2147: 2140: 2136: 2133: 2131: 2128: 2126: 2123: 2120: 2117: 2114: 2111: 2108: 2105: 2103: 2100: 2097: 2093: 2090: 2088: 2085: 2084: 2080: 2076: 2073: 2071: 2068: 2066: 2063: 2060: 2058: 2055: 2053: 2050: 2048: 2045: 2043: 2040: 2038: 2035: 2033: 2030: 2028: 2025: 2023: 2020: 2018: 2015: 2013: 2010: 2008: 2005: 2003: 2000: 1998: 1995: 1991: 1988: 1987: 1986: 1983: 1981: 1978: 1976: 1973: 1971: 1968: 1965: 1962: 1960: 1957: 1955: 1952: 1950: 1947: 1945: 1942: 1939: 1936: 1932: 1930: 1927: 1925: 1921: 1918: 1916: 1913: 1911: 1908: 1906: 1903: 1898: 1895: 1892: 1889: 1886: 1883: 1882: 1880: 1876: 1872: 1869: 1868: 1867: 1866:, including: 1865: 1861: 1853: 1851: 1849: 1845: 1840: 1838: 1832: 1830: 1666: 1594: 1592: 1588: 1584: 1576: 1574: 1572: 1566: 1564: 1555: 1553: 1549: 1547: 1542: 1539: 1535: 1531: 1527: 1523: 1519: 1515: 1511: 1503: 1497: 1492: 1489: 1487: 1482: 1477: 1474: 1470: 1465: 1462: 1460: 1457: 1453: 1447: 1442: 1439: 1438: 1437: 1431: 1429: 1427: 1423: 1419: 1414: 1410: 1406: 1404: 1398: 1396: 1392: 1388: 1383: 1380: 1379:aspect weaver 1376: 1372: 1364: 1361: 1360: 1359: 1353: 1351: 1347: 1340:acceptVisitor 1291:acceptVisitor 1276:DisplayUpdate 1269: 1267: 1263: 1262: 1257: 1253: 1246: 1241: 1238: 1234: 1231: 1230: 1229: 1227: 1219: 1209: 1164: 1056: 1053: 1051: 1046:package. The 1012: 1009: 986: 983: 948: 944: 940: 936: 935: 932: 922: 916: 915: 910: 906: 903: 899: 898: 893: 889: 885: 884: 879: 878: 877: 871: 869: 820:transactionId 696: 693: 691: 687: 683: 679: 675: 670: 668: 663: 661: 660: 655: 651: 616:commitChanges 354: 351: 349: 217: 214: 211: 207: 203: 195: 193: 191: 187: 182: 179: 177: 173: 169: 165: 161: 157: 155: 151: 147: 139: 137: 135: 131: 127: 123: 119: 113: 111: 107: 103: 101: 96: 95:encapsulation 92: 87: 85: 80: 78: 70: 66: 62: 58: 55: 54:separation of 51: 47: 43: 39: 35: 30: 19: 5567:Event-driven 5546: 4971:Higher-order 4899:Object-based 4695: 4671: 4543:. Retrieved 4537: 4475: 4463: 4443:cite journal 4431:. Retrieved 4409: 4391: 4372: 4345: 4317: 4293: 4274: 4228: 4216: 4212:Kiczales, G. 4190:. Retrieved 4176: 4164:. Retrieved 4155: 4146: 4134:. Retrieved 4130:the original 4120: 4108:. Retrieved 4104:the original 4099: 4090: 4078:. Retrieved 4069: 4060: 4048:. Retrieved 4044:the original 4033: 4021:. Retrieved 4007: 3995:. Retrieved 3981: 3892: 3880:. Retrieved 3876:the original 3871: 3862: 3788: 3776:. Retrieved 3761: 3749:. Retrieved 3743: 3734: 3722:. Retrieved 3718:the original 3708: 3696:. Retrieved 3682: 3670:. Retrieved 3666:the original 3656: 3644:. Retrieved 3630: 3622: 3618: 3613: 3600:YUI 3 (Y.Do) 3552:Dojo Toolkit 3484: 3397:Object Teams 3338:Google Guice 3292: 3252: 3242:Type classes 3206: 3184: 3174: 3162:. Retrieved 3148: 3136:. Retrieved 3132:the original 3128:codegear.com 3127: 3118: 3106:. Retrieved 3092: 3080:. Retrieved 3066: 3054:. Retrieved 3040: 3028:. Retrieved 3014: 2988:. Retrieved 2978: 2966:. Retrieved 2962:the original 2957: 2948: 2936:. Retrieved 2932: 2923: 2881: 2869:. Retrieved 2865:the original 2860: 2851: 2839:. Retrieved 2827: 2815: 2803:. Retrieved 2794: 2785: 2699:DynamicProxy 2655:Afterthought 2649: 2637:. Retrieved 2625: 2613: 2601:. Retrieved 2587: 2522: 2518: 2492: 2480:. Retrieved 2464: 2434: 2425: 2417: 2412: 2404: 2399: 2373:. Retrieved 2366:the original 2353: 2341:. Retrieved 2327: 2314: 2302:. Retrieved 2287: 2280: 2268:. Retrieved 2248: 2240: 2224: 2219: 2171: 2159: 2155:Kiczales, G. 2149: 1959:Delphi Prism 1905:ActionScript 1857: 1843: 1841: 1837:liar paradox 1833: 1828: 1826: 1664: 1590: 1580: 1567: 1559: 1550: 1543: 1507: 1435: 1412: 1407: 1399: 1384: 1374: 1368: 1357: 1348: 1337: 1259: 1256:open classes 1255: 1251: 1250: 1223: 1205: 1054: 1047: 1041: 1010: 1003: 984: 977: 946: 942: 920: 912: 895: 891: 881: 875: 866: 802:getMoneyBack 694: 681: 677: 673: 671: 666: 664: 657: 653: 649: 647: 352: 345: 215: 209: 205: 201: 199: 183: 180: 158: 143: 114: 109: 104: 99: 90: 88: 83: 81: 64: 41: 37: 31: 29: 5577:Intentional 5557:Data-driven 5539:of concerns 5498:Inferential 5485:Multi-stage 5465:Interactive 5342:Actor-based 5329:distributed 5272:Stack-based 5072:Synchronous 5029:Value-level 5016:Applicative 4933:Declarative 4891:Class-based 4751:AspectWerkz 4500:Eric Bodden 4478:. Manning. 4476:AOP in .NET 4322:. Manning. 3636:"AspectLua" 2828:adacore.com 2497:C2:ComeFrom 1966:(IEEE 1647) 1949:Common Lisp 1938:Objective-C 1829:potentially 1563:refactoring 1538:hyperslices 1432:Terminology 1409:Deploy-time 1395:AspectWerkz 1156:com.company 1044:com.company 938:statements. 911:calls this 883:join points 690:join points 152:protocols, 130:join points 5607:Categories 5552:Components 5537:Separation 5512:Reflective 5506:by example 5450:Extensible 5324:Concurrent 5300:Production 5287:Templating 5267:Simulation 5252:Scientific 5172:Spacecraft 5100:Constraint 5095:Answer set 5047:Flow-based 4947:comparison 4942:Functional 4914:Persistent 4878:comparison 4843:Procedural 4815:Structured 4806:Imperative 4711:Join point 4342:Pan-Wei Ng 4296:. Apress. 3909:Aspyct AOP 3823:Seasar.PHP 3625:handlers). 3621:and after 2891:FeatureC++ 2750:Spring.NET 2728:Seasar.NET 2653:Numerous: 1997:JavaScript 1970:Emacs Lisp 1944:ColdFusion 1940:frameworks 1915:AutoHotkey 1881:(VB.NET)) 1769:&& 1530:delegation 1413:subclasses 1405:, below). 1114:&& 1099:&& 523:getBalance 278:getBalance 164:Xerox PARC 150:metaobject 146:reflection 50:modularity 5439:Inductive 5435:Automatic 5257:Scripting 4956:Recursive 4741:AspectC++ 4734:Languages 4539:JavaWorld 4237:CiteSeerX 4192:11 August 4136:11 August 4096:"AspectS" 4080:11 August 4050:11 August 4023:11 August 3997:11 August 3968:aspectlib 3896:Several: 3812:PHPaspect 3792:Several: 3778:11 August 3724:11 August 3698:11 August 3672:11 August 3646:11 August 3585:Prototype 3490:Advisable 3471:Steamloom 3375:JBoss AOP 3342:Javassist 3189:CiteSeerX 3108:11 August 3082:11 August 3056:11 August 3030:11 August 2933:vub.ac.be 2887:AspectC++ 2885:Several: 2717:PostSharp 2688:AspectDNG 2603:11 August 2527:CiteSeerX 2445:, pg. 1-2 2333:"gnu.org" 2322:language. 2304:4 October 2270:4 October 2180:CiteSeerX 2098:languages 2065:Smalltalk 1885:PostSharp 1587:COME FROM 1577:Criticism 1426:WebSphere 1397:in 2005. 1373:known as 1072:execution 952:execution 897:pointcuts 667:scattered 424:Exception 260:Exception 202:scattered 110:crosscuts 34:computing 5592:Subjects 5582:Literate 5572:Features 5527:Template 5522:Symbolic 5494:Bayesian 5474:Hygienic 5334:parallel 5213:Modeling 5208:Low-code 5183:End-user 5120:Ontology 5052:Reactive 5039:Dataflow 4716:Pointcut 4679:Concepts 4587:Archived 4569:Archived 4474:(2013). 4344:(2005). 4314:(2003). 4186:Archived 4160:Archived 4074:Archived 4017:Archived 3991:Archived 3971:Archived 3960:Archived 3949:Archived 3938:Archived 3927:Archived 3916:Archived 3901:Archived 3852:Archived 3841:Archived 3826:Archived 3815:Archived 3804:Archived 3797:Archived 3772:Archived 3751:22 March 3692:Archived 3640:Archived 3603:Archived 3592:Archived 3577:Archived 3566:Archived 3555:Archived 3544:Archived 3541:Cerny.js 3533:Archived 3530:AspectJS 3526:Archived 3523:Aspectes 3515:Archived 3504:Archived 3501:Ajaxpect 3493:Archived 3474:Archived 3463:Archived 3452:Archived 3441:Archived 3422:Archived 3411:Archived 3400:Archived 3389:Archived 3378:Archived 3367:Archived 3356:Archived 3345:Archived 3330:Archived 3319:Archived 3312:Archived 3309:Compose* 3301:Archived 3237:27256161 3158:Archived 3102:Archived 3076:Archived 3050:Archived 3024:Archived 3000:cite web 2929:"Cobble" 2917:Aspicere 2909:Archived 2898:Archived 2832:Archived 2799:Archived 2775:Archived 2772:SetPoint 2764:Archived 2753:Archived 2742:Archived 2731:Archived 2720:Archived 2713:Archived 2710:Compose* 2702:Archived 2691:Archived 2680:Archived 2669:Archived 2666:LOOM.NET 2658:Archived 2630:Archived 2597:Archived 2572:Archived 2569:abstract 2561:Archived 2558:slides 2 2550:Archived 2473:Archived 2439:Archived 2385:cite web 2337:Archived 2208:Archived 2081:See also 1897:AspectDN 1536:and the 1522:subjects 1481:Pointcut 1475:Pointcut 1060:pointcut 945:(PCDs). 892:quantify 718:transfer 686:pointcut 610:database 580:withdraw 415:database 412:Database 361:transfer 311:withdraw 224:transfer 174:and the 134:pointcut 91:concerns 69:pointcut 5547:Aspects 5455:Generic 5445:Dynamic 5304:Pattern 5282:Tactile 5247:Quantum 5237:filters 5168:Command 5067:Streams 5062:Signals 4833:Modular 4746:AspectJ 4545:20 July 4420:: 159. 4156:iit.edu 4152:"WEAVR" 3935:Pythius 3834:PHP-AOP 3688:"McLab" 3449:InjectJ 3386:LogicAJ 3298:CaesarJ 3283:3253858 2958:neu.edu 2895:AspectC 2420:(2014). 2407:(2002). 2375:19 June 2070:UML 2.0 2027:Nemerle 2002:Logtalk 1990:AspectJ 1980:Haskell 1864:library 1831:match. 1796:proceed 1485:method. 1418:Java EE 1391:AspectJ 1375:weaving 1346:class. 1297:Visitor 1188:Display 1154:in the 1129:company 1028:company 931:AspectJ 909:AspectJ 902:AspectJ 733:Account 727:fromAcc 724:Account 674:aspects 650:tangled 598:deposit 574:fromAcc 517:fromAcc 469:fromAcc 376:Account 370:fromAcc 367:Account 329:deposit 305:fromAcc 272:fromAcc 239:Account 233:fromAcc 230:Account 206:tangled 172:Hyper/J 168:AspectJ 140:History 118:AspectJ 106:Logging 65:without 44:) is a 5310:Visual 5277:System 5162:Action 4986:Strict 4691:Aspect 4686:Advice 4482:  4433:30 May 4412:– 1994 4410:et al. 4398:  4379:  4352:  4326:  4300:  4281:  4257:  4239:  4070:GitHub 4040:"Home" 3745:GitHub 3619:before 3488:Many: 3460:GluonJ 3434:Seasar 3316:Dynaop 3281:  3271:  3235:  3225:  3191:  3187:: 25. 3179:Monads 2580:OOPSLA 2547:slides 2529:  2295:  2261:  2231:  2200:  2182:  2062:Squeak 2052:Racket 2047:Python 2042:Prolog 2017:Matlab 1975:Groovy 1954:Delphi 1809:return 1757:result 1736:around 1727:return 1709:result 1691:result 1660:RETURN 1528:, and 1526:mixins 1490:Aspect 1463:Advice 1387:CFront 1273:aspect 1194:update 1146:" and 1117:within 1016:within 914:advice 838:logger 829:logger 826:Logger 772:logger 763:logger 760:Logger 745:amount 703:Logger 700:aspect 678:advice 625:logger 604:amount 586:amount 541:logger 532:amount 478:logger 430:logger 421:throws 406:logger 403:Logger 388:amount 335:amount 317:amount 287:amount 257:throws 251:amount 126:advice 122:aspect 61:advice 5587:Roles 5470:Macro 5233:Pipes 5153:Array 5130:Query 5082:Logic 4991:GADTs 4981:Total 4904:Agent 4227:'97. 4225:ECOOP 4221:(PDF) 4166:5 May 4110:5 May 3882:5 May 3623:event 3574:Joose 3408:PROSE 3279:S2CID 3257:(PDF) 3233:S2CID 3211:(PDF) 3164:5 May 3138:5 May 2990:5 May 2968:5 May 2938:5 May 2871:5 May 2841:5 May 2835:(PDF) 2824:(PDF) 2805:5 May 2639:5 May 2633:(PDF) 2622:(PDF) 2482:5 May 2476:(PDF) 2469:(PDF) 2369:(PDF) 2362:(PDF) 2343:5 May 2227:1996 2211:(PDF) 2170:'97. 2168:ECOOP 2164:(PDF) 1935:Cocoa 1929:COBOL 1891:Unity 1858:Many 1706:input 1685:print 1679:input 1619:PRINT 1610:PRINT 1601:INPUT 1377:. An 1344:Point 1315:visit 1285:Point 1207:set() 1170:after 1160:set() 1152:Point 1108:Point 1006:Point 996:Point 736:toAcc 592:toAcc 559:throw 496:throw 379:toAcc 323:toAcc 293:throw 242:toAcc 5235:and 4882:list 4547:2020 4480:ISBN 4456:help 4435:2014 4396:ISBN 4377:ISBN 4350:ISBN 4324:ISBN 4298:ISBN 4279:ISBN 4255:ISBN 4194:2015 4168:2018 4138:2015 4112:2018 4082:2015 4052:2015 4025:2015 3999:2015 3898:PEAK 3884:2018 3838:Flow 3780:2015 3753:2018 3726:2015 3700:2015 3674:2015 3648:2015 3364:JAML 3269:ISBN 3223:ISBN 3166:2018 3140:2018 3110:2015 3084:2015 3058:2015 3032:2015 3006:link 2992:2018 2970:2018 2940:2018 2873:2018 2843:2018 2807:2018 2641:2018 2605:2015 2582:2006 2484:2018 2391:link 2377:2005 2345:2018 2320:Java 2306:2011 2293:ISBN 2272:2011 2259:ISBN 2229:ISBN 2198:ISBN 2057:Ruby 2032:Perl 2012:make 1985:Java 1933:The 1871:.NET 1818:temp 1812:temp 1790:temp 1772:args 1751:call 1670:main 1632:FROM 1629:COME 1583:GOTO 1512:and 1321:this 1282:void 1258:and 1148:this 1102:this 990:this 844:info 811:user 808:User 796:Bank 793:void 778:info 754:user 751:User 712:Bank 709:void 631:info 547:info 529:< 484:info 463:user 436:info 397:user 394:User 358:void 284:< 221:void 184:The 148:and 5140:DSL 4502:'s 4422:doi 4247:doi 3327:JAC 3261:doi 3215:doi 2545:, ( 2537:doi 2255:206 2190:doi 2075:XML 2037:PHP 2007:Lua 1924:C++ 1910:Ada 1787:int 1763:int 1742:int 1715:int 1454:or 1424:'s 1422:IBM 1226:UML 1197:(); 1179:set 1144:set 1123:com 1081:set 1063:set 1022:com 980:set 961:set 817:int 742:int 619:(); 568:(); 562:new 505:(); 499:new 385:int 302:(); 296:new 248:int 210:its 204:or 42:AOP 32:In 5609:: 5504:, 5500:, 5496:, 5302:, 5298:, 5027:, 5018:, 4897:, 4893:, 4880:, 4536:. 4447:: 4445:}} 4441:{{ 4394:. 4340:; 4253:. 4245:. 4231:. 4223:. 4184:. 4158:. 4154:. 4098:. 4072:. 4068:. 4015:. 3989:. 3966:, 3955:, 3944:, 3933:, 3922:, 3911:, 3907:, 3870:. 3847:, 3836:, 3832:, 3821:, 3810:, 3770:. 3742:. 3690:. 3638:. 3598:, 3587:– 3583:, 3572:, 3561:, 3550:, 3539:, 3521:, 3510:, 3499:, 3469:, 3458:, 3447:, 3436:, 3428:, 3417:, 3406:, 3395:, 3384:, 3373:, 3362:, 3351:, 3336:, 3325:, 3307:, 3277:. 3267:. 3250:. 3231:. 3221:. 3204:. 3126:. 3100:. 3074:. 3048:. 3022:. 3002:}} 2998:{{ 2956:. 2931:. 2915:, 2904:, 2893:, 2889:, 2859:. 2830:. 2826:. 2797:. 2793:. 2770:, 2748:, 2737:, 2726:, 2708:, 2697:, 2686:, 2675:, 2664:, 2628:. 2624:. 2595:. 2567:, 2535:. 2523:41 2521:. 2503:^ 2450:^ 2432:, 2387:}} 2383:{{ 2257:. 2206:. 2196:. 2188:. 2174:. 2166:. 2022:ML 1922:, 1877:, 1875:C# 1839:. 1766:)) 1748:): 1700:)) 1673:() 1657:30 1639:25 1635:10 1626:20 1616:15 1607:10 1546:C# 1524:, 1428:. 1324:); 1182:() 1173:() 1162:". 1138:); 1066:() 973:)) 853:); 787:); 662:. 640:); 607:); 589:); 556:); 526:() 511:if 493:); 472:)) 448:if 445:); 338:); 320:); 281:() 266:if 192:. 63:) 36:, 5508:) 5492:( 5476:) 5472:( 5441:) 5437:( 5363:) 5359:( 5331:, 5326:, 5306:) 5294:( 5174:) 5170:( 5164:) 5160:( 5106:) 5102:( 5058:) 5054:( 4967:) 4963:( 4949:) 4945:( 4884:) 4876:( 4799:) 4795:( 4785:e 4778:t 4771:v 4664:e 4657:t 4650:v 4549:. 4488:. 4458:) 4454:( 4437:. 4424:: 4404:. 4385:. 4358:. 4332:. 4306:. 4287:. 4263:. 4249:: 4196:. 4170:. 4140:. 4114:. 4084:. 4054:. 4027:. 4001:. 3886:. 3782:. 3755:. 3728:. 3702:. 3676:. 3650:. 3287:. 3285:. 3263:: 3239:. 3217:: 3197:. 3168:. 3142:. 3112:. 3086:. 3060:. 3034:. 3008:) 2994:. 2972:. 2942:. 2875:. 2845:. 2809:. 2643:. 2607:. 2556:, 2543:. 2539:: 2486:. 2393:) 2379:. 2347:. 2308:. 2274:. 2192:: 1964:e 1920:C 1822:} 1815:* 1805:) 1802:x 1799:( 1793:= 1784:{ 1781:) 1778:x 1775:( 1760:( 1754:( 1745:x 1739:( 1733:} 1730:x 1724:{ 1721:) 1718:x 1712:( 1703:} 1697:x 1694:( 1688:( 1682:x 1676:{ 1654:X 1651:* 1648:X 1645:= 1642:X 1622:X 1604:X 1598:5 1333:} 1327:} 1318:( 1312:. 1309:v 1306:{ 1303:) 1300:v 1294:( 1288:. 1279:{ 1200:} 1191:. 1185:{ 1176:: 1135:* 1132:. 1126:. 1120:( 1111:) 1105:( 1096:) 1093:) 1090:* 1087:( 1084:* 1078:* 1075:( 1069:: 1049:* 1037:) 1034:* 1031:. 1025:. 1019:( 999:) 993:( 970:* 967:( 964:* 958:* 955:( 862:} 856:} 847:( 841:. 835:{ 832:) 823:, 814:, 805:( 799:. 790:} 781:( 775:. 769:{ 766:) 757:, 748:, 739:, 730:, 721:( 715:. 706:{ 643:} 634:( 628:. 613:. 601:( 595:. 583:( 577:. 571:} 550:( 544:. 538:{ 535:) 520:. 514:( 508:} 487:( 481:. 475:{ 466:, 460:( 454:! 451:( 439:( 433:. 427:{ 418:) 409:, 400:, 391:, 382:, 373:, 364:( 341:} 332:( 326:. 314:( 308:. 290:) 275:. 269:( 263:{ 254:) 245:, 236:, 227:( 73:' 40:( 20:)

Index

Aspect-oriented software development
computing
programming paradigm
modularity
separation of
cross-cutting concerns
advice
pointcut
business logic
encapsulation
Logging
AspectJ
aspect
advice
join points
pointcut
reflection
metaobject
subject-oriented programming
Gregor Kiczales
Xerox PARC
AspectJ
Hyper/J
Concern Manipulation Environment
Microsoft Transaction Server
Enterprise JavaBeans
database transactions
cross-cutting concerns
pointcut
join points

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.