Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Generatív programozás Porkoláb Zoltán ELTE Általános Számítástudományi Tanszék"— Előadás másolata:

1 Generatív programozás Porkoláb Zoltán ELTE Általános Számítástudományi Tanszék

2 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)

3 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

4 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)

5 Standard Template Library Vector List Find Merge Iterator

6 C++ Standard Library (!= STL) Interfész-méret csökkentése Template specializáció GP - OO együttműködés template class basic_string { … }; typedef basic_string string;

7 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

8 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; } }

9 AOP - Monitoring Cé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

10 AOP - Aspect aspect 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); }

11 AOP - A szövőgép public 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); }

12 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

13 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

14 A template technika korlátai template class Container { //... void insert( T x) {... } void sort() { if (x < y )... } //... }; Csak a hivatkozott template-ek példányosulnak!

15 Concept checking template void sort() { SortHelper >::valid>::doIt(); //... }; Szabadon definiálható hibaüzenetek

16 Mixin template class Mixin : public Super { //... }; Bázisoszály: fordítási paraméter OO + GP együttműködése

17 template class Mixin : public Super //... }; class Base_virt { virtual void f(); }; class Base_novirt { void f(); }; Mixin x; Mixin y;

18 template 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); };

19 template struct Fib { enum {RET=Fib ::RET + Fib ::RET}; }; template <> struct Fib { enum {RET=0}; }; template <> struct Fib { enum {RET=1}; }; Expression template

20 Template metaprogramming 2 szintű nyelvtan Statikus - template –Turing-teljes nyelvet képez Dinamikus –Lefordítja –Futtatja Blitz++

21 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


Letölteni ppt "Generatív programozás Porkoláb Zoltán ELTE Általános Számítástudományi Tanszék"

Hasonló előadás


Google Hirdetések