Talk:Aspect-oriented programming

Latest comment: 3 years ago by David spector in topic List of programming languages

Patent

edit

The article puts a lot of emphasis on the fact that a patent covering AOP exists without a good justification for such emphasis.

The article right now starts with: 'In computing, aspect-oriented programming (AOP) is a patented programming paradigm [...]'

Some problems with that:

  1. US-centric point of view. Only a US patent is cited. Those don't necessarily apply outside of US. Some jurisdictions outright prohibit software or idea patents.
  2. Questionable relevance. Many software and idea patents granted in US might be invalid or are held for defensive purposes and are unlikely to be pursued. A lot of concepts and algorithms are patented and if you wanted to be consistent, you'd have to start many articles on programming related subjects by mentioning that the subject is patented, which would be rather superfluous.

Then, in the criticism section there's: 'Firstly, aspect-oriented programming is patented, and thus not freely implementable.'

That looks like original research. The only citation is to the patent itself, which proves that it in fact exists. But claims as to how much of a problem it is in practice and whether it has actually impacted adoption of the technology -- all things which are implied by that statement -- go beyond the mere existence of a patent.

Unless there are sources showing actual impact of the patent on companies using AOP or providing AOP tools, the criticism part, and the mention at the top probably too, should be removed.

188.146.76.208 (talk) 14:54, 17 August 2015 (UTC)Reply

Jargon in the intro

edit

"Introduced after object-oriented programming (OOP), it is a post-object-oriented programming paradigm." - The second half of the sentence repeats the first half, adds nothing further to the explanation, and uses unnecessary jargon "post-object-oriented programming paradigm" (I count 2-3 buzzwords in 5 words total); it should be either clarified or removed. Any thoughts? --216.165.132.252 (talk) 14:38, 1 June 2009 (UTC)Reply

Indeed, I found myself wondering if ""post-object-oriented-programming"" is some sort of joke or subtle negative commentary due to the obvious acronym. Nothing wrong with post-OOP, I guess, but it does seem like the intro to the article could be a lot more informative. -CS —Preceding unsigned comment added by 76.114.177.30 (talk) 04:15, 2 June 2009 (UTC)Reply

Post-OOP

edit

In the introduction there's a line that says "Because it is a paradigm that was introduced historically after OOP it is a Post-OOP or Post-object programming paradigm, and because it is the best known, it is sometimes confused with the entire class of paradigms." However the link from "Post-object" goes right back to this page, which doesn't agree with the aforementioned statement. 72.195.134.236 (talk) 23:44, 8 February 2009 (UTC)Reply


Comparison to other programming paradigms

edit

Designers have considered alternative ways to achieve separation of code, such as C#'s partial types, but such approaches lack a quantification mechanism that allows reaching several join points of the code with one declarative statement.

Could someone please elaborate on how the 'partial' capability of C# could be used to achieve aspect-oriented effects? I'm not quite seeing it. All the partial keyword allows is for you to define a single class in n parts (and possibly n different files). How does this even approximate aspect-oriented programming?

Isn't CL/CLOS Aspect oriented because of Multimethods and method wrappers

Methinks AOP should be related to the concepts of a database trigger and event-driven programming. I don't see that connection being made in the current article text. By the way, there is a Google Techtalk from May 2006 with Gregor Kiczales titled Aspect Oriented Programming: Radical Research in Modularity --LA2 20:08, 4 July 2007 (UTC)Reply

extension of the motivation example

edit

I would suggest that somebody who knows AOP extend the example from the section "Motivation and basic concepts" to show what it might look like in AOP.

I totally agree. It would have been a great help for me also.ori  06:07, 11 September 2006 (UTC)Reply
I agree too. This is something that the article MUST have.
  We must do some new section on disccution to poll about this subject?
  Maybe there is a reason for doing this but I think it must be done.


The article on Karl Lieberherr claims he introduced aspect-oriented programming. Maybe someone here could consolidate the two articles? Rvollmert 07:12, 2004 Aug 23 (UTC)

This is gibberish. Each piece of jargon is defined in terms of some other piece of jargon, never in plain English (or even in the jargon of object-oriented programming, which at least many people have heard of). 24.91.137.214 2004-11-28

This is a comment from the perspective of someone who doesn't know AOP, and is trying to learn a bit. First, thank you to the person who added the link to the "Attempt to explain AOP without buzzwords." Perhaps the wikipedia article could take some cues from that source? Second, with regard to the invention of AOP, the article says only "no one remembers exactly when". That may be true, but some sort of indication would be nice for those who don't even know which decade is the right one.

