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:
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).
17:
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
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
18: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:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.