Deklaratív programozás

A tantárgy angol neve: Declarative Programming

Adatlap utolsó módosítása: 2017. július 4.

Budapesti Műszaki és Gazdaságtudományi Egyetem
Villamosmérnöki és Informatikai Kar
Mérnök informatikus szak, BSc képzés
Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
VISZAD00 7 2/1/0/f 3  
3. A tantárgyfelelős személy és tanszék Dr. Szeredi Péter, Számítástudományi és Információelméleti Tanszék
A tantárgy tanszéki weboldala http://dp.iit.bme.hu
4. A tantárgy előadója


Név:

Beosztás:

Tanszék, intézet:

dr. Dóbé Péter

adjunktus

Irányítástechnika és Informatika Tanszék

dr. Szeredi Péter

c. egyetemi tanár

Számítástudományi és Információelméleti Tanszék


5. A tantárgy az alábbi témakörök ismeretére épít Programozás, Programozási technológia, Matematikai logika
6. Előtanulmányi rend
Kötelező:
NEM ( TárgyEredmény( "BMEVISZA402" , "jegy" , _ ) >= 2
VAGY
TárgyEredmény("BMEVISZA402", "FELVETEL", AktualisFelev()) > 0
VAGY
TárgyEredmény( "BMEVISZA403" , "jegy" , _ ) >= 2
VAGY
TárgyEredmény("BMEVISZA403", "FELVETEL", AktualisFelev()) > 0)

A fenti forma a Neptun sajátja, ezen technikai okokból nem változtattunk.

A kötelező előtanulmányi rendek grafikus formában itt láthatók.

7. A tantárgy célkitűzése A deklaratív - más néven nonimperatív - programozási paradigma megismertetése, többek között a párhuzamos és elosztott programozás (pl. a többmagos processzorok programozása), a korlátalapú programozás, a mesterségesintelligencia-módszerek, az ontológiakezelés és a szemantikusweb-kezelés korszerű megalapozására.
8. A tantárgy részletes tematikája


  • 1. hét

    (4 óra előadás – Bevezetés, a Cékla nyelv): Követelmények, irodalom. Motivációs példa. A Cékla (deklaratív C++ résznyelv) programozási nyelv típusai, szintaxisa. Listakezelés Céklában. Jobbrekurzió és tárigény. Imperatív programok átírása gyűjtőargumentumokkal. Magasabb rendű és generikus függvények.

  • 2. hét:

    (2 óra gyakorlat): Programozás Cékla nyelven.

    (2 óra előadás – Erlang): Erlang bevezetés példákon keresztül. Típusok, Erlang szintaxis alapjai. Mintaillesztés, term, kifejezés. Listanézet és alkalmazásai.


  • 3. hét:

    (4 óra előadás – Erlang): Magasabbrendű függvények, függvényérték. Műveletek, beépített függvények. Őr, őrkifejezés, helye a mintaillesztésben. Típusspecifikáció mint konvenció és mint nyelvi elem. Kivételkezelés és alkalmazásai. Gyakori könyvtári függvények. Keresési feladat pontos megoldása funkcionális megközelítésben.

  • 4. hét:

    (2 óra gyakorlat): Programozás Erlang nyelven.

    (2 óra előadás – Prolog): Bevezetés példákon keresztül. A nyelv alapszintaxisa, adatstruktúrák.

  • 5. hét:

    (2 óra gyakorlat): Programozás Prolog nyelven.

    (2 óra előadás – Prolog): Redukciós lépés, egyesítés, keresési tér. Listakezelés Prologban

  • 6. hét:

    (2 óra előadás – Prolog): Operátorok. További vezérlési szerkezetek: diszjunkció, feltételes szerkezet, negáció.

    (2 óra előadás – Erlang): Rekurzív adatstruktúrák Erlangban. Listák használata: futamok. Rekurzió fajtái. Halmazműveletek rendezetlen listával.

  • 7. hét:

    (2 óra gyakorlat): Programozás Prolog nyelven.

    (2 óra előadás – Erlang): Generikus keresőfák. Lusta farkú lista Erlangban.


  • 8. hét:

    (2 óra gyakorlat): Programozás Erlang nyelven.

    (2 óra előadás – Prolog): A Prolog végrehajtás – algoritmusok. Jobbrekurzió, akkumulátorok Prologban. A keresési tér szűkítése. Vezérlési eljárások.

  • 9. hét:

    (2 óra gyakorlat): Programozás Prolog nyelven.

    (2 óra előadás – Prolog): Determinizmus és indexelés. Meta-logikai eljárások. Megoldásgyűjtő eljárások.

  • 10. hét:

    (2 óra előadás – Prolog): Imperatív programok átírása Prologba. Magasabbrendű eljárások. Dinamikus predikátumok.

    (2 óra előadás): Összefoglalás, kitekintés

  • 11. hét:

    (2 óra gyakorlat): Programozás Erlang és Prolog nyelven. Felkészülés a NZH-ra


