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

Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási.

Hasonló előadás


Az előadások a következő témára: "Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási."— Előadás másolata:

1 Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán gsd@inf.elte.hu http://gsd.web.elte.hu Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék

2 Nyitra 20072 Vázlat Absztrakció és paradigma Absztrakció és paradigma Programozási nyelvek és paradigmák Programozási nyelvek és paradigmák Automatikus programozás Automatikus programozás Strukturált programozás Strukturált programozás Objektumelvű programozás Objektumelvű programozás Új paradigmák a láthatáron Új paradigmák a láthatáron

3 Nyitra 20073 A paradigma Az absztrakció fogalma Az absztrakció fogalma + általános + általános - specifikus - specifikus A paradigma A paradigma útmutató az absztrakciók létrehozására útmutató az absztrakciók létrehozására szabályok és konvenciók halmaza szabályok és konvenciók halmaza eszközöket biztosít a fejlesztés támogatására eszközöket biztosít a fejlesztés támogatására evolúció evolúció

4 Nyitra 20074 Assembly Gépi kód automatikus generálása Gépi kód automatikus generálása Mesterséges redundancia Mesterséges redundancia Gépi kód automatikus generálása Gépi kód automatikus generálása Fordítóprogram (1952 Mark I, Autocoder) Fordítóprogram (1952 Mark I, Autocoder) 1:1 leképezés 1:1 leképezés Gyengének bizonyultak a kód és a programozó hordozhatósága szempontjából Gyengének bizonyultak a kód és a programozó hordozhatósága szempontjából

5 Nyitra 20075 Automatikus programozás Számítások automatikus elvégzése (A=B+C) Számítások automatikus elvégzése (A=B+C) Gépfüggetlen magasszintű nyelv Gépfüggetlen magasszintű nyelv Gépfüggő kód automatikus generálása Gépfüggő kód automatikus generálása Hatékony fordítás (FORTRAN, 9:10) Hatékony fordítás (FORTRAN, 9:10) Gyengének bizonyultak a kód karbantarthatósága szempontjából Gyengének bizonyultak a kód karbantarthatósága szempontjából

6 Nyitra 20076 Basic Olcsóbb számítógépek, időosztásos OS Olcsóbb számítógépek, időosztásos OS Nem csak matematikusok/informatikusok Nem csak matematikusok/informatikusok Kemény János: Basic (Dartmouth) Kemény János: Basic (Dartmouth) Hardverfüggetlen, egyszerű(bb) Hardverfüggetlen, egyszerű(bb) Interpreter és fordító Interpreter és fordító Gyengének bizonyultak karbantarthatóság és programbiztonság szempontjából Gyengének bizonyultak karbantarthatóság és programbiztonság szempontjából

7 Nyitra 20077 Strukturált (procedurális) programozás Szekvenciából, elágazásból és ciklusból felépülő (goto mentes) eljárások 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 Eljárások paraméterátadással és globális változókkal kommunikáltak Adekvát algoritmusok meghatározása Adekvát algoritmusok meghatározása Magasszintű függvénykönyvtárak Magasszintű függvénykönyvtárak Gyengének bizonyultak az adatstruktúrák kompozíciójában Gyengének bizonyultak az adatstruktúrák kompozíciójában

8 Nyitra 20078 Pascal ALGOL 60 továbbfejlesztései: ALGOL68 ALGOL 60 továbbfejlesztései: ALGOL68 Niklaus Wirth (ETH Zürich): Pascal Niklaus Wirth (ETH Zürich): Pascal Ortogonalitás Ortogonalitás Algoritmusok+Adatstruktúrák=Programok Algoritmusok+Adatstruktúrák=Programok Portabilitási kit: p-code -> assembly Portabilitási kit: p-code -> assembly UCSD Pascal: p-code interpreter UCSD Pascal: p-code interpreter Modul, típus: Modula-2, Oberon Modul, típus: Modula-2, Oberon

9 Nyitra 20079 C ALGOL 60 továbbfejlesztése (B) ALGOL 60 továbbfejlesztése (B) Dennis Ritchie (AT&T): C (UNIX) Dennis Ritchie (AT&T): C (UNIX) Hatékony hozzáférés az (absztrakt) HW-hez Hatékony hozzáférés az (absztrakt) HW-hez Portabilitás: forrásszintű Portabilitás: forrásszintű UNIX kernel újraírása (1973) UNIX kernel újraírása (1973)

10 Nyitra 200710 80-as évek eleje I. 80-as évek: nagy teamek, >10 6 kódsor 80-as évek: nagy teamek, >10 6 kódsor Nincsen a kódnak „gazdája” Nincsen a kódnak „gazdája” Nehézkes kommunikáció az eljárások közt Nehézkes kommunikáció az eljárások közt Adatszerkezetek és eljárások elszakadnak Adatszerkezetek és eljárások elszakadnak Felülről lefelé építkezik, nehezen újrafelhasználható Felülről lefelé építkezik, nehezen újrafelhasználható Lassú… Lassú…

