Új szoftverparadigmák nyelvi támogatása: a jelen oktatása – a holnap technológiája Porkoláb Zoltán, gsd@inf.elte.hu Kozsik Tamás, kto@inf.elte.hu Zsók Viktória, zsv@inf.elte.hu Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék
A paradigma Az absztrakció fogalma A paradigma + általános - specifikus A paradigma útmutató az absztrakciók létrehozására szabályok és konvenciók halmaza eszközöket biztosít a fejlesztés támogatására evolúció Informatika a felsőoktatásban 2005
Strukturált programozás Szekvenciából, elágazásból és ciklusból felépülő (goto mentes) eljárások Eljárások paraméterátadással és globális változókkal kommunikáltak Adekvát algoritmusok meghatározása Magasszintű függvénykönyvtárak Gyengének bizonyultak az adatstruktúrák kompozíciójában Informatika a felsőoktatásban 2005
Az objektumelvű paradigma Adekvát adatstruktúrák és a rajtuk végzett műveletek, Enkapszuláció Osztályok: az azonos adatstruktúrával és műveletekkel rendelkező objektumok programnyelvi leírása Öröklődés, osztályok hierarchiája Informatika a felsőoktatásban 2005
Az objektumelvű paradigma Generalizáció, specializáció Erősen típusos programozási nyelvek támogatják Dinamikus kötés - futási idejű polimorfizmus Elterjedt az iparban és oktatásban C++, Java Az első oktatott nyelv – procedurális vs. objektumelvű Informatika a felsőoktatásban 2005
Objektumelvű paradigma - kritika Pozitív és negatív változások Dinamikus kötés és a fordítási idejű típusellenőrzés egyidejű megvalósítása kovariáns visszatérő érték, kontravariáns paraméter A kifejezés-probléma Hatékonysági problémák Informatika a felsőoktatásban 2005
Új paradigmák Aspektusorientált programozás Generikus programozás Magasabbrendű funkcionális programozás Az új paradigmák beépítik a korábbi paradigmák tapasztalatait Multiparadigma elvű rendszerek Informatika a felsőoktatásban 2005
Aspektus-orientált programozás Motiváció: Rossz modularitás OOP-ban Szétszórt kódrészletek Kód utólagos módosítása Aspektusok – csatolási pontok - szövőgép Példa: AspectJ + Java Informatika a felsőoktatásban 2005
Generatív programozás Adatszerkezetek – általános algoritmusok Fordítási idejű típusellenőrzés Parametrikus polimorfizmus Algoritmusok - osztályok - funktorok Példa: C++ Standard Template Library Informatika a felsőoktatásban 2005
Funkcionális programozás Függvények kiértékelése, magasabbrendű függvények Kompozicionalitás elve, kiértékelési stratégiák Lambda kalkulus, gráfátíró rendszerek Magasabb rendű típusok, típusosztályok, egzisztenciálisan kvantált típusok, unique típusok, monádok Informatika a felsőoktatásban 2005
OO-AOP együttélés Alapstruktúra – OOP Csökkenti a kódismétlést az osztályokban Javítja a modularitást Segíti a pozitív és negatív változások követését + after/before – around Informatika a felsőoktatásban 2005
OO-GP együttélés Absztrakt adatszerkezetek – osztályok Funktor-ok Algoritmusok ábrázolása osztályként Mixin-ek: Az öröklési hierarchia megfordítása Csökkenti az osztályok számát és interfészét Segíti a negatív változások követését Informatika a felsőoktatásban 2005
OO-FP együttélés Absztrakt adatszerkezetek – osztályok Enkapszuláció Altípusosság: Nominális Strukturális Informatika a felsőoktatásban 2005
GP-FP együttélés Standard Template Library Template metaprogramozás Funkcionális programozás Template metaprogramozás Funkcionális programok Generikus adatszerkezetek és függvények Parametrikus polimorfizmus Informatika a felsőoktatásban 2005
Összefoglalás Paradigmák evolúciója Akadémiai kutatások Ipari követelmények „gyakorlatias” versus „akadémikus” tárgyak Új paradigmák megértésére, befogadása Felkészítés a jelen és a jövő technológiáira Informatika a felsőoktatásban 2005
Hivatkozások James O. Coplien: Multiparadigm Design for C++, Addison-Wesley, 1998 David Musser, Atul Saini: STL Tutorial and Reference Guide, Addison-Wesley, 1996 Bjarne Stroustrup: The C++ Language, Addison-Wesley, 2000 Czarnetzki, Eisenecker: Generative Programming, Addison-Wesley, 2000 Informatika a felsőoktatásban 2005