Just a minor observation - my expirience is that telecommunications applications' core concern isn't routing calls - it's billing, really bad example here.

I agree with most of these comments above that this description of AOP is too complicated, but, more importantly, fundamentally wrong. I believe that the article will have to be substantially rewritten to be correct. It would be my first article, so I may need some help. I have a good understanding of AOP, but I am just getting started with the Wikipedia. My major beef is that a concern is never properly defined and the relationship between crosscutting and non-crosscutting concerns is never explained. Many other beefs stem from this. --Andrew Eisenberg 20:51, 5 May 2005 (UTC)Reply



I just want to clarify something: in the intro it is stated that "An aspect can alter the behavior of the base code", and that is, in my opinion error-inducing. In fact (and i'm talking about AspectJ here) an Aspect can advise itself or other aspects. This may be important, as it is a source of many doubts for those learning AOP. --Rui 5 July 2005 00:48 (UTC)

This page talks about Aspect-Oriented Programming in general, not AspectJ (at least until section 4). In AspectJ, it's certainly possible for aspects to advise themselves. However, that's not a requirement for AOP languages. Hyper/J, for example, only has a static joinpoint model and the hypermodules cannot make changes to themselves.
Conceptually, I think AOP is easiest to explain by keeping the base and aspect modules separate, although it is true that this rarely happens when coding using AOP. When writing the intro, I tried to keep the explanation simple, rather than complete. However, if you have any suggestions for the intro, please make the changes or put them in the talk section. --Andrew Eisenberg 7 July 2005 17:21 (UTC)
AspectJ comes tightly integrated with a powerful set of tools, 
called AJDT, which assist developers in the understanding of how
aspects and base code interact.

Not to nitpick, but isn't it loosely integrated, but very well supported?

You're right. I actually don't like that section 4 at all. There is already another article on AspectJ. And neither that article, nor section 4 here are all that good. What should happen is that section 4 simply becomes a link to the aspectJ article and that other article is updated. Any takers??? :-)--Andrew Eisenberg 23:53, 23 October 2005 (UTC)Reply


This article contains 2 examples of standard java code and 0 examples of AO code... most unuseful.


Could someone add a discussion of aspect-oriented vs higher-order programming? The "other programming paradigms" touches on it very briefly. It seems like AOP is a special case of higher-order functions. Is there something else to it?

Another JavaScript implementation:

