metamodeling and metaprogramming
play

Metamodeling and Metaprogramming 1. Introduction to metalevels 2. - PowerPoint PPT Presentation

TDDD05 Component-Based Software Metamodeling and Metaprogramming 1. Introduction to metalevels 2. Different Ways of Metaprogramming 3. UML Metamodel and MOF 4. Component markup U. Assmann: Invasive Software Composition , Sect. 2.2.5


  1. TDDD05 Component-Based Software Metamodeling and Metaprogramming 1. Introduction to metalevels 2. Different Ways of Metaprogramming 3. UML Metamodel and MOF 4. Component markup U. Assmann: Invasive Software Composition , Sect. 2.2.5 Metamodeling; C. Szyperski: Component Software , Sect. 10.7, 14.4.1 Java Reflection Ola Leifler, IDA, Linköpings Slides courtesy of C. Kessler, IDA & U. Assmann, IDA / TU Dresden universitet.

  2. Metadata Meta : means “describing”   Metadata : describing data (sometimes: self-describing data). The language (esp., type system) for specifying metadata  is called metamodel . Metalevel : the elements of the meta-level (the meta-objects) describe the objects on the base level   Metamodeling : description of the model elements/concepts in the metamodel Meta level Metadata Concepts level Base Data, level Code, Information 2 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  3. Metalevels in Programming Languages Programming Language Concept Level 3 - Meta-Concepts in the metameta model, the metalanguage (language description) Level 2 - Language concepts (Metaclasses in the metamodel) Method Attribute Class Level 1 - Software Classes void int (meta-objects) drive() {} color Car (Model) car1.color Level 0 - Software Objects car 1 car1.drive() car driving car color “Real World” Entities 3 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  4. Metalevels in Programming Languages Programming Language Concept Level 3 - Meta-Concepts in the metameta model, the metalanguage (language description) Level 2 - Language concepts (Metaclasses in the metamodel) Method Attribute Class Level 1 - Software Classes void int (meta-objects) drive() {} color Car (Model) car1.color Level 0 - Software Objects car 1 car1.drive() car driving car color “Real World” Entities 4 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  5. Classes and Metaclasses Classes in a software system class WorkPiece { Object belongsTo ; } class RotaryTable { WorkPiece place1, place2 ; } class Robot { WorkPiece piece1, piece2 ; } class ConveyorBelt { WorkPiece pieces []; } Metaclasses public class Class { Concepts of a metalevel can be Attribute[] fields ; represented at the base level. Method[] methods ; This is called reification . Class ( Attribute[] f , Method[] m ) { fields = f ; methods = m ; Examples: } • Java Reflection API [Szyperski 14.4.1] } • UML metamodel (MOF) public class Attribute {..} public class Method {..} 5 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  6. Reflection (Self-Modification, Metaprogramming)  Reflection is computation about the metamodel in the base model .  The application can look at its own skeleton (metadata) and may even change it Allocating new classes, methods, fields  Removing classes, methods, fields   Enabled by reification of meta-objects at base level (e.g., as API) Meta level Metadata Remark : In the literature, “ reflection ” was originally introduced to denote “computation about the own program” Data, [Maes'87] but has also been used in Data, Base level Code, the sense of “computing about other Code, programs” (e.g., components). Information Information 6 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  7. Example: Creating a Class from a Metaclass public class Class { Attribute[] fields ; class WorkPiece { Object belongsTo ; } Method[] methods ; class RotaryTable { WorkPiece place1, place2 ; } Class ( Attribute[] f , Method[] m ) { class Robot { WorkPiece piece1, piece2 ; } fields = f ; class ConveyorBelt { WorkPiece pieces []; } methods = m ; } } public class Attribute {..}  Create a new class at runtime public class Method {..} by instantiating the metaclass: Class WorkPiece = new Class( new Attribute[]{ "Object belongsTo" }, new Method[]{}); Class RotaryTable = new Class( new Attribute[]{ "WorkPiece place1", "WorkPiece place2" }, new Method[]{}); Class Robot = new Class( new Attribute[]{ "WorkPiece piece1", "WorkPiece piece2" }, new Method[]{}); Class ConveyorBelt = new Class( new Attribute[]{ "WorkPiece[] pieces" }, new Method[]{}); Metaprogram at base level 7 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  8. Introspection Read-only reflection is called introspection  The component can look up the metadata of itself or another component and learn from it (but not change it!)   Typical application: find out features of components Classes, methods, attributes, types  Very important for late (run-time) binding  Metadata Data, Data, Code, Code, Information Information 8 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  9. Introcession  Read and Write reflection is called introcession The component can look up the metadata of itself or another component and may change it  Typical application: dynamic adaptation of parts of own program  Classes, methods, attributes, types  Metadata Data, Code, Information 9 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  10. Reflection Example Full Reflection Reading Reflection (Introcession): (Introspection): for all c in self .classes do for all c in self .classes do generate_class_start(c); helpClass = makeClass( c.name + "help“ ); for all a in c.attributes do for all a in c.attributes do generate_attribute(a); helpClass.addAttribute(copyAttribute(a)); done ; done ; generate_class_end(c); self .addClass(helpClass); done ; done ; A reflective system is a system that uses this information about itself A reflective system is a system that uses this information about itself in its normal course of execution. in its normal course of execution. 10 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  11. Metaprogramming on the Language Level Metalanguage concepts enum { Singleton, Parameterizable } BaseFeature; Language description concepts public class LanguageConcept { (Metametamodel) String name ; BaseFeature singularity ; LanguageConcept ( String n , BaseFeature s ) { name = n ; Good for language singularity = s ; extension / customization, } e.g. with UML MOF, or for } compiler generation Language concepts (Metamodel) LanguageConcept Class = new LanguageConcept("Class", Singleton); LanguageConcept Attribute = new LanguageConcept("Attribute", Singleton); LanguageConcept Method = new LanguageConcept("Method", Parameterizable); 11 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  12. Make It Simple Level 0: objects   Level 1: classes, types  Level 2: language elements  Level 3: metalanguage, language description language 12 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  13. Use of Metamodels and Metaprogramming To model, describe, introspect, and manipulate  Programming languages, such as Java Reflection API  Modeling languages, such as UML or Modelica  XML  Compilers Debuggers   Component systems, such as JavaBeans or CORBA DII Composition systems, such as Invasive Software Composition   Databases ... many other systems ...  13 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  14. TDDD05 Component-Based Software 2. Different Ways of Metaprogramming - meta-level vs. base level - static vs. dynamic Metaprograms reason about programs Metaprograms reason about programs Metaprogram Program Program’ run-time output run-time input Ola Leifler, IDA, Linköpings universitet.

  15. Metaprograms can run at the meta level or at the base level Metaprogram execution at the metalevel:  Metaprogram is separate from base-level program Direct control of the metadata as metaprogram data structures   Expression operators are defined directly on the metaobjects  Example: Compiler, program analyzer, program transformer Program metadata = the internal program representation   has classes to create objects describing base program clas- ses, functions, statements, variables, constants, types etc. Metaprogram execution at the base level: Metaprogram/-code embedded into the base-level program   All expressions etc. evaluated at base level Access to metadata only via special API, e.g. Java Reflection  15 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  16. Meta-level Metaprogram Metalevel Metaobjects Meta- program for each class c for each class c add a new method int bar() {...} add a new method int bar() {...} Base Level 16 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

  17. Base-Level Metaprogram Metalevel Metaobjects Repository with Concepts/ Types/Descriptions as Artefacts Reflection Base-level program data memory: Meta- Repository with Objects program as Artefacts Base Level Class someclass = foo.getClass(); Class someclass = foo.getClass(); 17 O. Leifler, IDA, Linköpings universitet. TDDD05 Component-Based Software

Recommend


More recommend