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

Slides:



Advertisements
Hasonló előadás
K-Chat Dr. Szepesvári Csaba Kutatási Alelnök mindmaker.
Advertisements

Piacképes programozói tudás a középiskolában
3. A programozás eszközei, programozás-technikai alapismeretek
Funkcionális programozás F#-ban
Generatív programozás
Programozás.
Programozási ismeretek oktatása: kód vagy algoritmus
Programozási alapismeretek
Programozási nyelvek.
Szoftverparadigmák és metrikák
Bevezetés a gépi tanulásba február 16.. Mesterséges Intelligencia „A számítógépes tudományok egy ága, amely az intelligens viselkedés automatizálásával.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Programozási alapismeretek Bóta László
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE
Porkoláb Zoltán, Kozsik Tamás, Zsók Viktória,
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
5. előadás Parametrikus polimorfizmus. Generikus programozás
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Programozási nyelvek – Programozási paradigmák
Szabó Attila, Cross-entrópia alkalmazása a megerősítéses tanulásban.
Szoftvertechnológia Rendszertervezés.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Kivételkezelés a C++ nyelvben Bevezetés
Bevezetés a C++ programozási nyelvbe
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
Új programozási paradigmák a láthatáron (aspektus-orientált és intencionális programozás) Csontos Péter AITIA Informatikai Rt. 2002/10/17.
Funkcionális programozás 2. gyakorlat
Programozás. fordító (compiler): a program forrásszövegéből egy gépi kódú, futtatható programot (pl. EXE) állít elő, vagyis a programot lefordítja a gép.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Via futuri – 2007 Pécs, PTE november 15-16
Tervkészítés PDDL alapon Konzulens: Kovács Dániel László Intelligens rendszerek tanszék Budapest Műszaki és Gazdaságtudományi.
Programozási nyelvek Páll Boglárka.
1 Tudásalapú információ-kereső rendszerek elemzése és kifejlesztése Célkitűzés: Információk téma-specifikus, különböző típusú forrásokból (internet, intranet.
Az F# programozási nyelv
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
Absztrakt adattípusok kAkAÓ Objektumorientált programozás. In: Nyékyné Gaizler Judit (szerk.): Programozási nyelvek, Kiskapu, Budapest, pp
Programozás és programozás módszertan
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Objektumorientált programozás
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
LKG-Moodle A LKG ToP ( T áv O ktatási P ortál) működéséről avagy bevezetés a MOODLE e-oktatási rendszer használatába Bánhegyesi Zoltán.
Informatika bemeneti mérés
Programozás. Programozási nyelvek: Gépi nyelv A számítástechnika őskorában egyedüli lehetőség volt a gép bitsorozattal való programozása. Minden processzor.
Szabó Attila, Feladatszervezés RF-MEMS hálózatokban.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
Szoftver születik Eötvös Konferencia Köllő Hanna.
Bevezetés az Office programozásába
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
1 A szoftver társadalomtörténete Porkoláb Zoltán
Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási.
kialakulása, fejlődése, generációk
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
EUCIP konferencia október 20. Cséfalvay Katalin Fejlesztés (BUILD) modul.
A programozás módszertana. Monolitikus programozás Egyszerű feladatok - egyszerű programok Egy program – egy programozó Nincs belső struktúra, lineáris.
Programozási nyelvek csoportosítása.
kialakulása, fejlődése, generációk
Adatstruktúrák Algoritmusok Objektumok
Programozási nyelvek Programozási alapismeretek
Programozási alapok.
Prog2, AspectJ bevezetés
Programozási nyelvek típusossága.
Compiler illetve interpreter nyelvek
Operációs rendszerek.
Hernyák Zoltán Programozási Nyelvek II.
Programozási nyelvek Talata István.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Programozási nyelvek Talata István.
Előadás másolata:

Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék

Nyitra 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

Nyitra 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ó

Nyitra 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

Nyitra 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

Nyitra 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

Nyitra 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

Nyitra 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

Nyitra 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)

Nyitra 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ú…

Nyitra 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!!!

Nyitra 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 !!!

Nyitra 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#

Nyitra 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

Nyitra Ú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

Nyitra 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

Nyitra 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

Nyitra 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

Nyitra 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

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

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

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

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

Nyitra 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

Köszönöm a figyelmet! Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék