Deklaratív programozás

A tantárgy angol neve: Declarative Programming

Adatlap utolsó módosítása: 2012. február 11.

Budapesti Műszaki és Gazdaságtudományi Egyetem
Villamosmérnöki és Informatikai Kar
Műszaki Informatika Szak
Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
VISZA402 7 3/1/0/v 5  
3. A tantárgyfelelős személy és tanszék Dr. Szeredi Péter,
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. Hanák Pétertud. munkatársIrányítástechnika és Informatika Tanszék
dr. Szeredi PéterdocensSzámítástudományi és Információelm. 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árgyTeljesítve("BMEVISZA403") ) ÉS

(TárgyEredmény( "BMEVIIIA217" , "jegy" , _ ) >= 2
VAGY
TárgyEredmény( "BMEVIFO2228" , "jegy" , _ ) >= 2
VAGY
KépzésLétezik( ahol a KépzésKód = "5N-08") )

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

A kötelező előtanulmányi rend az adott szak honlapján és képzési programjában található.

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
  • Az imperatív és a deklaratív (funkcionális és logikai) programozás összevetése.
  • 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) Előadás, tantermi és számítógép-laboratóriumi gyakorlatok, konzultáció, önálló gyakorlás számítógépen.
10. Követelmények a) Előfeltételek
Alapszintű logikai, továbbá elméleti és gyakorlati programozási ismeretek.
b) Követelmények a szorgalmi időszakban
Kötelező: az aláírás megszerzése.
Ajánlott: a webes gyakorlórendszer használata
c) A zárthelyi időpontja, értékelése és elfogadása
A nagyzárthelyit, amelyen a kijelölt tananyagot kérjük számon, az ütemtervben megadott oktatási héten íratjuk meg. A nagyzárthelyi pótlását, ill. javítását illetően lásd a 11. pontot. Ezen alkalmakkor is a nagyzárthelyin elvárt tananyagot kell tudni. 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.
d) A házi feladatok ki- és beadása, értékelése és elfogadása
A nagy házi feladatot az ütemtervben megadott oktatási héten adjuk ki. 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 vizsgá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 félévközi követelmények teljesítése mellett mindkét programozási nyelvből bejut a létraversenybe, és a házi feladatát sikeresen megvédi az elővizsgán. Jeles (5) megajánlott jegyet kap az, aki emellett mindkét 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 félév során több alkalommal adunk ki kis házi feladatot. Az Erlang-, ill. Prolog-nyelvű programok beadásának módját a tárgy honlapján közzéteendő feladatkiírás részletezi.
e) A gyakorlórendszer használata
A tananyag elsajátítását webes gyakorlórendszer segíti. A gyakorlórendszer használatát a tárgy honlapján ismertetjük.
f) Az aláírás megszerzésének feltétele
A zárthelyi nyelvenként legalább 40%-os szintű megoldása. A kis házi feladatok 50%-ának beadása, a tesztesetek 100%-os teljesítésével úgy, hogy mindkét nyelven legalább egy 100%-ot teljesítő programot be kell adni. Részvétel a tantermi gyakorlatok 70 százalékán.

g) A vizsgára bocsátás feltétele

A hallgató vizsgára bocsátható, ha aláírást szerzett a jelen félévben, vagy ezt megelőzően, feltéve, hogy az aláírások érvényességére a TVSZ által előírt minimális időtartam még nem múlt el.

h) A vizsga

A vizsga írásbeli feladatmegoldással kombinált szóbeli vizsga. A sikeres vizsga feltétele a vizsgán megszerezhető maximális pontszám 40%-ának elérése külön-külön mindkét programozási nyelvből.
A tárgyból elővizsgát tartunk, amelyen bármely, a tárgyból vizsgára bocsátható hallgató (lásd a g. pontot) részt vehet. Emellett -- az MSc képzésre jelentkezők érdekében -- a vizsgaidőszak decemberi részében még egy második vizsgaalkalmat is kitűzünk.
Jó (4) megajánlott jegyet kap az, aki a félévközi követelmények teljesítése mellett mindkét programozási nyelvből bejut a létraversenybe, és a házi feladatát sikeresen megvédi az elővizsgán. Jeles (5) megajánlott jegyet kap az, aki emellett mindkét 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).

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

A félévvégi osztályzatban a vizsgá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%.

j) 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 vizsgá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 vizsgá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 nincs lehetőség. A nagyzárthelyi pótlására, illetve javítására a szorgalmi időszak utolsó előtti, vagy azt megelőző heteiben (a pótzárthelyin), továbbá a pótlási időszakban (a pótpótzárthelyin) adunk lehetőséget. A házi feladatok pótlása a pótlási időszak végéig lehetséges.
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
Számítástudományi és Információelméleti Tanszékdr. Szeredi Péterdocens
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.