Generatív programozás

Slides:



Advertisements
Hasonló előadás
© Kozsik Tamás Különböző nyelvekhez igazítás Internationalization - i18n.
Advertisements

Osztály leszármaztatás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
AZ OOP ALAPJAI.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
SPRING FRAMEWORK bemutatása
Porkoláb Zoltán, Kozsik Tamás, Zsók Viktória,
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás
Csomagok.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Programozási nyelvek – Programozási paradigmák
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Új programozási paradigmák a láthatáron (aspektus-orientált és intencionális programozás) Csontos Péter AITIA Informatikai Rt. 2002/10/17.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Metódusok
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Egyenesvonalú (lineáris) adatszerkezetek
C++11. TÖRTÉNETI ÁTTEKINTŐ Bjarne Stroustrup, AT&T 1979 C with classes 1983 ipari alkalmazás 1998 első szabvány 2003 apróbb módosítások 2005 tr
A Visual Basic nyelvi elemei
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Haladó C++ Programozás Az STL sablonkönyvtár felhasználói szemszögből
Haladó C++ Programozás SzJ/IV
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

Generatív programozás Porkoláb Zoltán ELTE Általános Számítástudományi Tanszék gsd@inf.elte.hu

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 Find Vector Iterator Merge Iterator List Iterator

GP - OO együttműködés C++ Standard Library (!= STL) Interfész-méret csökkentése Template specializáció 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 - Monitoring Cél: Megoldás: 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 - Aspect aspect Trace { advise * Variable.*(..) { static before { System.out.println("Entering " + thisJoinPoint.methodName + " v=" + thisObject.v); } static after { System.out.println("Exiting " +

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

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 Célorientált, specializált nyelv, valamely feladat megoldására Külső: TeX, SQL Beágyazott: C++ template Összeépíthető komponens: Intentional prog.

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

Szabadon definiálható hibaüzenetek Concept checking template <class T> void sort() { SortHelper< StaticIsA<T,LessThanComparable<T> >::valid>::doIt(); // ... }; Szabadon definiálható hibaüzenetek

Mixin Bázisoszály: fordítási paraméter OO + GP együttműködése template <class Super> class Mixin : public Super { // ... }; Bázisoszály: fordítási paraméter OO + 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);

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

Template metaprogramming 2 szintű nyelvtan Statikus - template Turing-teljes nyelvet képez Dinamikus Lefordítja Futtatja www.oonumerics.org Blitz++

Összegzé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