Programozsi nyelvek Programozsi paradigmk Porkolb Zoltn gsdinf elte
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 GDF 2007. dec. 5.
Vázlat n n n Absztrakció és paradigma Programozási nyelvek és paradigmák Automatikus programozás Strukturált programozás Objektumelvű programozás Új paradigmák a láthatáron GDF 2007. dec. 5. 2
A paradigma n Az absztrakció fogalma + általános n - specifikus n n A paradigma útmutató az absztrakciók létrehozására n szabályok és konvenciók halmaza n eszközöket biztosít a fejlesztés támogatására n evolúció n GDF 2007. dec. 5. 3
Assembly n n n Gépi kód automatikus generálása Mesterséges redundancia Gépi kód automatikus generálása Fordítóprogram (1952 Mark I, Autocoder) 1: 1 leképezés Gyengének bizonyultak a kód és a programozó hordozhatósága szempontjából GDF 2007. dec. 5. 4
Automatikus programozás n n n Számítások automatikus elvégzése (A=B+C) Gépfüggetlen magasszintű nyelv Gépfüggő kód automatikus generálása Hatékony fordítás (FORTRAN, 9: 10) Gyengének bizonyultak a kód karbantarthatósága szempontjából GDF 2007. dec. 5. 5
Basic n n n Olcsóbb számítógépek, időosztásos OS Nem csak matematikusok/informatikusok Kemény János: Basic (Dartmouth) Hardverfüggetlen, egyszerű(bb) Interpreter és fordító Gyengének bizonyultak karbantarthatóság és programbiztonság szempontjából GDF 2007. dec. 5. 6
Strukturált (procedurális) programozás n n n 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 GDF 2007. dec. 5. 7
Pascal n n n n ALGOL 60 továbbfejlesztései: ALGOL 68 Niklaus Wirth (ETH Zürich): Pascal Ortogonalitás Algoritmusok+Adatstruktúrák=Programok Portabilitási kit: p-code -> assembly UCSD Pascal: p-code interpreter Modul, típus: Modula-2, Oberon GDF 2007. dec. 5. 8
C n n n ALGOL 60 továbbfejlesztése (B) Dennis Ritchie (AT&T): C (UNIX) Hatékony hozzáférés az (absztrakt) HW-hez Portabilitás: forrásszintű UNIX kernel újraírása (1973) GDF 2007. dec. 5. 9
80 -as évek eleje I. n n n 80 -as évek: nagy teamek, >106 kódsor Nincsen a kódnak „gazdája” Nehézkes kommunikáció az eljárások közt Adatszerkezetek és eljárások elszakadnak Felülről lefelé építkezik, nehezen újrafelhasználható Lassú… GDF 2007. dec. 5. 10
80 -as évek eleje II. n „Garázscégek”: Kis kapacitás n Azonnali produkciós kényszer n n Kódújrafelhasználás, komponensek Alulról felfelé építkezés Gyorsan!!! GDF 2007. dec. 5. 11
Az objektumelvű paradigma n n 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 GDF 2007. dec. 5. 12
Objektumelvű paradigma kritikája n n n 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 GDF 2007. dec. 5. 13
Új paradigmák n n n Funkcionális programozás Aspektusorientált programozás Generikus programozás Szándékelvű programozás Az új paradigmák beépítik a korábbi paradigmák tapasztalatait Multiparadigma elvű rendszerek GDF 2007. dec. 5. 14
Funkcionális programozás I. n n n n n LISP (1957) Függvények kiértékelése, Lambda kalkulus, gráfátíró rendszerek Magasabbrendű függvények Magasabb rendű típusok, típusosztályok Lusta kiértékelés Hivatkozási helyfüggetlenség (referential transparency) Optimalizáció, párhuzamosítás Helyességbizonyítás Scheme, ML/SML/OCam. L, Miranda, Haskell, Clean GDF 2007. dec. 5. 15
Aspektus-orientált programozás n n n 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: Aspect. J + Java GDF 2007. dec. 5. 16
Generikus programozás n n n Adatszerkezetek – általános algoritmusok Fordítási idejű típusellenőrzés Parametrikus polimorfizmus Algoritmusok - osztályok - funktorok Példa: C++ Standard Template Library GDF 2007. dec. 5. 17
C++ template metaprogramozás n 1994, template-ek szabványosítása unruh. cpp 30: conversion from enum to D<2> requested unruh. cpp 30: conversion from enum to D<3> requested unruh. cpp 30: conversion from enum to D<5> requested unruh. cpp 30: conversion from enum to D<7> requested unruh. cpp 30: conversion from enum to D<11> requested unruh. cpp 30: conversion from enum to D<13> requested unruh. cpp 30: conversion from enum to D<17> requested unruh. cpp 30: conversion from enum to D<19> requested n n Fordítási időben Turing-teljes Fordítási idejű döntések és algoritmusok GDF 2007. dec. 5. 18
C++ template metaprogramozás int factorial( int n) { return (n==0) ? 1 : n*factorial(n-1); } int main() { cout << factorial(5) << endl; return 0; } template <int N> struct Factorial { enum { value = N * Factorial<N-1>: : value }; }; template <> struct Factorial<1> { enum { value = 1 }; }; int main() { const int fact 5 = Factorial<5>: : value; std: : cout << fact 5 << endl; return 0; } GDF 2007. dec. 5. 19
Szándékalapú programozás n Charles Simonyi n n Bravo Word GDF 2007. dec. 5. 20
Szándékalapú programozás Feladat-specifikus tudás Programozó ? 200 oldal Forráskód Futtatás 20 000 oldal 19 800 oldal Szoftverfejlesztői tudás? GDF 2007. dec. 5. 21
Szándékalapú programozás Feladat-specifikus tudás Domain kód Forráskód Futtatás 200 oldal 20 000 oldal Programozó Generátor 10 000 oldal GDF 2007. dec. 5. 22
Az ingyenvacsora vége n n n 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 GDF 2007. dec. 5. 23
Összefoglalás n n n 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 GDF 2007. dec. 5. 24
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 GDF 2007. dec. 5.
- Slides: 25