Dojo (http://dojotoolkit.org, a toolkit I work on) has implemented full before, after, around, before-around, and after-around advice for JavaScript by way of the dojo.event.connect() API.

An article describing the API is at http://dojotoolkit.org/docs/dojo_event_system.html. Discussion of AOP concepts begins about halfway through.

Perhaps someone else would feel comfortable adding it to the list of JS AOP implementations?

Is this correct ?

edit

"AspectJ has two JPMs: pointcuts and advice, and inter-type declarations. Other aspect languages have different JPMs." 2 or 3 ?

Removed talk-like text

edit

The following text (from the end of "Motivation and basic concepts") does not read like an article - it reads more like a discussion. It simply does not belong there as it is, so I have removed it. If it is useful and informative, please integrate it properly. Hairy Dude 20:12, 16 April 2006 (UTC)Reply

Analogies from a newbie:

The use of this on methods seems to be similar to overriding a method in a subclass, but:

  • You can change multiple methods and/or classes in one definition;
  • You don't need access to the constructor / factory method to instantiate subclasses -- the existing classes are modified.

The use of this on variables / fields appears to be able to convert a plain old Java field into something like a "property" in C#, which is an accessor / mutator pair with syntactic sugar to look like a variable in an lvalue or rvalue context.

I'm sure I'm missing much of it, but perhaps this makes it more accessible?


Actually, I would think a better analogy in the Object Oriented world is the Visitor pattern. A Visitor encapsulates a specific behavior that could be entirely unrelated to the object that it is visiting; but at the same time, being able to inject that unrelated behavior into a method of that object. One difference I see between the Visitor pattern and AOP is that the visited object needs to know the interface of the Visitor and will also need to explicitly call the Visitor’s method.


Removing Tutorials

edit

Why someone removed an easy tutorial to AOP http://www.alnaja7.org/AOP.ppt ? It tooked someone days to do a simple tutoril , but some don't like others to benefit ? Alhoori 01:24, 21 May 2006 (UTC)Reply

This has already been discussed in your talk page. OhNoitsJamieTalk 03:11, 21 May 2006 (UTC)Reply
Is wikipedia a personal thing , so that you people can't decide whether the topics/links can remain or no ? How can I make vote on that ? Alhoori 09:15, 21 May 2006 (UTC)Reply

Multiple Inheritance

edit

Would it be accurate to consider the desire for multiple inheritance to be a desire for aspect-orientation? That is, If I have a drawable class and a shape class, I might make a class that inherits both to create a "drawable shape". —Ben FrantzDale 17:27, 13 June 2006 (UTC)Reply

Adding example

edit

IP address 128.122.253.228 wrote

[It would be useful if these examples were concluded with a parallel example of the aspect-oriented solution to these cross-cutting problems in the same JAspect/Pseudo Java, so that readers some reference points as they read the descriptions below.]

under the "Motivation and basic concepts" header. I'm assuming that person simply didn't know about the talk pages, and so I removed the comment. However, I think question is still valid, although it was posted in the wronge place. It would be helpful--if possible--for somebody more knowledgable about AOP to post a solution to the problem raised. michaelb Talk to this user 15:29, 28 June 2006 (UTC)Reply

sample code with AOP

edit

The sample of transfer method shows clears where the problem is without AOP. Can someone provide an "after version" of the same method with AOP? Thanks.--Mongol 17:46, 1 August 2006 (UTC)Reply

"Problems adopting" and weasel words

edit

The hypothetical programmer in this section is a bit one-sided and I think the entire section should be rewritten. It also should probably be renamed "Criticisms of Aspect Oriented Programming", to go along with most other articles that use that naming. -- Davetron5000 17:50, 22 August 2006 (UTC)Reply

Full ACK, "problems adopting" implies that there is nothing fundamentally wrong with AOP. I found the following paper, which criticizes AOP and should be mentioned: http://portal.acm.org/citation.cfm?id=1167514 --Schoelle (talk) 18:06, 23 May 2009 (UTC)Reply

Muddled Definition

edit

The definition of AOP above the Contents break is muddled with concerns about AOP centric languages. The explanation dives into what are apparently language usage debates before the reader even understands what AOP is. Somewhat like getting into a C++/Java/C# debate when defining what Object Oriented programming is, I don't see why AspectJ and the like are even mentioned in the definition beyond "some languages built to support AOP are..." statements.

Something wrong with formating

edit

This page (the actual article, and when editing the article), looks very odd in lynx. can't figure out why. (doesn't happen on other pages). user:Bawolff (I'm not logged in here) 05:48, 22 January 2007 (UTC)Reply

AOP example?

edit

The code has lost its elegance and simplicity because the various new concerns have become tangled with the basic functionality There should be an example of this program rewritten in a AOP language so we can see how AOP simplifies this kind of thing.


Proposed Example Application

edit

-- Reacton on the text above by TjerkWol 17:43, 24 February 2007 (UTC)Reply

Note that such a program much be large too see the advantages of AOP... Below is an example *program* without AOP in it:

Non AOP Program

edit
abstract class TwoDShape {

int getX();
int getY();
double getArea();

}

abstract class Circel extends TwoDShape {
  int getRadius();
}

class Line extends TwoDShape;

class Rectangle extends TwoDShape

class Square extends Rectangle


This is just a small program that does not work, but the object oriented structure is clear. The subclasses of TwoDShape should implement the methods. I did not do it here to safe time, and because it is not neccesary.

Logging Aspect

edit

Now suppose you want to log each call to any getArea like this

double Circle.getArea() {
 log("Get Area Called");
 double area=PI * this.r * this.r;
 log("Area of circle is: "+area);
 return area;
}


If you want to do something like this for each getArea method of each subclass of TwoDShape you have a lot of work, and also code entaglement.. What if you have added logging for all your getArea methods and someone else adds its own subclass of TwoDShape and does not implement the logging? Then you have a problem..


I have a Syslog class (C++) that writes to the syslog by default, and all logging in my project is done through a Syslog object. It's the first object built at runtime, and generally the only one, but it doesn't have to be. Every object doesn't need to reference it, it just has to be available. If I want it to do something different, I extend the class and change or supplement the default behaviour. Works for me, not sure this is a good example. Tsingi (talk) 01:35, 24 April 2008 (UTC)Reply

The AOP Solution

edit

AOP deals with this problem by identify this as a seperate concern, or aspect: a logging aspect. Pseude code for a logging aspect:

aspect GetAreaLogging {

 // this defines all our methods that much be advised by this aspect,
 // it is called a joint point.
 // This one means: All subclasses of TwoDShape where getArea is called
 jointpoint getAreaJoinPoint() :  execution(double TwoDShape+.getArea());


 // below is the actual advice, it is just a anonymous method of the aspect
 // only the special aspect-enabled-compiler weaves this code in the base code
 double around() : getAreaJointPoint() {
  log("getArea called");
  double area=proceed();
  log("The value of the area is: "+area);
  return area;
 }
}

Hope you get the point a bit now, i know it is not easy. See aspectj.org for more information.

I get everything before this section, in that I understand the problem you are trying to solve. But your example here is absolutely and completely obtuse. The language and terminology you use in your comments are themselves undefined and not known by people who are not already experts in AOP. You've left out a huge number of basic facts that are necessary to understand the example. You must find a method of explaining step by step what it is you are trying to do, WITHOUT any of the AOP terminology. This is the type of thing that only some people are good at. You need to find one of those people. (I'm good at it, but not knowing a thing about AOP I can't help you.) 72.137.175.104 (talk) 16:10, 17 December 2008 (UTC)Reply

Side Note

edit

Note that logging is the typical example concern to introduce someone to AOP, much more advance applications with AOP are possible. Read literature and websites to know more.

TjerkWol 17:43, 24 February 2007 (UTC)Reply

Other comparisons (that would be useful to me)

edit

How does AOP compare to Python decorators? (All of the examples seem to be exactly what a decorator would be used for in Python.)

How does AOP compare to Lisp macros? (Python decorators seem like a subset of Lisp macros, and from the article, so does AOP.)

How does AOP compare to CLOS

It would also be useful if someone could compare AOP to what you can do with XOTcl mixins and filters. Donal Fellows 22:36, 15 September 2007 (UTC)Reply

Missing "throws"

edit

In the section "Motivation and basic concepts" there is "throw e" , but e is of type Exception so the function should have "throws Exception" (because Exception is not subclass of RuntimeException).

Adoption risks section

edit

does indeed need a lot of work. For starters, it doesn't cite any sources. Next to that, some of the issues raised in that section apply equally to non-AOP programs or, even, non-Java programs. For example, the following sentence:

"For example, consider the impact of injecting code to return true at the beginning of a password verification function that returns a boolean value."

can just as easily apply to C / C++ code, seeing that anyone can use a profiler (or whatever the name for such a type of program is) to examine the various function calls and whatnot and change the program flow, for example by turning a false to a true in a password verification function.

And besides, hacking into a program like this requires a person distributing a somewhat altered version of the program, seeing that I'm not sure if it's even possible for, say, a virus to alter a Java program while it's running.

It's not an AOP-specific problem, even - with the right tools, anyone can decompile a Java program, insert his own code, and recompile. Or, on a higher level, anyone can alter the memory of a JVM by using special tools. (the last statement is a guess by the way).

The section seems, in my opinion, awfully negative towards aspect-oriented programming, highlighting problems that occur in any form of programming, in any programming language. Also, the advantages don't seem to be weighed in the comparison. —Preceding unsigned comment added by 62.58.16.59 (talk) 15:34, 13 November 2007 (UTC)Reply

I suggest that this "adoption risks" section be removed, because it is factually inaccurate. Never mind how weasel-ish it is, it just isn't a part of reality. Jfm3 (talk) 22:11, 16 December 2007 (UTC)Reply
I want to object. Rather, the title should be changed to something containing "Criticism". Anyway, including such a praragraph is mandatory IMHO, because AOP is a controversal issue. When you try to introduce AOP into a team, a project or something similar, chances are that you have to face surprisingly strong opposition, mostly using exactly the arguments detailed in this section. In this sense, this paragraph is precise and correct, just lacking quotations. Removing such an paragraph would endanger the whole AOP article to become biassed (towards AOP), as there is an ongoing controversy around this topic. Ichthyostega (talk) 20:14, 4 December 2008 (UTC)Reply

Quality concerns

edit

So, I studied computer science at MIT, and I find the introduction to be dense and to explain the concept poorly. If I'm having trouble slogging through it, I'm sure that general-audience readers are completely lost. This is probably why the {{technical}} tag was added (but someone has removed it). I've added {{confusing}}, though the reason the article is confusing is that it uses too much technical jargon and focuses on detailed technical aspects up front, rather than starting with a simple overview. -- Beland (talk) 08:07, 11 August 2008 (UTC)Reply

i also studied computer science, and i completely agree. please start with a gentle, implementation agnostic introduction ("terminology", currently 4 pages down!) and remove implementation specifics. thanks! akmg (talk) 14:53, 3 April 2009 (UTC)Reply
I am the creator of PostSharp, a commercial AOP framework for Microsoft.NET. I think this page does not serve the purpose of explaining aspect-oriented programming to mainstream developers. Instead, it is an academic description of the traditional approach to AOP (the AspectJ one). I fully respect the academic community and I give them credit to having developed the AOP concepts, but I think the first 20 lines of the page should focus on a larger audience. Would you agree on us spending some effort working on this page? — Preceding unsigned comment added by Gfraiteur (talkcontribs) 13:31, 13 February 2011 (UTC)Reply

Merge Proposal

edit

Aspect-Oriented Software Development

edit

I am currently editing the Aspect-Oriented Software Development page, to provide a more general overview of AO. The AOSD and the AOP pages overlap on certain topics, so we should try to coordinate the content. I put this page under the AOSD category. --Cotttho (talk) 23:41, 20 August 2008 (UTC)Reply

AOSD section merge

edit

The AOSD article has a good section on AOP that seems to more properly belong in this article and should be merged. --Cybercobra (talk) 00:56, 15 November 2008 (UTC)Reply

Third Response

edit

Preliminary indications: wikify, possible restructure, merge content from § in the AOSD article here, then link this as the main for that section. Lycurgus (talk) 19:25, 9 January 2009 (UTC)Reply

Last action above taken first, removing the merge tag. 72.228.150.44 (talk) 02:08, 10 January 2009 (UTC)Reply
Also there are some significant distortions in the current text which I am in the process of cleaning. About a fifth thru, the Java/Aspect J orientation needs to be put in its proper scope, as it stands now the article is AOP using Aspect J an advert. 72.228.150.44 (talk) 02:24, 10 January 2009 (UTC)Reply

crosscutting concerns aren't secondary

edit

I changed the first sentence to remove the idea that AOP only modularize "secondary concerns". While it is possible to see that as true of many examples of AspectJ's advice mechanism, it is less true of code that uses AspectJ's inter-type declarations, and not at all true of code that uses Hyper/J. It also isn't true of several of the other systems introduced in the original AOP paper. AOP is about modularizing crosscutting concerns, and crosscutting is an inherently symmetric relationship. The small concern isn't the crosscutting one - two concerns crosscut each other with respect to a given hierarchical representation.

I tried to fix some bugs in this page a few years ago, and someone went and undid the changes right away. Hopefully that won't happen this time.

GregorKiczales (talk) 18:26, 17 February 2011 (UTC)Reply

What is AOP?

edit

I have tried quite hard to get a feeling for what AOP is from the article and various links here. I am still 99% puzzled and cannot see that it is anyway (as explained) a "paradigm". What relevance has "cross-cutting" (as I understand it) got to do with programming paradigms at all? If it really is something special or different to other styles of programming, surely those differences can be explained in simple english rather than weasel words or AOP jargon that makes little sense to me. It seems to me that someone who knows what they are talking about should completely re-write this article. — Preceding unsigned comment added by 81.157.168.203 (talk) 11:29, 30 November 2011 (UTC)Reply

I use Spring in my projects and yet I still can’t understand this article’s explanations. The description of the rationale in the lede makes sense. The Motivation and basic concepts portion is just inscrutable. It starts out with a clear example of the problem, but the discussion of the solution rapidly falls apart. It talks about security as an example but then presents a solution around logging instead. That example yields no insight into how the aspect mechanism for logging got invoked or how the original example code would have been modified to take into account the AOP solution. It also has a comment at the end about “Other crosscutting code”, and yet the aspect declaration was specifically for logging. The Join point models discussion again makes sense in some abstract way, but how that translates into anything that a programmer actually does and how the entire structure comes together is completely elusive. Eventually my eyes glazed over and I gave up. I recommend a clear, top-to-bottom example of solving the example problem using AOP in the most primitive, generic way. Strebe (talk) 21:07, 1 October 2014 (UTC)Reply

"Cross-cutting" vs. "crosscutting"

edit

"Cross-cutting" and "crosscutting" it seems are used interchangeably in this article (6 for the former, 14 for the latter as of this post -- give or take a few). In the cross-cutting concern article, the hyphen is used in the title, and the hyphenated version is used around 14 times, where the non-hyphenated is used just once.

We need to pick one and stick with it. I think that the hyphenated version is far more readable, and probably more correct, as well. However, I'm not a big Wikipedia buff, so I don't want to do it myself and open up room for controversy. Anyone care to make this call? Dugwyler (talk) 20:44, 11 April 2012 (UTC)Reply

History

edit

I don't get it... this article is describing a technique that was commonly used in graphics programming in the 1980's (e.g. the Xt Intrinsics, Xaw, the Motif toolkit, the Andrew toolkit, and also an even older style used on Mac's, OS/2 and the like (though I'm not at all familiar with those). How does AOP differ from plain-old-fashioned "callbacks" ? linas (talk) 03:31, 16 October 2012 (UTC)Reply

Someone said in 2008 that this article needed more citations. Why does it not have more? — Preceding unsigned comment added by Make your own luck (talkcontribs) 21:22, 30 December 2013 (UTC)Reply

edit

Hello fellow Wikipedians,

I have just modified one external link on Aspect-oriented programming. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:

When you have finished reviewing my changes, please set the checked parameter below to true or failed to let others know (documentation at {{Sourcecheck}}).

This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}} (last update: 5 June 2024).

  • If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
  • If you found an error with any archives or the URLs themselves, you can fix them with this tool.

