generatív programozás

21
Generatív programozás Porkoláb Zoltán ELTE Általános Számítástudományi Tanszék [email protected]

Upload: rich

Post on 19-Mar-2016

52 views

Category:

Documents


2 download

DESCRIPTION

Generatív programozás. Porkoláb Zoltán ELTE Általános Számítástudományi Tanszék [email protected]. ECOOP 2001. Generative Programming (Czarnecky, Eisenecker) Aspect-Oriented Programming (Gregor Kitzales) Feature Interaction in Composed Systems (Jim Coplien) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Generatív programozás

Generatív programozás

Porkoláb ZoltánELTE Általános Számítástudományi

Tanszé[email protected]

Page 2: Generatív programozás

ECOOP 2001• Generative Programming (Czarnecky, Eisenecker)• Aspect-Oriented Programming (Gregor Kitzales)• Feature Interaction in Composed Systems (Jim Coplien)• Advance Separation of Concerns (...)• Multiparadigm Programming in OO Languages (Smaragdakis)

Page 3: Generatív programozás

Generic Programming

• Fordítás idejű típusellenőrzés• Automatikus példányosítás• Hatékony ( vs. Reflection )• Egyszerű (?)• negatív variancia: template specializáció• (Paraméteres) Polymorfizmus

Page 4: Generatív programozás

GP - Standard Template Library

• A. Stepanov, D. Musser• ADA, C++, JAVA (Pizza, GJ, Collection)• C++ Standard Template Library

– tárolók (containers)– algoritmusok– bejárók (iterators)

• Az ISO C++ standard része (1997)

Page 5: Generatív programozás

Standard Template Library

Vector

List

Find

Merge

Iterator

Iterator

Iterator

Page 6: Generatív programozás

• C++ Standard Library (!= STL)

• Interfész-méret csökkentése• Template specializáció

GP - OO együttműködés

template <class CharType, class Attr=char_traits<CharType>, class Allocator=allocator<T>>class basic_string { … };

typedef basic_string<char> string;

Page 7: Generatív programozás

Aspect-Oriented Programming

• Probléma - gyenge modularitás: – erőforrásmegosztás– hibakezelés– hatékonyság, optimalizáció

• Megoldás - a határok átlépése:– az elszórt szempontok összegyűjtése (aspect)– szövőgép (weaver) a végső kód elkészítéséhez

Page 8: Generatív programozás

AOP - OO Példa

Rendszerállapot vizsgálata A rendszer:

public class Variable { private int v; public Variable() { v = 0; } public int getV() { return v; } public void setV(int v) { this.v = v; }

}

Page 9: Generatív programozás

AOP - MonitoringCél:

Minden változást írjunk ki– ne módosítsuk (kézzel) az eredeti kódot– kerüljük a futási idejű költségeket

Megoldás:– producer-observer pattern

introspection - metódhívások eltérítése

Page 10: Generatív programozás

AOP - Aspectaspect Trace {

advise * Variable.*(..) { static before { System.out.println("Entering " + thisJoinPoint.methodName + " v=" + thisObject.v); } static after { System.out.println("Exiting " + thisJoinPoint.methodName + " v=" + thisObject.v); } }}

Page 11: Generatív programozás

AOP - A szövőgéppublic class Variable { private int v; public Variable() { v = 0; } public int getV() { int thisResult;System.out.println("Entering "+"getV"+" v="+this.v); thisResult = v; System.out.println("Exiting "+"getV"+" v="+this.v); return thisResult; } public void setV(int v) {System.out.println("Entering "+"setV"+" v="+this.v); this.v = v; System.out.println("Exiting "+"setV"+" v="+this.v); }}

Page 12: Generatív programozás

AOP - OO együttműködés

• Kódismétlés csökkentése• Természetes OO tervezés alkalmazható

valós, nagy rendszerekre• Aspect -eket tetszőleges nyelven írhatunk• korlát: a szövőgép

Page 13: Generatív programozás

Domain-specifikus nyelvek

• Külső: TeX, SQL• Beágyazott: C++ template• Összeépíthető komponens: Intentional prog.

Célorientált, specializált nyelv, valamely feladat megoldására

Page 14: Generatív programozás

A template technika korlátaitemplate <class T> class Container{ // ... void insert( T x) { ... } void sort() { if (x < y )... } // ...};

Csak a hivatkozott template-ek példányosulnak!

Page 15: Generatív programozás

Concept checkingtemplate <class T> void sort(){ SortHelper< StaticIsA<T,LessThanComparable<T> >::valid>::doIt(); // ...};

Szabadon definiálható hibaüzenetek

Page 16: Generatív programozás

Mixintemplate <class Super> class Mixin : public Super{

// ...};

Bázisoszály: fordítási paraméterOO + GP együttműködése

Page 17: Generatív programozás

template <class Super> class Mixin : public Super

// ...};class Base_virt { virtual void f();};class Base_novirt { void f();};

Mixin<Base_virt> x;Mixin<Base_novirt> y;

Page 18: Generatív programozás

template <class Graph> class Counting : public Graph{ int nodes_visited, edges_visited;public: Counting():nodes_visited(0),Graph(){} node succ_node(node v) { ++nodes_visited(node v); return Graph::succ_node(v); }; edge succ_edge(edge e) { ++edges_visited(edge e); return Graph::succ_edge(e); };};

Page 19: Generatív programozás

template <int i> struct Fib{ enum {RET=Fib<n-1>::RET + Fib<n-2>::RET};};template <>struct Fib<0>{ enum {RET=0};};template <>struct Fib<1>{ enum {RET=1};};

Expression template

Page 20: Generatív programozás

Template metaprogramming

• 2 szintű nyelvtan• Statikus - template

– Turing-teljes nyelvet képez• Dinamikus

– Lefordítja – Futtatja

www.oonumerics.orgBlitz++

Page 21: Generatív programozás

Régi és új paradigmák együttélése multi-paradigm programming

Előnyök:– OO: kiforrott elvek, általános használhatóság,

nagy-léptékű rendszerek, jó modularitás– GP: testreszabott, domain-specifikus, magasan

automatizált kódgyártás

Összegzés