A programozás alapjai 2

A tantárgy angol neve: Programming 2

Adatlap utolsó módosítása: 2023. február 26.

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
VIIIAA03 2 2/0/2/f 6  
3. A tantárgyfelelős személy és tanszék Dr. Somogyi Péter,
A tantárgy tanszéki weboldala http://infocpp.iit.bme.hu
4. A tantárgy előadója Dr. Somogyi Péter egyetemi docens, Irányítástechnika és Informatika Tanszék
5. A tantárgy az alábbi témakörök ismeretére épít A C programozási nyelv ismerete
6. Előtanulmányi rend
Kötelező:
(TárgyEredmény("BMEVIEEAA00", "jegy", _) >= 2
VAGY
TárgyEredmény("BMEVIEEA100", "jegy", _) >= 2
VAGY Training.Code=("5N-MGAIN"))

ÉS NEM
(TárgyEredmény("BMEVIIIA114", "jegy", _) >= 2
VAGY
TárgyEredmény("BMEVIIIA114", "felvétel", AktualisFelev()) > 0
VAGY
TárgyEredmény("BMEVIIIA115", "jegy", _) >= 2
VAGY
TárgyEredmény("BMEVIIIA115", "felvétel", AktualisFelev()) > 0
VAGY
TárgyEredmény("BMEVIIIAA00", "jegy", _) >= 2
VAGY
TárgyEredmény("BMEVIIIAA00", "felvétel", AktualisFelev()) > 0)

ÉS (Training.Code=("5N-A8") VAGY Training.Code=("5NAA8"))

VAGY EgyenCsoportTagja("Kreditpótlás_2023/24/2")

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

7. A tantárgy célkitűzése

A tárgy alapvető célja, hogy alapozó tárgyként folytassa számítógépes problémamegoldás módszereinek és alapvető eszközeinek előző félévben megkezdett megismertetését olyan szinten, hogy azt a hallgatók további tanulmányaik során képesek legyenek hatékonyan alkalmazni. Ezen félév alapvető célkitűzése, hogy mélyítse a programozási és algoritmizálási alapismereteket, megismertesse a nagyméretű programozási feladatok megoldásának lépéseit, és bevezessen az objektum-orientált programozásba. Célkitűzését a tárgy az előző félévben megszerzett C nyelvi tudásra alapozva, a C++ nyelv megismertetésével éri el. A laborgyakorlatok anyaga folyamatosan követi az előadások tematikáját, azok megértését, elmélyítését támogatja.

8. A tantárgy részletes tematikája

C++, mint a C javított változata

  1. Előadás: Az előző félévi anyag rendszerező összefoglalása. C nyelv „javításai”: típusértékű struct, enum, bool típus. Függvényhívás alacsony szinten. Prototípusok szükségessége, referenciatípus bevezetése. Függvényhívás balértékként. Bevezetés a C++ I/O használatába.
    Labor
    : Alapvető operációs rendszer ismertek összefoglalása. Fejlesztő környezet bemutatása.
  1. Előadás: Függvénynév túlterhelése (overload). Alapértelmezett (default) függvényargumentumok. Makrók kiváltása inline függvénnyel. Névterek, láthatóság. Memória allokáció és kivételkezelés röviden.
    Labor
    : const és referencia gyakorlása. C-ben írt kód átírása C++ eszközeivel (cin, cout). Függvény túlterhelés és inline használata.

