generatív programozás
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 PresentationTRANSCRIPT
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)
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
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)
Standard Template Library
Vector
List
Find
Merge
Iterator
Iterator
Iterator
• 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;
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
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; }
}
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
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); } }}
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); }}
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
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
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!
Concept checkingtemplate <class T> void sort(){ SortHelper< StaticIsA<T,LessThanComparable<T> >::valid>::doIt(); // ...};
Szabadon definiálható hibaüzenetek
Mixintemplate <class Super> class Mixin : public Super{
// ...};
Bázisoszály: fordítási paraméterOO + GP együttműködése
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;
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); };};
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
Template metaprogramming
• 2 szintű nyelvtan• Statikus - template
– Turing-teljes nyelvet képez• Dinamikus
– Lefordítja – Futtatja
www.oonumerics.orgBlitz++
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