
Outline Meta-Classes Guy Wiener Introduction AOP Classes Generation 1 Introduction Meta-Classes in Python Logging 2 Meta-Classes in Python Delegation Meta-Classes vs. Traditional OOP 3 Meta-Classes vs. Traditional OOP Outline Meta-Classes Guy Wiener Introduction AOP Classes Generation 1 Introduction Meta-Classes in Python Logging 2 Meta-Classes in Python Delegation Meta-Classes vs. Traditional OOP 3 Meta-Classes vs. Traditional OOP What is Meta-Programming? Meta-Classes Definition Guy Wiener Meta-Program A program that: Introduction AOP Classes One of its inputs is a program Generation (possibly itself) Meta-Classes in Python Its output is a program Logging Delegation Meta-Classes vs. Traditional OOP Meta-Programs Nowadays Meta-Classes Guy Wiener Introduction AOP Classes Generation Compilers Meta-Classes in Python Code Generators Logging Delegation Model-Driven Development Meta-Classes vs. Traditional Templates OOP Syntactic macros (Lisp-like) Meta-Classes The Problem With Static Programming Meta-Classes Guy Wiener Introduction AOP Classes Generation Meta-Classes How to share features between classes and class hierarchies? in Python Logging Share static attributes Delegation Meta-Classes Force classes to adhere to the same protocol vs. Traditional OOP Share code between similar methods Meta-Classes Meta-Classes Guy Wiener Introduction AOP Classes Definition Generation Meta-Classes in Python Meta-Class A class that creates classes Logging Delegation Objects that are instances of the same class Meta-Classes share the same behavior vs. Traditional OOP Classes that are instances of the same meta-class share the same behavior Meta-Classes Meta-Classes Guy Wiener Introduction AOP Classes Definition Generation Meta-Classes in Python Meta-Class A class that creates classes Logging Delegation Objects that are instances of the same class Meta-Classes share the same behavior vs. Traditional OOP Classes that are instances of the same meta-class share the same behavior Classes create objects ⇒ Meta-classes create classes Aspect-Oriented Programming (AOP) Meta-Classes Guy Wiener A meta-programming methodology based on OOP Introduction Goal: Make all methods that match a pattern adhere to AOP Classes the same behavior (called “ advice ”) Generation Meta-Classes in Python Logging Examples Delegation Meta-Classes vs. Traditional Print logging OOP Perform a security check Ask for permission . Aspect-Oriented Programming (AOP) Meta-Classes Guy Wiener A meta-programming methodology based on OOP Introduction Goal: Make all methods that match a pattern adhere to AOP Classes the same behavior (called “ advice ”) Generation Meta-Classes in Python Logging Examples Delegation Meta-Classes vs. Traditional Print logging OOP Perform a security check Ask for permission . Function decorators are not enough We want to enforce a policy. AOP Example Meta-Classes Guy Wiener Advice Code Introduction AOP if (!connected) class Client { Classes Generation connect(); void send(server) { Meta-Classes in Python // send message Logging Delegation } Meta-Classes void receive(server) { vs. Traditional OOP // receive message } } AOP Example Meta-Classes Guy Wiener Advice Code Introduction AOP if (!connected) class Client { Classes Generation connect(); void send(server) { Meta-Classes in Python if (!connected) Logging Delegation connect(); Meta-Classes // send message vs. Traditional OOP } void receive(server) { if (!connected) connect(); // receive message } } AOP Programs Meta-Classes Guy Wiener Introduction AOP Components of an AOP meta-program Classes Generation Meta-Classes in Python Advices Shared code Logging Delegation Patterns Which advice applies to which points in the code Meta-Classes (entry or exit of a method) vs. Traditional OOP AOP Programs Meta-Classes Guy Wiener Introduction AOP Components of an AOP meta-program Classes Generation Meta-Classes in Python Advices Shared code Logging Delegation Patterns Which advice applies to which points in the code Meta-Classes (entry or exit of a method) vs. Traditional OOP Input A program and specifications Output A new program Applying an AOP program on a Program Meta-Classes A generic meta-class for AOP Guy Wiener Introduction Input: class C, advice a, pattern p AOP Output: class C, modified Classes Generation for method m ∈ methods( C) do Meta-Classes in Python if m matches p then Logging Delegation m’ = apply a on m Meta-Classes replace m with m’ in C vs. Traditional OOP end if end for Applying an AOP program on a Program Meta-Classes A generic meta-class for AOP Guy Wiener Introduction Input: class C, advice a, pattern p AOP Output: class C, modified Classes Generation for method m ∈ methods( C) do Meta-Classes in Python if m matches p then Logging Delegation m’ = apply a on m Meta-Classes replace m with m’ in C vs. Traditional OOP end if end for Requires: Reflection Modification AOP Example Meta-Classes Guy Wiener Introduction AOP An aspect for connecting to a server Classes Generation for method m ∈ Client do Meta-Classes in Python if m has an argument server then Logging Delegation insert Meta-Classes if (!connected) vs. Traditional “ OOP connect();” before m end if end for The RMI Problem Meta-Classes Remove Method Invocation (RMI) Guy Wiener Introduction A server object is located on one computer AOP Classes Clients invokes methods of the server object from other Generation Meta-Classes computers in Python Logging Delegation Meta-Classes vs. Traditional start() OOP stop() Server Object pause(5) Figure: Remote Method Invocation RMI Class Diagram Meta-Classes Guy Wiener ServerInf Introduction AOP start()* Classes Generation stop()* pause(int)* Meta-Classes in Python Server Logging Delegation start() Meta-Classes stop() vs. Traditional pause(int) OOP Server+ Figure: The original Server start()+ class stop()+ pause(int)+ Figure: Server class and interface RMI Class Diagram (cont’d) Meta-Classes Guy Wiener ServerInf Introduction AOP start()* Classes Generation stop()* pause(int)* Meta-Classes in Python Logging Delegation Meta-Classes vs. Traditional Stub+ Skeleton+ ServerImpl+ OOP over start()+ start()+ start()+ stop()+ network stop()+ stop()+ pause(int)+ pause(int)+ pause(int)+ Figure: Server with stub and skeleton RMI Classes Generation Meta-Classes Guy Wiener ServerInf Introduction start()* AOP stop()* Classes pause(int)* Generation Meta-Classes Generated Classes: in Python Logging Delegation Input: Meta-Classes Code Generator vs. Traditional Server interface OOP Output: Skeleton Stub Stub+ Skeleton+ start()+ start()+ stop()+ stop()+ pause(int)+ pause(int)+ Figure: Classes generation for RMI Object-Oriented Code Generation Meta-Classes Guy Wiener Input Class definitions Introduction AOP Classes Interfaces, IDL Generation UML Meta-Classes in Python Other specifications Logging Delegation Output Generated classes Meta-Classes vs. Traditional Stubs and skeletons OOP Persistent objects Database tables . Object-Oriented Code Generation Meta-Classes Guy Wiener Input Class definitions Introduction AOP Classes Interfaces, IDL Generation UML Meta-Classes in Python Other specifications Logging Delegation Output Generated classes Meta-Classes vs. Traditional Stubs and skeletons OOP Persistent objects Database tables . The structure of the program becomes the source for automatically generated code Outline Meta-Classes Guy Wiener Introduction AOP Classes Generation 1 Introduction Meta-Classes in Python Logging 2 Meta-Classes in Python Delegation Meta-Classes vs. Traditional OOP 3 Meta-Classes vs. Traditional OOP Motivation Meta-Classes Guy Wiener Problem Introduction AOP Classes Generation Python’s flexibility makes the code impossible to Meta-Classes understand in Python Logging A more organized mechanism is required Delegation Meta-Classes vs. Traditional OOP Motivation Meta-Classes Guy Wiener Problem Introduction AOP Classes Generation Python’s flexibility makes the code impossible to Meta-Classes understand in Python Logging A more organized mechanism is required Delegation Meta-Classes vs. Traditional OOP The OOP Solution Class in Python are objects Objects are instances of classes Motivation Meta-Classes Guy Wiener Problem Introduction AOP Classes Generation Python’s flexibility makes the code impossible to Meta-Classes understand in Python Logging A more organized mechanism is required Delegation Meta-Classes vs. Traditional OOP The OOP Solution Class in Python are objects Objects are instances of classes Classes are instances of Meta-Classes Meta-Classes in Python Meta-Classes Guy Wiener Introduction AOP Classes Generation Meta-Classes Meta-Classes in Python Logging Extend the type “ type” Delegation Meta-Classes Responsible for creating new classes vs. Traditional OOP The dynamic members of the meta-class become static members of the instance class Creating Classes from Meta-Classes Meta-Classes Example Guy Wiener Introduction AOP # Meta-Class Classes Generation class Printable(type): Meta-Classes def whoami(self): print "I am ", self.__name__ in Python Logging Delegation Meta-Classes >>> Foo = Printable(’Foo’,(),{}) # Empty new class vs. Traditional OOP >>> Foo.whoami() I am Foo >>> Foo.__class__ <class ’Printable’> >>> f = Foo() # Object >>> f.__class__ <class ’Foo’> The metaclass field Meta-Classes Guy Wiener Introduction AOP Classes Generation Class C is an instance of a meta-class M if: Meta-Classes in Python 1 Logging C has a static field metaclass Delegation 2 One of the ancestors classes of C is an instance of M Meta-Classes vs. Traditional OOP 3 There is a global variable metaclass 4 Otherwise, the default meta-class
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages46 Page
-
File Size-