Metaprogramok alkalmazása erősen típusos objektum-orientált rendszerek kiterjesztésére Zólyomi István Témavezető: Dr. Porkoláb Zoltán.

Slides:



Advertisements
Hasonló előadás
Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék 5.5. Model Based Architecture módszerek BelAmI_H Spring.
Advertisements

Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
Generatív programozás
© 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.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Fejlett Programozási Technológiák II. Világos Zsolt 1. gyakorlat.
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
WSDL alapismeretek A WSDL (Web Services Description Language – Web szolgáltatások leíró nyelv) egy XML-alapú nyelv a Web szolgáltatások leírására és azok.
C# tagfüggvények.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
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.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Önleíró adatok: XML INFO ÉRA, Békéscsaba
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Programozási nyelvek – Programozási paradigmák
Az UML kiterjesztési lehetőségei
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
Bevezetés a C++ programozási nyelvbe
ESzabványok Workshop 1. előadás: Bevezető, eAdatmodell október 13.
Objektumorientált tervezés és programozás II. 3. előadás
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
ARCHITECTArchitect AcademyFoundationsInsidersMCPtréningekvizsgákgyakorlatprojektek Novák István eEvangelist – „Dive deeper” Grepton Zrt. Technológiai vezető.
LOGO Webszolgáltatások Készítette: Kovács Zoltán IV. PTM.
PHP oktatási tapasztalatok
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.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
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ú,
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Bevezetés Amiről ma szó lesz… Miért D? Mert a fejlesztők úgy látták, hogy a C++-on van még mit javítani. Mert a programozók a nyelvnek általában elszigetelt.
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
Java web programozás 11..
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
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
Objektumvezérelt rendszerek tervezése
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
Haladó C++ Programozás Az STL sablonkönyvtár felhasználói szemszögből
A PKI project célja Digitális kulccsal elérhető szerver Hamisíthatatlan naplózás Új kulcsok dinamikus létrehozása Felhasználók letiltása.
Haladó C++ Programozás SzJ/IV
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Opencms modul fejlesztés Krizsán Zoltán. Modulok fajtái Nincs előírás, csak tipikus tennivalók: –Content type: új típus(oka)t vezet be. –Template: új.
Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
JSF – komponens alapú webfejlesztés. Mi az a JSF mire jó ● Egy szerver oldali, komponens alapú felhasználói felület keretrendszer ● Támogatja a webes.
UML használata a fejlesztésben, illetve a Visual Studio 2010-ben
C# áttekintés.
A C++ programozási nyelv
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

Metaprogramok alkalmazása erősen típusos objektum-orientált rendszerek kiterjesztésére Zólyomi István Témavezető: Dr. Porkoláb Zoltán

Tartalom Bevezetés Típusvizsgáló rendszer Strukturális altípusosság C++ nyelven Új elvű sorosítási módszer Összefoglalás

Metaprogramok vagyProgramok, melyek más programokat elemeznek vagy generálnak Metaadatok –Korlátozott: pl. típusinformációk –Ideális: teljes szintaxisfa Programtranszformáció –Korlátozott: pl. kódgenerálás –Ideális: teljes átalakítás lehetősége

C++ sablon-metaprogramozás Sablonok: generikus programozás támogatása (típus- és adatparaméterek, specializációk) “Véletlenül” Turing-teljes –Elágazás, rekurzió kifejezhető Fordítás közben végrehajtott funkcionális nyelv Előnye: szabványos, elterjedt Hátránya: közvetett metaprogramozási eszköz (bonyolultság, karbantarthatóság, stb)

1. Típusvizsgálatok Generikus programozás: típusparaméter –Típusbiztonság miatt megszorításokkal Típusparaméterek kikötései általában: –Többnyire explicit leszármazás alapján –Ha nem teljesül, fordítás megszakítása C++ nyelven nincs nyelvi támogatás –Sokáig nem is lesz, lásd concept és a C++0x

Példa C++ konténerek másolása template OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result ); Java listamásolás class Collections { static void copy( List dest, List src );... }

Típusvizsgálatok Problémák: –Sokszor implicit típusmegfelelésre lenne szükség –Kizárólag ÉS kapcsolat a kikötések között –Rugalmatlan eredmény, csak hibajelzést ad Predikátumokkal leírt elemi vizsgálatok –Konjunkciót, diszjunkciót, negációt tartalmazó formulák –Eredmény alapján tetszőleges metaprogramozási akció végrehajtható

