Presentation on theme: "Introduction to Aspect Oriented Programming with Cirrus and Delphi Prism Jim McKeeth | Podcast at Delphi.org."— Presentation transcript:
Introduction to Aspect Oriented Programming with Cirrus and Delphi Prism Jim McKeeth | Podcast at Delphi.org
2 Agenda What is AOP? Why AOP? Two AOP Paradigms The Cirrus Framework Examples Debugging Other AOP Frameworks Future 2
3 ? What is Aspect-Oriented Programming?
4 A Paradigm Shift Aspect-Oriented programming is to Object-Oriented programming Object-Oriented programming is to Procedural programming as Why do we need a new paradigm? I can do this already! Wont it be slower / harder to debug?
5 A Definition 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
6 Think of it as Super-Encapsulation
7 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!
8 What Makes a Concern Cross-Cut?? Business logic E r r o r h a n d l i n g T h r e a d l o c k i n g U s e r I n t e r f a c e
9 The Principles of OOD S RP The Single Responsibility Principle - A class should have one, and only one, reason to change. O CP The Open Closed Principle You should be able to extend a classes behavior, without modifying it. L SP The Liskov Substitution Principle Derived classes must be substitutable for their base classes. I SP The Interface Segregation Principle Make fine grained interfaces that are client specific. D IP The Dependency Inversion Principle Depend on abstractions, not on concretions. butUncleBob.com/ArticleS.UncleBob.PrinciplesOfOod Robert C. Martin Uncle Bob butUncleBob.com
10 Two AOP Paradigms Pre-Compile / At-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.
12 Bank Transfer method TBank.Transfer(fromAccount, toAccount: TAccount; amount: Integer); begin if fromAccount.Balance < amount then begin raise new EInsufficientFundsException(); end; fromAccount.withdraw(amount); toAccount.deposit(amount); end;
13 With Security 13 With Security
14 With Logging With Transactions With Threading With ???
15 With Cirrus AOP 15
16 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.
18 More on Cirrus Cirrus Overview prismwiki.codegear.com/en/Cirrus_Overview Common Aspect Library RemObjects Blog Blogs.RemObjects.com/blogs/ My Blogs Delphi.org DavinciUnltd.com 18
19 Other AOP Frameworks 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
20? The Future of AOP
21 Contact Me Jim McKeeth Twitter.com/JimMcKeeth FriendFeed.com/JimMcKeeth Delphi.org DavinciUnltd.com/Code/Cirrus/ Get the slides