Lecture Slides

Lecture Slides

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

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    46 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us