Objektum-orientált programozás alapjai a C++ nyelv bemutatásával

  1. Előadás: Objektum-orientált programozás alapfogalmai, elvei, objektum fogalma. Osztály, egységbezárás, láthatóság és információrejtés fogalma. Tagváltozók és tagfüggvények. Getterek és setterek. A this pointer. Konstruktor, destruktor.
    Labor
    : Több modul használata. Memória allokáció gyakorlása. Memóriaszivárgás (memory leak) felfedezése, okainak keresése, megszüntetése.
  1. Előadás: Konstruktorok és destruktorok. Dinamikus adattagokat karbantartó osztályok. Másoló konstruktor, értékadás. Tagváltozók inicializálása. Konstans és statikus tagok.
    Labor
    : Egyszerű, pointert nem tartalmazó osztályok megvalósítása. getter/setter függvények gyakorlása. operator<< túlterhelése. Tesztelést segítő eszközök használata.
  1. Előadás: A láthatóság enyhítése: friend mechanizmus. Operátorok túlterhelésének fogalma. Operátorok túlterhelésének megvalósítása tagfüggvénnyel és globális függvénnyel. Megkötések.
    Labor
    : Dinamikus adattagokat karbantartó osztályok. Másoló konstruktor, értékadás gyakorlása.
  1. Előadás: Az öröklés szerepe az objektumorientált programozásban. Öröklés, származtatott osztály, alaposztály. Az öröklés hatása a láthatóságra. Konstruktorok és az öröklés.
    Labor
    : Komplexebb objektum (pl. dinamikus tömb) megvalósítása. Operátorok túlterhelésének gyakorlása.
  1. Előadás: Behelyettesíthetőség. Virtuális függvények, absztrakt osztályok. Korlátozó öröklés. Virtuális destruktorok. Heterogén gyűjtemények.
    Labor
    : Egyszerű öröklés gyakorlása. Öröklés hatása láthatóságra és túlterhelésre.
  1. Előadás: Többszörös öröklés, virtuális alaposztályok. Konstruktorok és destruktorok automatikus feladatai. Perzisztencia fogalma és megvalósítása.
    Labor
    : Heterogén kollekcióhoz kapcsolódó feladatok.
  1. Előadás: Konverziós operátorok. Típuskonverziók, kivételkezelés.
    Labor
    : Többszörös örökléshez és perzisztenciához kacsolódó feladatok.
  1. Előadás: Generikus szerkezetek jelentősége. Függvény- és osztálysablonok.
    Labor:
    Típuskonverziók, konverziós operátorok gyakorlása és kivételkezelés gyakorlása.
  1. Előadás: Standard Template Library (STL) bevezetése. Bonyolultságelméleti megfontolások.
    Labor:
    Generikus adatszerkezetek és algoritmusok gyakorlása.
  1. Előadás: STL tárolók és algoritmusok, iterátorok. Objektumorientált szoftvertervezési alapok. Tervezési példa.
    Laborban
    : STL tárolók és algoritmusok gyakorlása.
  1. Előadás: Komplex példa bemutatása. Kitekintés a nyelvhez kapcsolható eszközökre.
    Labor
    : Gyakorlás. Házi feladat konzultáció, feladatbeadás.
  1. Előadás: Összefoglalás. Tervezési példa.
    Labor
    : Házi feladat bemutatása
9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium)

Órarendben ütemezett módon heti egy alkalommal előadást tartunk a teljes évfolyamnak. A laboratóriumi foglalkozásokat 12-20 fős számítógépes laborokban tartjuk. A csoport- és terembeosztást külön hirdetményben tesszük közzé a tárgy weboldalán. Ugyanitt érhető el az otthoni gyakorláshoz ajánlott szoftverkörnyezet leírása, valamint a tárgyhoz kapcsolódó segédanyagok, példák és hirdetmények. A számonkérések papíron, írásban történnek, kivéve a kis- és nagyfeladatokat.

10. Követelmények

