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
Vázlat 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.
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ó GDF 2007. dec. 5.
Assembly Gépi kód automatikus generálása Mesterséges redundancia 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.
Automatikus programozás 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.
Basic 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.
Strukturált (procedurális) 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 GDF 2007. dec. 5.
Pascal ALGOL 60 továbbfejlesztései: ALGOL68 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.
C 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.
80-as évek eleje I. 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.
80-as évek eleje II. „Garázscégek”: Kódújrafelhasználás, komponensek Kis kapacitás Azonnali produkciós kényszer Kódújrafelhasználás, komponensek Alulról felfelé építkezés Gyorsan!!! GDF 2007. dec. 5.
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 GDF 2007. dec. 5.
Objektumelvű paradigma kritikája 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.
Új paradigmák 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.
Funkcionális programozás I. 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/OCamL, Miranda, Haskell, Clean GDF 2007. dec. 5.
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 GDF 2007. dec. 5.
Generikus 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 GDF 2007. dec. 5.
C++ template metaprogramozás 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 Fordítási időben Turing-teljes Fordítási idejű döntések és algoritmusok GDF 2007. dec. 5.
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 }; const int fact5 = Factorial<5>::value; std::cout << fact5 << endl; GDF 2007. dec. 5.
Szándékalapú programozás Charles Simonyi Bravo Word GDF 2007. dec. 5.
Szándékalapú programozás Feladat-specifikus tudás Programozó Forráskód Futtatás ? 20 000 oldal 200 oldal 19 800 oldal Szoftverfejlesztői tudás? GDF 2007. dec. 5.
Szándékalapú programozás Feladat-specifikus tudás Domain kód Forráskód Futtatás 200 oldal 20 000 oldal Generátor Programozó 10 000 oldal GDF 2007. dec. 5.
Az ingyenvacsora vége 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.
Ö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 GDF 2007. dec. 5.
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