9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) 14*2 óra előadás és 7*2 óra gyakorlat a félév első 11 hetében.
10. Követelmények


a) Zárthelyi dolgozat értékelése és elfogadása


A zárthelyi elfogadásához szükséges annak nyelvenként legalább 40%-os szintű megoldása. A zárthelyi megírásához írószeren, üres papíron és a kiadott feladatlapon kívül nem használható semmilyen segédeszköz.


Egynél több zárthelyi megírása esetén az utolsót tekintjük érvényesnek.


b) Kis házi feladatok


(A félév során több alkalommal adunk ki kis házi feladatot. A Cékla-, Erlang-, ill. Prolog-nyelvű programok beadásának módját a tárgy honlapján közzéteendő feladatkiírás részletezi. Az alábbiakban fő programozási nyelvnek az Erlang és Prolog nyelveket nevezzük.)


A kis házi feladatokról szóló követelmény teljesítéséhez az szükséges, hogy a beadható feladatok legalább 50%-a lefusson a tesztesetek 100%-os teljesítésével úgy, hogy mindkét fő programozási nyelven legalább egy 100%-ot teljesítő programot be kell adni.


c) Nagy házi feladat, megajánlott jegy


A nagy házi feladat megoldása nem kötelező a jegy megszerzéséhez, azonban a jegyszámításba beszámít, és beadásával megajánlott jegy is szerezhető.


Az Erlang- és Prolog nyelven megírt programokat, valamint a dokumentációt elektronikus úton kell beadni az ütemtervben előírt oktatási héten. A beadás módját a tárgy honlapján közzéteendő feladatkiírás részletezi. A beadott feladatokkal kapcsolatban a hallgató kérdéseket kaphat (a házi feladat megvédése), amely kérdésekre adott válaszok az önálló munkavégzést is hivatottak bizonyítani.


A hallgató dönthet úgy, hogy programját a létraversenybe is benevezi.  A létraversenyben részt vevő programokat bonyolultabb, nagyobb méretű tesztesetekkel futtatjuk. A létraversenyben jó helyezést elérő programok pluszpontot kapnak, amit az osztályzat megállapításakor figyelembe veszünk. A pluszpontszám maximumát nyelvenként a leggyorsabb program kapja meg, a többi program egyre kevesebb pluszpontot szerez.


Jó (4) megajánlott jegyet kap az, aki a kis házi feladatokkal kapcsolatos követelmények teljesítése mellett mindkét fő programozási nyelvből elkészíti a nagy házi feladatot, megfelelően dokumentálja, és a tesztesetek legalább 80%-át hibátlanul megoldja, valamint a nagy házi feladatot sikeresen megvédi. Jeles (5) megajánlott jegyet kap az, aki emellett mindkét fő programozási nyelvből legalább 40%-os eredményt ér el a létraversenyen (azaz mindkét programja megoldja a létraverseny teszteseteinek legalább 40%-át).


A megajánlott jegy elfogadása a zárthelyi alóli mentességet jelenti. Ez esetben viszont a hallgatónak meg kell védenie a nagy házi feladatát egy egyeztetett időpontban.


d) A félévvégi osztályzat megállapítása


A félévvégi osztályzatban a zárthelyire kapott pontszámot 85%-os, a nagy házi feladatra kapott pontszámot 15%-os súllyal vesszük figyelembe. A kis házi feladatok megoldására kapott és a létraversenyen szerzett pontszám az összpontszámot javítja, tehát ezekkel együtt az összpontszám 100%-nál nagyobb is lehet.


Az egyes osztályzatok alsó határai, az összpontszám százalékában: elégséges – 40%, közepes – 55%, jó – 70%, jeles – 85%.


e) Meg nem engedett eszközök alkalmazása


A kis és nagy házi feladatokat minden hallgatónak önállóan, egyénileg kell megoldania, másoktól ötleteken kívül egyebet - pl. teljes kódot vagy akár csak kódrészletet - nem vehet át. A programok szerkezeti hasonlóságát automatikus eszközökkel is vizsgáljuk.

A zárthelyin semmilyen segédeszköz nem használható.

Mástól származó program vagy programrészlet átvétele/átadása és beadása esetén az összes kis és a nagy házi feladatot érvénytelennek tekintjük. A zárthelyin a meg nem engedett eszközöket használókat az érvényes kari, ill. egyetemi rendelkezések szerint büntetjük.

Egyéb kérdésekben a TVSz rendelkezései az irányadók.


11. Pótlási lehetőségek A házi feladatok pótlására nincs lehetőség. A nagyzárthelyi pótlására, illetve javítására a a pótzárthelyin, továbbá a pótlási időszakban (a pótpótzárthelyin) adunk lehetőséget. Ezen alkalmakkor is a nagyzárthelyin elvárt tananyagot kell tudni.
12. Konzultációs lehetőségek A levelezési listára feliratkozott hallgatók írásban feltett konzultációs kérdéseire a félév során folyamatosan válaszolunk. Előzetes egyeztetést követően személyes konzultációra is van lehetőség.
13. Jegyzet, tankönyv, felhasználható irodalom

A tantárgy egy részéhez sokszorosított jegyzet vásárolható a tantárgy honlapján megadott módon és helyen. Elektronikus változata a Webről is letölthető:

Szeredi Péter, Benkő Tamás: Deklaratív programozás. Oktatási segédlet. Bevezetés a logikai programozásba. Számítástudományi és Információelméleti Tanszék, Budapest, 2005

Ajánlott irodalom:
a. Joe Armstrong: Programming Erlang: Software for a Concurrent World. The Pragmatic Programmers, July 2007. ISBN 978-1-9343560-0-5 http://www.pragprog.com/titles/jaerlang/programming-erlang
b. Joe Armstrong, Robert Virding, Claes Wikström, Mike Williams: Concurrent Programming in Erlang. Second Edition. Prentice Hall, 1996. ISBN 0-13-508301-X. Az első rész szabadon letölthető PDF-ben: http://erlang.org/download/erlang-book-part1.pdf.

c. Erlang on-line documentation http://erlang.org/doc.html
d. Erlang Programming. Wiki Books. http://en.wikibooks.org/wiki/Erlang_Programming
e. Francesco Cesarini, Simon Thompson: Erlang Programming. O'Reilly Media,Inc., December 2008. ISBN 978-0596518189

f. Farkas Zsuzsa, Futó Iván, Langer Tamás, Szeredi Péter: MProlog programozási nyelv. Műszaki Könyvkiadó, Budapest, 1989.

g. Márkusz Zsuzsa: Prologban programozni könnyű. Novotrade, Budapest, 1988.

h. Richard A. O'Keefe: The Craft of Prolog. MIT Press, 1990. ISBN 0-262-15039-5

i. Leon Sterling, Ehud Shapiro: The Art of Prolog. Advanced Programming Techniques, 2nd Edition, MIT Press, 1994, ISBN 0-262-19338-8

j. Peter Flach: Logikai Programozás. Az intelligens következtetés példákon keresztül. Panem-John Wiley & Sons, 2001

k. Ulf Nilsson and Jan Maluszynski: Logic, Programming and Prolog (2nd ed.). Previously published by John Wiley & Sons Ltd. http://www.ida.liu.se/%7Eulfni/lpp/

14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
Kontakt óra42
Félévközi készülés órákra7
 Félévközi készülés előadásra 6
Felkészülés zárthelyire10
Házi feladatok elkészítése19
Kijelölt írásos tananyag elsajátítása 6
Összesen90
15. A tantárgy tematikáját kidolgozta


Tanszék, intézet

Név

Beosztás

Irányítástechnika és Informatika Tanszék

dr. Dóbé Péter

adjunktus

Irányítástechnika és Informatika Tanszék

dr. Hanák Péter

tud. munkatárs

Irányítástechnika és Informatika Tanszék

dr. Kápolnai Richárd

adjunktus

Számítástudományi és Információelméleti Tanszék

dr. Szeredi Péter

c. egyetemi tanár


IMSc tematika és módszer

Az IMSc program hallgatói számára a gyakorlatokon emelt szintű fakultatív programozási feladatokat kínálunk, valamint – részben ezen feladatokhoz kapcsolódó – önállóan tanulmányozandó irodalmat teszünk elérhetővé, fakultatív konzultációs lehetőség biztosításával.

IMSc pontozás

A tantárgyból kétféle módon szerezhető IMSc pont:

  • a zárthelyi során pluszfeladat megoldásával (maximum 10 pont),

  • a létraversenyen a megajánlott jeles érdemjegyhez szükséges 40%-os teljesítés felett, minden további 10% teljesítéséért mindkét fő nyelv esetén 1 – 1 pont (összesen maximum 12 pont).

    A hallgató a fenti módokon szerzett pontok összegét, de legfeljebb 15 IMSc pontot kap.

    Az IMSc pontok gyűjtése teljesen független a tantárgyban szerezhető ZH és házi feladat pontoktól. Ezen pontok megszerzése és a fakultatív feladatok megoldása nélkül is jeles szinten teljesíthetők a tantárgy követelményei.

    Az IMSc pontok megszerzése az IMSc programban nem résztvevő hallgatók számára is biztosított.

Egyéb megjegyzések

Honlap: http://dp.iit.bme.hu/.

Levelezési lista: http://www.iit.bme.hu/mailman/listinfo/dp-l.

A gyakorlásra és a házi feladatok megoldására használható Erlang és Prolog értelmezők, ill. fordítóprogramok elérését, a gyakorlórendszer elérését és használatát, valamint a házi feladatok elkészítésére és beadására vonatkozó tudnivalókat a tantárgy honlapján ismertetjük.