A few months ago I came across the concept of Aspect Oriented Programming or AOP. I thought that it was interesting. And I stored the information away… somewhere. The current issue of the Communications of the ACM features a series of articles on this topic. I received my copy a few weeks ago. After the cover was staring me in the face for a while, I decided that it is time to read it.
What is AOP? Is this a new fad? I haven’t even gotten down this OOP (Object-Oriented Programming) thing—you might say—and you want to talk to me about something new already? The good news is that OOP is not going away, so don’t worry. AOP augments OOP and enables you to express certain concepts in a more powerful way.
Another piece of good news: There is a ton of information on the web about AOP. When OOP came about one had to buy books, go to conferences, schmooze with other OOP enthusiasts to find out more about the technology. These days you can turn to the web and learn a great deal. Start with aosd.net, the Aspect Oriented Software Development web site.
The definition of AOP from aosd.net is: “Aspect-oriented software development is a new technology for separation of concerns (SOC) in software development. The techniques of AOSD make it possible to modularize crosscutting aspects of a system.”
Before you stop reading because you think that this is yet another purely theoretical nonsense with absolutely no practical applications take a look at AspectJ. AspectJ is a seamless extension to support AOP for Java.
It is important to emphasize about AOP that it builds on existing technologies. It doesn’t work without a sound design. If you are to create a great design, you will have to apply the right technique to the right problem, be it AOP, OOP, functional decomposition, structured programming, or anything else. Remember: AOP is yet another tool into your software developer’s toolbox. If all you have is a hammer then everything will look like a nail!
Now you know that AOP exists. Go an and read about it, learn about, and write to me about it. Share your thoughts with the rest of your network.
* acm.org: Association for Computing Machinery
* aosd.net: Aspect Oriented Software Development
* aspectj.org: AspectJ