Cheers.—InternetArchiveBot (Report bug) 23:38, 19 October 2016 (UTC)Reply

Adding topic filters

edit

Hi,

I am going to add new sub-topic "filters" on Aspect-oriented programming. Filters can be applied to exclude unwanted joinpoints from given pointcut expression.

[1] [2] [3] [4] Apandey6 (talk) 03:47, 21 February 2017 (UTC)Reply

References

edit

Hello fellow Wikipedians,

I have just modified one external link on Aspect-oriented programming. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:

When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.

This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}} (last update: 5 June 2024).

  • If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
  • If you found an error with any archives or the URLs themselves, you can fix them with this tool.

Cheers.—InternetArchiveBot (Report bug) 15:45, 27 July 2017 (UTC)Reply

Introductory sentence is self referencing.

edit

Take a little quick look at this interesting bit of gobbledygook:

In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns. It does so by adding additional behavior to existing code (an advice) without modifying the code itself, instead separately specifying which code is modified via a "pointcut" specification, such as "log all function calls when the function's name begins with 'set'". This allows behaviors that are not central to the business logic (such as logging) to be added to a program without cluttering the code, core to the functionality. AOP forms a basis for aspect-oriented software development.

Oh brother. This is supposed to explain what something is to someone who doesn't already *know* what it is. So let's start with this:

