Deklaratív programozás

A tantárgy angol neve: Declarative Programming

Adatlap utolsó módosítása: 2014. szeptember 15.

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
VISZA403   3/1/0/f 5  
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. Szeredi Péterc.egyetemi tanár
Számítástudományi és Információelm. Tanszék
Kápolnai RichárdtanársegédIrányítástechnika és Informatika 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ő:

(TárgyEredmény( "BMEVIIIA217" , "jegy" , _ ) >= 2
VAGY
TárgyEredmény( "BMEVIIIAB01" , "jegy" , _ ) >= 2
VAGY
TárgyEredmény( "BMEVIFO2228" , "jegy" , _ ) >= 2 )


ÉS NEM ( TárgyEredmény( "BMEVISZAD00" , "jegy" , _ ) >= 2
VAGY
TárgyEredmény("BMEVISZAD00", "FELVETEL", AktualisFelev()) > 0
VAGY
TárgyTeljesítve("BMEVISZA402")
VAGY Alairas("BMEVISZA402", _))

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.

Ajánlott:
----
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
  • Bevezetés.
Az imperatív és a deklaratív (funkcionális és logikai) programozás összevetése. Ismerkedés a deklaratív nyelvekkel: Cékla, a C++ egy deklaratív résznyelve.
  • Funkcionális programozás Erlang nyelven.
Az Erlang nyelv alapjai: elemi kifejezések, listák és más adatszerkezetek, változók, függvények, operátorok, összetett kifejezések. Mintaillesztés. Őrök. Kiértékelés. Rekurzió, iteráció. Modulok. Beépített függvények. Hibakezelés. Párhuzamos programozás: folyamatok, üzenetek. Elosztott programozás: csomópontok, távoli eljáráshívás. Új irányzatok a funkcionális programozásban.
  • Logikai programozás Prolog nyelven.
A Prolog nyelv alapjai: eljárások, visszalépésen és mintaillesztéses eljáráshíváson alapuló vezérlés, összetett adatszerkezetek, operátorok, listák. Beépített eljárások. Programozási módszerek. Fejlettebb nyelvi elemek és alkalmazásuk, modularitás, hibakezelés. Új irányzatok a logikai programozásban.
9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) 10*4 óra előadás és 10*2 óra kiscsoportos foglalkozás a félév első 10 hetében egyenletesen elosztva.
10. Követelmények a) Részvétel a gyakorlatokon
A tantermi gyakorlatok 70 százalékán részt kell venni.
b) 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.
c) 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 feladatok 50%-ának beadása, 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.
d) 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ó a beszámolón 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.
Azok a programok, amelyek a tesztesetek legalább 80%-át hibátlanul megoldják és megfelelően dokumentáltak, létraversenyben vesznek részt.  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 gyakorlatokkal, zárthelyivel és kis házi feladatokkal kapcsolatos követelmények teljesítése mellett mindkét fő programozási nyelvből bejut a létraversenybe, és a házi feladatát 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 beszámoló alóli mentességet jelenti (lásd következő pont).
e) Beszámoló
A 11. vagy a 12. héten kell teljesíteni a beszámolót. A beszámoló írásbeli feladatmegoldással kombinált szóbeli beszámoló a tárgy anyagából. A sikeres beszámoló feltétele a beszámolón megszerezhető maximális pontszám 40%-ának elérése külön-külön mindkét fő programozási nyelvből.
f) A félévvégi osztályzat megállapítása
A félévvégi osztályzatban a beszámolóra kapott pontszámot 70%-os, a zárthelyire és a nagy házi feladatra kapott pontszámot 15-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%.

g) 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 és a beszámolón 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 és a beszámolón 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 Gyakorlat pótlására, és 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. A beszámoló pótlására is a pótlási héten adunk lehetőséget.
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/~ulfni/lpp/

14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
Kontakt óra60
Félévközi készülés órákra15
Felkészülés zárthelyire5
Házi feladat elkészítése30
Kijelölt írásos tananyag elsajátítása10
Vizsgafelkészülés30
Összesen150


15. A tantárgy tematikáját kidolgozta
Tanszék, intézetNévBeosztás
Irányítástechnika és Informatika Tanszékdr. Hanák Pétertud. munkatárs
Irányítástechnika és Informatika TanszékKápolnai Richárdtanársegéd
Számítástudományi és Információelm. Tanszékdr. Szeredi Péterc.egyetemi tanár
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.