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
Algoritmusleíró eszközök
Advertisements

K-Chat Dr. Szepesvári Csaba Kutatási Alelnök mindmaker.
SZENT ISTVÁN EGYETEM GAZDASÁG- ÉS TÁRSADALOMTUDOMÁNYI KAR TUDOMÁNYOS DIÁKKÖRI KONFERENCIA NOVEMBER 25. AUTO-SZŰRŐ FEJLESZTÉSE OLAP JELENTÉSEK UTÓLAGOS,
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
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
Generatív programozás
Programozás.
Programozási nyelvek.
OBJEKTUMORIENTÁLT PROGRAM
Szoftverparadigmák és metrikák
Vizuális modellezés Uml és osztálydiagram UML eszközök
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Programozási alapismeretek Bóta László
Java programozási nyelv 3. rész – Osztályok I.
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.
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.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
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
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.
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.
Tervkészítés PDDL alapon Konzulens: Kovács Dániel László Intelligens rendszerek tanszék Budapest Műszaki és Gazdaságtudományi.
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.
Programozási nyelvek.
Absztrakt adattípusok kAkAÓ Objektumorientált programozás. In: Nyékyné Gaizler Judit (szerk.): Programozási nyelvek, Kiskapu, Budapest, pp
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
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.
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.
Egyenesvonalú (lineáris) adatszerkezetek
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.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Haladó C++ Programozás Programtervezési minták – alapok Sonkoly Balázs
Programozási nyelvek – Programozási paradigmák Porkoláb Zoltán Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
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.
LA C++ programozási nyelv Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 16./0. lA világ objektum alapú szemlélete lSzoftverfejlesztési.
EUCIP konferencia október 20. Cséfalvay Katalin Fejlesztés (BUILD) modul.
A szoftver mint komplex rendszer: objektumorientált megközelítés.
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.
Script nyelvek előadá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.
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

INFO Savaria 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;}

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

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

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

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

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

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

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

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

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

INFO Savaria Ö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

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