In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns.

The problem is that "cross-cutting concerns" itself is a link to an AOP principal. This is a sentence trying to describe AOP using AOP, and as such, sets the rest of the paragraph up for failure. I'm fairly certain that requiring someone to understand subject X before reading what subject X is in the first place isn't a great idea.

𝓦𝓲𝓴𝓲𝓹𝓮𝓭𝓲𝓪𝓘𝓼𝓝𝓸𝓽𝓟𝓮𝓮𝓻𝓡𝓮𝓿𝓲𝓮𝔀𝓮𝓭-𝓟𝓮𝓮𝓻𝓡𝓮𝓿𝓲𝓮𝔀𝓮𝓭𝓜𝓮𝓪𝓷𝓼𝓡𝓮𝓿𝓲𝓮𝔀𝓮𝓭𝓑𝔂𝓟𝓮𝓮𝓻𝓼𝓞𝓷𝓵𝔂 (talk) 22:48, 1 July 2020 (UTC)Reply

List of programming languages

edit

The list of programming languages implementing some form of AOP in section Implementations seems unreliable. I picked two languages I use often, PHP and JavaScript, and looked at the WP articles for both. Neither article mentions "aspect" or "AOP". Nor am I aware of AOP in my programming or learning experiences with either language. David Spector (talk) 14:12, 6 December 2020 (UTC)Reply