C++ nyelvű típusvizsgálatok // vizsgálatok általános alakja, fordítási idejű eredménnyel const bool result = EVALUATE( vizsgálat ); // saját megvalósítású vizsgálatok TYPE_IN_CLASS(iterator, ItemType) // beágyazott típus létezése MEMBER_IN_CLASS(size, ItemType) // tag létezése (adat v. fgv) Member ::NonStatic(&T::size) // adattag típusvizsgálata Member ::Static(&T::size) // statikus adattag typedef size_type FuncType() const; Member ::NonStatic(&T::size) // tagfüggvény típusa Member ::Static(&T::size) // statikus függvény const bool comparable = globalOperator || memberOperator;

1. Tézis Definiáltam egy új, nagyobb kifejezőerejű, ortogonális, nem intruzív, nyelvfüggetlen típusvizsgáló (introspection) rendszert. C++ sablon-metaprogramok segítségével elkészítettem a rendszer egy konkrét megvalósítását, mely C++ nyelvű programkód típusvizsgálatára szolgál. A könyvtár a C++ szabvány szerinti nyelvi eszközökre épül, ezért fordítófüggetlen és hordozható. István Zólyomi, Zoltán Porkoláb. “Towards a General Template Introspection Library”. GPCE 2004, LNCS Vol. 3286, pp István Zólyomi, Zoltán Porkoláb. “Improving concept checking in Boost”. Boost Workshop, OOPSLA 2004, Vancouver.

2. A lépésenkénti finomítás problémája Erősen típusos objektum-orientált nyelvek –Legelterjedtebb programozási környezetek –Öröklődés általában explicit –Jellemzően kettős funkciója van: Kód újrafelhasználása (lépésenkénti finomítás) Altípus kapcsolatok definíciója –Általános ősosztályok vagy interfészek –Leszármazottak “finomítva” az igények szerint

Példa a problémára Shape Circle Colore d Displayabl e ColoredShap e MyCircle A jelölt altípus kapcsolat nem áll fenn Ősosztályok, interfészek explicit megadása A megoldás érdekében létrehozandó osztályok számának kombinatorikus robbanása

Szabványos C++ adatfolyamok istream ifstream ostrea m iostream fstream ofstream Virtuális öröklődés részben megoldja (intruzív)

Megoldás elve Cél: strukturális altípusosság szimulálása –Kódújrafelhasználás és altípus szétválasztása –Altípusosság implicit megfelelési szabállyal Típuslisták típushalmazok megadására typedef TYPELIST_2(istream, ostream) streamTypes; –Feldolgozás: listabejáró metaprogramok Kódgeneráló sablon-metaprogram –Megfelelő adatszerkezet összeállítása –Konstruktor, konverziós operátor megadása

Megvalósítás class MyCircle: Shape, Colored, Displayable { … }; MyCircle myCircle( … ); CPTRSET_2(Colored, Shape) coloredShape(myCircle); static_cast (coloredShape).getArea(); CPTRSET_2(Colored, Shape) Colored *head; CPTRSET_1(Shape) Shape *head; ShapeColoredDisplayable MyCircle mutat

2. Tézis Megmutattam a jelenlegi objektum-orientált nyelvek típusrendszerének korlátait osztályok lépésenkénti finomításának esetében. Szabványos sablon-metaprogramok segítségével strukturális altípusosságon alapuló, kiegészítő konverziós szabályokat vezettem be a C++ nyelv típusrendszerébe. A módszerrel elkerülhető a létrehozandó interfészek számának kombinatorikus robbanása. István Zólyomi, Zoltán Porkoláb, Tamás Kozsik. “An Extension to the Subtype Relationship in C++ Implemented with Template Metaprogramming”. GPCE 2003, LNCS Vol. 2830, pp István Zólyomi, Zoltán Porkoláb. “A Feature Composition Problem and a Solution Based on C++ Template Metaprogramming”. GTTSE 2006, LNCS Vol. 4143, pp

3. Sorosítás Program adatainak tárolható formátumra alakítása és mentése, majd visszaolvasása Két alapvető megközelítés: –Adott programozási nyelv adatainak formátumfüggetlen tárolása –Adott formátum feldolgozása tetszőleges programnyelven Utóbbit választjuk, de formátumfüggetlenül: –Tetszőleges, sémával leírt adatok feldolgozása