11 Nyitra 200711 80-as évek eleje II. „Garázscégek”: „Garázscégek”: Kis kapacitás Kis kapacitás Azonnali produkciós kényszer Azonnali produkciós kényszer Kódújrafelhasználás, komponensek Kódújrafelhasználás, komponensek Alulról felfelé építkezés Alulról felfelé építkezés Gyorsan!!! Gyorsan!!!

12 Nyitra 200712 Az objektumelvű paradigma I. Osztályok (modulok) Osztályok (modulok) Enkapszuláció: interfész + implementáció Enkapszuláció: interfész + implementáció Adatelrejtés Adatelrejtés Öröklés Öröklés Generalizáció Generalizáció Specializáció Specializáció Polimorfizmus Polimorfizmus Simula 67 !!! Simula 67 !!!

13 Nyitra 200713 Az objektumelvű paradigma II. Simula 67 Simula 67 Smalltalk Smalltalk Metaobjektumok Metaobjektumok Dinamikus Dinamikus Erősen típusos programozási nyelvek: Erősen típusos programozási nyelvek: C++ = ALGOL68 + Simula C++ = ALGOL68 + Simula Eiffel Eiffel Java Java C# C#

14 Nyitra 200714 Objektumelvű paradigma kritikája Pozitív és negatív változások 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 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 kovariáns visszatérő érték, kontravariáns paraméter A kifejezés-probléma A kifejezés-probléma Hatékonysági problémák Hatékonysági problémák

15 Nyitra 200715 Új paradigmák Funkcionális programozás Funkcionális programozás Aspektusorientált programozás Aspektusorientált programozás Generikus programozás Generikus programozás Szándékelvű programozás Szándékelvű programozás Az új paradigmák beépítik a korábbi paradigmák tapasztalatait Az új paradigmák beépítik a korábbi paradigmák tapasztalatait Multiparadigma elvű rendszerek Multiparadigma elvű rendszerek

16 Nyitra 200716 Funkcionális programozás I. LISP (1957) LISP (1957) Függvények kiértékelése, Függvények kiértékelése, Kompozicionalitás elve Kompozicionalitás elve Lambda kalkulus, gráfátíró rendszerek Lambda kalkulus, gráfátíró rendszerek Magasabbrendű függvények Magasabbrendű függvények Magasabb rendű típusok, típusosztályok Magasabb rendű típusok, típusosztályok

17 Nyitra 200717 Funkcionális programozás II. Lusta kiértékelés Lusta kiértékelés Hivatkozási helyfüggetlenség (referential transparency) Hivatkozási helyfüggetlenség (referential transparency) Optimalizáció, párhuzamosítás Optimalizáció, párhuzamosítás Helyességbizonyítás Helyességbizonyítás Scheme (LISP), ML, SML, Miranda, OCamL, Haskell, Clean Scheme (LISP), ML, SML, Miranda, OCamL, Haskell, Clean

18 Nyitra 200718 Aspektus-orientált programozás Motiváció: Rossz modularitás OOP-ban Motiváció: Rossz modularitás OOP-ban Szétszórt kódrészletek Szétszórt kódrészletek Kód utólagos módosítása Kód utólagos módosítása Aspektusok – csatolási pontok - szövőgép Aspektusok – csatolási pontok - szövőgép Példa: AspectJ + Java Példa: AspectJ + Java

19 Nyitra 200719 Generikus programozás Adatszerkezetek – általános algoritmusok Adatszerkezetek – általános algoritmusok Fordítási idejű típusellenőrzés Fordítási idejű típusellenőrzés Parametrikus polimorfizmus Parametrikus polimorfizmus Algoritmusok - osztályok - funktorok Algoritmusok - osztályok - funktorok Példa: C++ Standard Template Library Példa: C++ Standard Template Library

20 Nyitra 200720 Szándékalapú programozás Charles Simonyi Charles Simonyi Bravo Bravo Word Word

21 Nyitra 200721 Szándékalapú programozás Feladat-specifikus tudás ProgramozóForráskódFuttatás 200 oldal 20 000 oldal 19 800 oldal Szoftverfejlesztői tudás? ?

22 Nyitra 200722 Szándékalapú programozás Feladat-specifikus tudás DSL Futtatás 200 oldal Programozó

23 Nyitra 200723 Szándékalapú programozás Feladat-specifikus tudás Domain kódForráskódFuttatás 200 oldal 20 000 oldal Generátor 10 000 oldal Programozó

24 Nyitra 200724 Az ingyenvacsora vége Paradigmák evolúciója Paradigmák evolúciója Akadémiai kutatások Akadémiai kutatások Ipari követelmények Ipari követelmények „gyakorlatias” versus „akadémikus” tárgyak „gyakorlatias” versus „akadémikus” tárgyak Új paradigmák megértésére, befogadása Új paradigmák megértésére, befogadása Felkészítés a jelen és a jövő technológiáira Felkészítés a jelen és a jövő technológiáira

25 Köszönöm a figyelmet! Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán gsd@inf.elte.hu http://gsd.web.elte.hu Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék


Letölteni ppt "Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási."

Hasonló előadás


Google Hirdetések