Jim McKeeth | Podcast at Delphi.org Introduction to Aspect Oriented Programming with Cirrus and Delphi Prism
Agenda What is AOP? Why AOP? Two AOP Paradigms The Cirrus Framework Examples Debugging Other AOP Frameworks Future 2
What is Aspect-Oriented Programming? HMOY know what AOP is? You have come to the right place
A Paradigm Shift Aspect-Oriented programming is to Object-Oriented programming Object-Oriented programming is to Procedural programming as Won’t it be slower / harder to debug? Why do we need a new paradigm? I can do this already!
A Definition Super-Encapsulation Think of it as A programming paradigm that increases modularity by enabling improved separation of concerns. This entails breaking down a program into distinct parts allowing the separation of cross-cutting concerns. Think of it as Super-Encapsulation
Think of it as Super-Encapsulation
What is a Concern? A distinct and cohesive area of functionality Examples: Business logic User interface Database access Error handling Logging Threading Transactions Security Exception handling Secondary requirements, but often the bulk of our code!
What Makes a Concern Cross-Cut? Error handling Business logic Thread locking User Interface
The Principles of OOD SRP The Single Responsibility Principle - A class should have one, and only one, reason to change. OCP The Open Closed Principle You should be able to extend a classes behavior, without modifying it. LSP The Liskov Substitution Principle Derived classes must be substitutable for their base classes. ISP The Interface Segregation Principle Make fine grained interfaces that are client specific. DIP The Dependency Inversion Principle Depend on abstractions, not on concretions. Robert C. Martin “Uncle Bob” www.objectmentor.com butUncleBob.com http://butUncleBob.com/ArticleS.UncleBob.PrinciplesOfOod
Two AOP Paradigms Pre-Compile / At-Compile Post-Compile Decorating the code with the aspects before compilation (method used by Cirrus) Concerns are woven in during compilation. Post-Compile Weave the advice in after compilation via Point-Cut definitions (method used by AspectJ) Allows modification of existing functionality without modifying code.
Bank Transfer method TBank.Transfer(fromAccount, toAccount: TAccount; amount: Integer); begin if fromAccount.Balance < amount then raise new EInsufficientFundsException(); end; fromAccount.withdraw(amount); toAccount.deposit(amount);
With Security With Security 13
With Logging . . . . With Threading With Transactions With ??? 14
With Cirrus AOP 15
Cirrus Fundamentals Add reference to RemObjects.Oxygene.Cirrus. Not necessary to deploy. Aspects must be in a separate assembly. Also not necessary to deploy. Aspects woven in at compile time. Cirrus exists as a series of Interfaces (callbacks). Aspects are applied via Attributes with the aspect: prefix.
Demo Time
More on Cirrus Cirrus Overview prismwiki.codegear.com/en/Cirrus_Overview Common Aspect Library http://code.remobjects.com/p/prismaspects/ RemObjects Blog Blogs.RemObjects.com/blogs/ My Blogs Delphi.org DavinciUnltd.com 18
Other AOP Frameworks Other .NET options C++ Java For Delphi Win32 MeAOP in MeSDK code.google.com/p/meaop/ Other .NET options PostSharp.org SpringFramework.net C++ AspectC.org Java eclipse.org/AspectJ 19
? The Future of AOP
Contact Me Jim McKeeth jim@mckeeth.org Twitter.com/JimMcKeeth FriendFeed.com/JimMcKeeth Delphi.org DavinciUnltd.com/Code/Cirrus/ Get the slides