A félév végi jegy megszerzésének feltételei az alábbiak:

  • Jelenlét: az órákon (előadás, labor) való rendszeres részvétel. A hiányzások megengedett mértéke 30%, aminek mindkét óratípus esetében külön-külön is teljesülnie kell.
  • Szintfelmérő értékelés: a laborgyakorlatok sikeres teljesítéséhez szükséges előzetes tudás meglétét ellenőrző feladattal és az ehhez kapcsolódó ellenőrző dolgozattal ellenőrizzük. Az előre kiadott feladatot otthoni felkészülés keretében kell megoldani, majd határidőre elektronikusan benyújtani az erre a célra létrehozott feladatbeadó rendszerben, ami automatikus visszajelzést ad a feladat elfogadásáról. Ezt követően a laborgyakorlat elején a feladathoz kapcsolódó rövid 2-3 kérdésből álló írásbeli dolgozattal ellenőrizzük a laborgyakorlat elvégzéséhez szükséges önálló tudás meglétét. A feladat illetve a dolgozat az adott labor előadáson már bemutatott anyagával kapcsolatos. Minden határidőre beadott és elfogadott feladattal valamint minden sikeresen teljesített ellenőrző dolgozattal 1-1 pont szerezhető. A félév során 12 ellenőrző feladat kiadására és ehhez kapcsolódóan 12 ellenőrző dolgozat megírására kerül sor. A tárgy teljesítésének szükséges feltétele, hogy a szintfelmérő értékeléssel szerzett pontok elérjék félév során megszerezhető pontszámok lefelé kerekített 2/3-át, azaz 16-ot.
  • Részteljesítmény értékelés: a hallgatók félévközi folyamatos haladásának regisztrálása érdekében beszámoló dolgozatot iratunk és nagy házi feladatot adunk ki.
    • Beszámoló dolgozat: A félév során összesen 3 alkalommal rövid (15-20 perces) beszámoló dolgozatot iratunk. A 3 beszámoló dolgozat közül a két legnagyobb pontszámú dolgozatot vesszük figyelembe. Ezek pontszáma külön-külön el kell, hogy érje a megszerezhető pontszám 40%-át, azaz 4 pontot. A meg nem írt beszámoló pontszámát nullának tekintjük. Az írásos beszámolók ütemezését a tantárgy weboldalán tesszük közzé a félév elején.
    • Nagy házi feladat: minden hallgatónak egy egyéni nagy házi feladatot kell megoldania, önálló munkával. A nagy házi feladatot a 6. héten adjuk ki, a megoldást pedig a 13. héten kell beadni. A laborvezetők a megoldásokhoz folyamatos konzultációt biztosítanak. A folyamatos haladást pedig részhatáridők kitűzésével ösztönözzük.
      A tárgy teljesítésének szükséges feltétele az elfogadott nagy házi feladat.
  • Összegző értékelés: a szorgalmi időszak alatt kettő alkalommal, az évfolyam terhelési táblázata szerinti időpontban nagy zárthelyi dolgozatot íratunk. Ezekre külön-külön elfogadási kritérium nincs. Összpontszámuk azonban el kell, hogy érje a két zárthelyire szerezhető összpontszám 50%-át, azaz 40 pontot. A meg nem írt zárthelyi dolgozat pontszámát nullának tekintjük.

A félévközi jegy a nagy zárthelyikre kapott pontszámok (2*40 pont), valamint a két legjobban sikerült beszámoló pontszámának (2*10 pont) összege alapján számítható ki. Ha az előzőekben részletezett minimumkritériumok teljesülnek, akkor a félév végi jegy legalább elégséges.

Extra pontok:

A nagy házi feladat időben leadott és elfogadott részfeladataiért részhatáridőnként rendre 1, 1, 2, 2 plusz pont jár, amely a fent részletezett pontszámhoz adódik hozzá. Ezek a plusz pontok abban az esetben számítanak, ha a feladat véghatáridőre beadásra kerül, és az ekkor beadott változat elfogadott.

A felkészülést egyéni szorgalmi feladatok is segítik, melyek megoldása nem kötelező. A határidőre és sikeresen megoldott szorgalmi feladatokkal további pontok szerezhetők, amelyeket a félévközi jegy kialakításánál pozitívan veszünk figyelembe, amennyiben a minimum feltételek teljesültek. Szorgalmi feladatokkal legfeljebb 7 többletpont szerezhető.

A határidők pontos betartásával és a szorgalmi feladatokkal összesen 6+7=13 extra pont szerezhető. 

11. Pótlási lehetőségek

 A jelenlét nem pótolható: a pótlást magában foglalja a megengedett hiányzás (30%).

A laborgyakorlatokon írt ellenőrző feladat és a hozzá kapcsolódó ellenőrző dolgozat pótlólagos megírására nincs lehetőség: a pótlást magában foglalja az, hogy az elérhető pontszám 2/3-a a minimálisan elérendő pontszám.

A laboratóriumi gyakorlatokon íratott beszámoló dolgozat pótlólagos megírására nincs lehetőség: a pótlást magában foglalja, az hogy a 3 dolgozatból a 2 legjobban sikerültet vesszük figyelembe.

