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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend