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 INFO Savaria 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 INFO Savaria 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 INFO Savaria 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 INFO Savaria 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 INFO Savaria 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 INFO Savaria 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 INFO Savaria 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 INFO Savaria 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) Modul, típus: Modula-2, Oberon Modul, típus: Modula-2, Oberon

10 INFO Savaria 200710 Az objektumelvű paradigma Adekvát adatstruktúrák és a rajtuk végzett műveletek, Adekvát adatstruktúrák és a rajtuk végzett műveletek, Enkapszuláció Enkapszuláció Osztályok: az azonos adatstruktúrával és műveletekkel rendelkező objektumok programnyelvi leírása Osztályok: az azonos adatstruktúrával és műveletekkel rendelkező objektumok programnyelvi leírása Öröklődés, osztályok hierarchiája Öröklődés, osztályok hierarchiája

11 INFO Savaria 200711 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ú…

12 INFO Savaria 200712 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!!!

13 INFO Savaria 200713 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 !!!

14 INFO Savaria 200714 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#

15 INFO Savaria 200715 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

16 INFO Savaria 200716 Ú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

17 INFO Savaria 200717 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

18 INFO Savaria 200718 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

19 INFO Savaria 200719 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

20 INFO Savaria 200720 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

21 INFO Savaria 200721 C++ template metaprogramozás Fordítási időben Turing-teljes Fordítási időben Turing-teljes Fordítási idejű döntések és algoritmusok Fordítási idejű döntések és algoritmusok unruh.cpp 30: conversion from enum to D requested 1994, template-ek szabványosítása 1994, template-ek szabványosítása

22 INFO Savaria 200722 C++ template metaprogramozás int factorial( int n) { return (n==0) ? 1 : n*factorial(n-1); return (n==0) ? 1 : n*factorial(n-1);} int main() { cout << factorial(5) << endl; cout << factorial(5) << endl; return 0; return 0;} template struct Factorial { enum { value = N * Factorial ::value }; enum { value = N * Factorial ::value };}; template <> struct Factorial { enum { value = 1 }; enum { value = 1 };}; int main() { const int fact5 = Factorial ::value; const int fact5 = Factorial ::value; std::cout << fact5 << endl; std::cout << fact5 << endl; return 0; return 0;}

23 INFO Savaria 200723 OO-AOP együttélés Alapstruktúra – OOP Alapstruktúra – OOP Csökkenti a kódismétlést az osztályokban Csökkenti a kódismétlést az osztályokban Javítja a modularitást Javítja a modularitást Segíti a pozitív és negatív változások követését Segíti a pozitív és negatív változások követését + after/before + after/before – around – around

24 INFO Savaria 200724 OO-GP együttélés Absztrakt adatszerkezetek – osztályok Absztrakt adatszerkezetek – osztályok Funktor-ok Funktor-ok Algoritmusok ábrázolása osztályként Algoritmusok ábrázolása osztályként Mixin-ek: Mixin-ek: Az öröklési hierarchia megfordítása Az öröklési hierarchia megfordítása Csökkenti az osztályok számát és interfészét Csökkenti az osztályok számát és interfészét Segíti a negatív változások követését Segíti a negatív változások követését

25 INFO Savaria 200725 OO-FP együttélés Absztrakt adatszerkezetek – osztályok Absztrakt adatszerkezetek – osztályok Enkapszuláció Enkapszuláció Altípusosság: Altípusosság: Nominális Nominális Strukturális Strukturális

26 INFO Savaria 200726 GP-FP együttélés Standard Template Library Standard Template Library Funkcionális programozás Funkcionális programozás Template metaprogramozás Template metaprogramozás Funkcionális programozás Funkcionális programozás Funkcionális programok Funkcionális programok Generikus adatszerkezetek és függvények Generikus adatszerkezetek és függvények Parametrikus polimorfizmus Parametrikus polimorfizmus

27 INFO Savaria 200727 Szándékalapú programozás Charles Simonyi Charles Simonyi Bravo Bravo Word Word

28 INFO Savaria 200728 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ó

29 INFO Savaria 200729 Szándékalapú programozás Feladat-specifikus tudás DSL Futtatás 200 oldal Programozó

30 INFO Savaria 200730 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? ?

31 INFO Savaria 200731 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

32 INFO Savaria 200732 Összefoglalás 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

33 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