Sorosítási módszer Adatformátum és programnyelv választása –Esetünkben XML és C++ Séma típusrendszerének leképzése a nyelv típusrendszerére –pl. xsd:integer→int, xsd:complexType → class Leképzést végrehajtó kódgenerátor –Típus önleírása az adatséma formátumában –pl. XSLT nyelvű megvalósítás Sorosítást végrehajtó metaprogram –Típusok önleírása alapján sorosít –pl. “hagyományos” C++ program, nem sablon

Használat: típusok generálása struct Appointment: public TypedXmlData { const MetaType& MetaInfo() const; Appointment(); DateTime StartDate; Nullable EndDate; String Text; };

Használat: sorosítás indítása std::string serialize( const TypedXmlData &object ); void deserialize( const std::string &xmlDocStr, TypedXmlData &toObject ); XSD sémaleírás típusdefiníciókkal Adattároló típusok (C++) Típusleírások (C++ / XSD) Felhasználói program Sorosító metaprogram végrehajtj a alapján létrejön alapján dolgozik használj a XML dokumentum metaprogra m konvertálja

Sorosítás használata automatizált kommunikációra Távoli eljáráshívási technológia (XML-alapú) Szolgáltatás WSDL formátumú leírása Kódgenerátor: WSDL → C++ könyvtár –Kliens függvények a kommunikáció elvégzésére –Szerver váza, kitöltendő függvénytörzs Kliens függvények szignatúrája: auto_ptr func( const RequestType &request, const Url &target );

3. Tézis Nyelv- és formátumfüggetlen, moduláris módszert adtam sémaleírással rendelkező dokumentumok sorosítására. Leképzést definiáltam az XML sémaleírók típusrendszeréről a C++ nyelv típusrendszerére, valamint megvalósítottam egy leképzést elvégző kódgenerátort és egy sorosító metaprogramot. Az elkészült könyvtárat a Nokia hivatalos fejlesztői eszközként adta ki S60 platformjára. Szabolcs Payrits, Péter Dornbach, István Zólyomi. “Metadata-Based XML Serialization for Embedded C++”. Proceedings of ICWS 2006, pp Szabolcs Payrits, Péter Dornbach, István Zólyomi. “Metadata-Based XML Serialization for Embedded C++”. JWSR 2009 Jul-Sept, vol 6, nr. 3, pp 18-34

Összefoglalás Definiáltam egy új, nagyobb kifejezőerejű, ortogonális, nem intruzív, nyelvfüggetlen típusvizsgáló (introspection) rendszert. Strukturális altípusosságon alapuló konverziós szabályokat vezettem be a C++ nyelv típusrendszerébe. Nyelv- és formátumfüggetlen, moduláris módszert adtam sémaleírással rendelkező dokumentumok sorosítására.

Fontosabb publikációk 1)István Zólyomi, Zoltán Porkoláb. “Towards a General Template Introspection Library”. GPCE 2004, LNCS Vol. 3286, pp )István Zólyomi, Zoltán Porkoláb. “Improving concept checking in Boost”. Boost Workshop, OOPSLA 2004, Vancouver. 3)István Zólyomi, Zoltán Porkoláb, Tamás Kozsik. “An Extension to the Subtype Relationship in C++ Implemented with Template Metaprograms”. GPCE 2003, LNCS Vol. 2830, pp )István Zólyomi, Zoltán Porkoláb. “A Feature Composition Problem and a Solution Based on C++ Template Metaprogramming”. GTTSE 2006, LNCS Vol. 4143, pp )Szabolcs Payrits, Péter Dornbach, István Zólyomi. “Metadata-Based XML Serialization for Embedded C++”. Proceedings of ICWS 2006, pp )Szabolcs Payrits, Péter Dornbach, István Zólyomi. “Metadata-Based XML Serialization for Embedded C++”. JWSR 2009 Jul-Sept, vol 6, nr. 3, pp )István Zólyomi, Zoltán Porkoláb. “A generative approach for family polymorphism in C++”. 8)Proceedings of ICAI2004, B.V.B. Press, pp )Ádám Sipos, István Zólyomi, Zoltán Porkoláb. “On the correctness of template metaprograms”. Proceedings of ICAI2007, B.V.B. Press,Vol.II., pp )Zoltán Porkoláb, István Zólyomi. Ananomaly of subtype relations at component refinement, and a generative solution in C++. Proceedings of MPOOL workshop, ECOOP 2004, pp