Nagy zárthelyi pótlására, illetve javítására a pótlási héten van lehetőség. A pótlási héten írt nagy zárthelyit abból az anyagból kell írni, amelyik nagy zárthelyi a félév közben rosszabbul sikerült. Azonos pontszám esetén az második anyagrészből. A pótlási héten írt zárthelyi pontszáma ennek a zárthelyinek a pontszámát írja felül. Ez a pótlási vagy javítási lehetőség alanyi jogon jár mindenkinek.

A nagy házi feladat pótlólagos beadására csak a szorgalmi időszak végéig (utolsó tanítási napon, 12.00 óráig), különeljárási díj megfizetésével van mód, azon túl a nagy házi feladat nem pótolható.

A megoldások apróbb hibáinak javítására - a laborvezető oktatóval egyeztetett időpontban - a pótlási hét közepéig (csütörtök 12:00 óráig), különeljárási díj megfizetésével van mód, azon túl a nagy házi feladat nem javítható. A pótlási héten már csak olyan feladatok és/vagy dokumentációk javíthatók, amelyek hiányosság, vagy működési hiba miatt kerültek elutasításra.

12. Konzultációs lehetőségek
A tárgy előadóival és laborvezetőivel egyeztetett módon.
13. Jegyzet, tankönyv, felhasználható irodalom

Bármely az objektum-orientált programozással és a C++ programozási nyelvvel foglalkozó könyv vagy jegyzet használható.

Jegyzet:

  • A tárgy weboldalán elérhető elektronikus jegyzetek: http://infocpp.iit.bme.hu

Ajánlott irodalom:

  • Benedek Zoltán - Levendovszky Tihamér: Szoftverfejlesztés C++ nyelven (SZAK, 2007)
  • B. Stroustrup: A C++ programozási nyelv (Kiskapu, 2001
  • Kondorosi Károly - László Zoltán - Szirmay-Kalos László: Objektum-orientált szoftverfejlesztés (CompuerBooks, 2004)
  • Benkő Tiborné - Poppe András: "Együtt könnyebb a programozás" sorozat: Objektum-orientált C++ (CompuerBooks, 2004)
  • Szeberényi Imre: Bevezetés a UNIX op. rendszerbe (oktatási segédlet, 1998)
14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka

Kontakt óra

56

Felkészülés előadásokra

14

Felkészülés laborra

28

Felkészülés zárthelyikre

43

Felkészülés beszámoló dolgozatokra

9

Házi feladat elkészítése

30

Kijelölt írásos tananyag elsajátítása

0

Vizsgafelkészülés

0

Összesen

180

15. A tantárgy tematikáját kidolgozta

Név:

Beosztás:

Tanszék, Int.:

dr. Szeberényi Imre

egyetemi docens

BME IIT

VIK programozás oktatók munkaközössége.

IMSc tematika és módszer

Az IMSc-s hallgatók számára külön laborcsoportokat indítunk. (Az előadás a teljes évfolyam számára közös.) Ezekben a csoportokban ugyanazon tananyag és tematika mellett mélyebb, összetettebb feladatok gyakoroltatják ugyanazokat a témaköröket.

Az érdeklődők számára a tárgy keretében tanultak alkalmazását bemutató, illetve a tárgy tananyagán túlmutató szakmai írásokat teszünk közzé a tárgy honlapján. Ezek egyéni elmélyülésre adnak lehetőséget. Feldolgozásukhoz konzultációk keretében segítséget nyújtunk.

A számonkéréseken alkalmazott pontozás és jegyszámítás mindenkinél egységes.

IMSc pontozás

A jeles alsó ponthatára feletti összes többlet pontszámot IMSc pontszámnak számoljuk, a tárgy kreditértékének megfelelően összesen legfeljebb 30 pontot.

A követelményeknél említett írásos beszámolók, nagy zárthelyik, szorgalmi feladatok és nagy házi feladat pontszámok ugyanolyan módon történő számítása mellett további 2×10 pontot lehet szerezni a nagy zárthelyiken választható kiegészítő feladatokkal. A kiegészítő feladatot tartalmazó zárthelyire előzetesen jelentkezni kell. A kiegészítő feladatot csak az alap feladatok 75%-os teljesítése mellett pontozzuk, és az itt megszerzett pontok az aláírás megszerzésére nem használhatók fel.

Az IMSc pontok megszerzése a programban nem résztvevő hallgatók számára is biztosított, azonban a tárgy kreditjének megszerzéséhez kötött.