K-INFO
HU
EN
Belépés

Haladó C++ programozás

Advanced C++ Programming
A tantárgyleírás hatályossága
Hatályosság kezdete:
—
Hatályosság vége:
—
Tantárgy neve (magyarul, angolul)
Haladó C++ programozás
Advanced C++ Programming
Tantárgykód BMEVITMJV18
Tantárgyjelleg —
Képzési szint —
Kurzustípusok és óraszámok (heti/féléves)
Kurzustípus elmélet gyakorlat laboratóriumi gyakorlat
óraszám (heti) 4 0 0
jelleg (kapcsolt/önálló) — — —
Tanulmányi teljesítmény/értékelés típusa vizsga
Tantárgy kreditértéke 4
Tantárgyfelelős
DR. Maliosz Markosz
beosztás: egyetemi docens
Tantárgyat gondozó oktatási szervezeti egység
—
Kar
Tantárgy weboldala —
Tantárgy elsődleges mintatantervi jellege —
Közvetlen előkövetelmények – Erős előkövetelmény nincs
Közvetlen előkövetelmények – Gyenge előkövetelmény nincs
Közvetlen előkövetelmények – Párhuzamos előkövetelmény nincs
Közvetlen előkövetelmények – Mérföldkő előkövetelmény nincs
Közvetlen előkövetelmények – Kizáró feltétel nincs

Célkitűzés

Tantárgyprogram

1. hét

Tárgy információk, bevezetés. A C++ programozási nyelvi ismereteinek felfrissítése a nyelv elemeinek gyors újratárgyalásával: adattípusok, változók, konstansok, utasítások, hatókör, függvények és paramétereik, matematikai logikai kifejezések, precedencia, mutatók, tömbök, adatszerkezetek. A stream alapú I/O műveletek jellegzetességei, a beolvasás különböző módozatai, hibakezelés.

2. hét

A C++ ismétlés folytatása: Dinamikus memóriafoglalás és hibakezelése. Osztályok fogalma és használata, tagok elérhetősége, konstruktor, destruktor, alapértelmezett tagok. Operátor túlterhelés, öröklődés, friend kulcsszó, virtuális tagfüggvények, absztrakt osztály, polimorfizmus.

3. hét

A C++ ismétlés folytatása: kivételkezelés, típuskonverzió (implicit és explicit), típusellenőrzés, névterek. Sablonok: függvény sablon, osztály sablon.

Tipikus programozói hibák és javításuk. Elgépelésből fakadó hibák, amelyek nem okoznak fordítási hibát. Öröklődésből fakadó hibalehetőségek. Hatékonysági kérdések: kezdeti beállítás vagy értékadás, függvény paraméter átadás, stb.

4. hét

Tipikus programozói hibák és javításuk. Hibaforrások: operátor precedencia, számábrázolás pontossága, osztályok és függvények, kiértékelési sorrend. Hibakezelés és lokális objektumok, C++ automatizmusok.

Helyes kódolási technikák a kivételkezelés alkalmazásakor. Sablonok és friend kulcsszó. Átmeneti objektumok.

5. hét

Megismerkedés a hibakeresővel (debugger), illetve a teljesítményelemzővel (profiler). Szoftvertesztelés, diagnosztika, hibaazonosítás. Program állapotváltozásainak nyomon követése. Töréspontok és lépésenkénti végrehajtás. Az adatszerkezetek vizualizálása. Program futási idő optimalizálása.

6. hét

1. kis zárthelyi dolgozat.

Ritkábban használt nyelvi elemek: const, mutable kulcsszó, bitszintű és logikai konstansok volatile kulcsszó, memóriafoglalás és -felszabadítás felüldefiniálása: operator new/delete [], a .* és ->* operátorok, wchar_t típus és , bitfield manupuláció, explicit konstruktor, rekurzív template.

7. hét

Header file-ok függési rendszere (dependency tree), Makefile használata.

Az STL (Standard Template Library) sablonkönyvtár felhasználói szemszögből: bevezető, koncepció, adattároló struktúrák (konténerek) alaptípusokkal, léptetők (iterátorok), algoritmusok. Vektor és lista.

8. hét

Az STL további elemei részletesen: funktorok, iterátorok, asszociatív tömb (map), halmaz (set), halmazműveletek, rendezési relációk, iterator tags, insert_iterator, output_iterator, input_iterator, algoritmusok konténerekre, intervallumokra: for_each, find_if, search, equal, replace, copy.

9. hét

Az STL sablonkönyvtár tartalommódosító algoritmusai részletesen: aggregátorok (accumulate, inner_product), transform, tömeges felülírás (fill, fill_n; generate, generate_n, generátor függvény), elemek törlése (for ciklus problémái; remove, remove_if; remove_copy, remove_copy_if). STL beépített funktorok. SGI STL kiegészítések. Verziókövetés.

10. hét

A Doxygen automatikus dokumentációkészítő rendszer megismerése: megjegyzések formátuma, kereszthivatkozások a dokumentációban, fontosabb kulcsszavak, konfigurációs fájl készítése, kimeneti formátumok, példák.

2. kis zárthelyi dolgozat.

11. hét

Bevezetés a tervezési mintákat (design pattern) használó objektumorientált szoftvertervezésbe: különböző projektekben rendszeresen visszatérő tervezési kérdések és azok egységes kezelése. Modellezés objektumokkal, alapfogalmak áttekintése. Objektum modell, dinamikus model, funkcionális model.

12. hét

Programtervezési minták – alapötletek. Minták megadása. Megfelelő objektumok keresése, szükséges objektumok kiválasztása, objektumfelületek meghatározása. Minták csoportosítása.

Létrehozási minták – az objektum példányosítás absztrakciói, rendszer függetlenítése az objektumok létrehozási módjától, összetett objektumok felépítésétől, szerkezetétől. Építő minta, gyártófüggvény minta, prototípus minta, egyke minta.

13. hét

Szerkezeti minták áttekintése (osztályokból, objektumokból hogyan alkothatunk nagyobb szerkezeteket): illesztő (adapter) (osztályminta, objektumminta), híd (bridge), összetétel (composite), díszítő (decorator), homlokzat (facede), pehelysúlyú (flyweight), helyettes (proxy).

14. hét

Viselkedési minták áttekintése (az algoritmusok és felelősségek hozzárendelése az objektumokhoz, az objektumok közötti kommunikációt is leírják): felelősséglánc, parancs (command), bejáró (iterator), közvetítő (mediator), emlékeztető (memento), megfigyelő (observer), állapot (state), stratégia (strategy), látogató (visitor).

Tervezési minták összefoglalása, egy esettanulmány bemutatása. Gyakorló feladatok.

Elővizsga.

A tárgy célkitűzése, hogy elmélyítse, kibővítse a hallgatók programozásbeli jártasságát általában, illetve speciálisan a C++ programozási nyelvvel kapcsolatban; továbbá, hogy megismertesse a hallgatókat a helyes kódolást elősegítő eszközökkel.

Tanulmányi eredmények

Ez a tantárgy a KKK rendeletben meghatározott, következő kompetenciák fejlesztését szolgálja:

Tudás

Nincsenek rögzített tanulási eredmények.

Képességek

Nincsenek rögzített tanulási eredmények.

Attitűd

Nincsenek rögzített tanulási eredmények.

Autonómia és felelősség

Nincsenek rögzített tanulási eredmények.

Oktatási módszertan

Előadás, melyben a hagyományos táblára írást és fóliavetítést egy C++ fordító használatának kivetítése is kiegészíti, így mutatva meg a példák működését, és teremtve kapcsolatot az elmélet és a gyakorlat között. Az oktatás hangsúlyos része az önálló munka, melyet kis és nagy házi feladatok formájában adunk ki és kérünk számon (lásd a következő pontot).

Tanulástámogató anyagok

Online források
B. Stroustrup: A C++ programozási nyelv (I-II)Stephen C. Dewhurst: C++ hibaelhárító (C++ Gotchas Avoiding Common Problems in Coding and Design)Scott Meyers: Hatékony C++ (Effective C++)Scott Meyers: Még hatékonyabb C++ (More Effective C++)Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Programtervezési minták – Újrahasznosítható elemek objektumközpontú programokhoz (Design Patterns: Elements of Reusable Object-Oriented Software)Scott Meyers: Effective STLAndrei Alexandrescu, Herb Sutter: C++ kódolási szabályok

A tantárgy teljesítéséhez ajánlott előzetes ismeretek

Tudás típusú kompetenciák
(azon előzetes ismeretek összessége, amelyek megléte nem kötelező, de a tantárgy eredményes teljesítését nagyban elősegíti)
C++ programozási nyelv
Képesség típusú kompetenciák
(azon előzetes képességek és készségek összessége, amelyek megléte nem kötelező, de a tantárgy eredményes teljesítését nagyban elősegíti)
nincs
Ajánlott (nem kötelező) előzetesen megszerzendő kompetenciák
(azon ajánlott (nem kötelező) előzetesen megszerzendő kompetenciák összessége, amelyek jelentősen hozzájárulnak a tantárgy eredményes teljesítéséhez)
C++ programozási nyelv
Általános szabályok
Követelmények: A szorgalmi időszakban: 2 db kis zárthelyi dolgozat. Követelmény: mindkét kis zárthelyi legalább elégségesre (2) teljesítése, vagy sikeres pótzárthelyi.Kis házi feladatok. A félév során 12 kis házi feladatot osztunk ki, melyek közül legalább 6 helyes megoldásának beadása a követelmény.Nagy házi feladat. A félév során egy darab nagy házi feladatot osztunk ki, amely helyes megoldásának beadása a követelmény.A vizsgaidőszakban: írásbeli vizsga c.       Elővizsga: az utolsó órán. Pótlási lehetőségek: Mindkét kis zárthelyi dolgozat a szorgalmi időszakban egy alkalommal a pótzárthelyin pótolható. Egy sikertelen (pót)zárthelyi a pótlási héten különeljárási díj ellenében egy további alkalommal pótolható. A nagy házi feladat különeljárási díj ellenében a pótlási héten pótolható.
Teljesítményértékelési módszerek
Szorgalmi időszakban végzett teljesítményértékelések részletes leírása

Nincs megadva részletes értékelés.

Szorgalmi időszakban végzett teljesítményértékelések részaránya

Nincs megadva részarány.

Vizsgaidőszakban végzett teljesítményértékelések részletes leírása

Nincs megadva részletes értékelés.

Vizsgarészek részaránya

Nincs megadva részarány.

Érdemjegy megállapítása

Nincs megadva érdemjegy határ.

Jelenléti és részvételi követelmények

Nincs megadva jelenléti követelmény.

Javítás, ismétlés és pótlás különös szabályai

Nincs megadva.

Rövid leírás

Nincs megadva.

Részletes leírás

Nincs megadva.

Ajánlott tantárgyak
Kötelező: A tantárgyat nem vehetik fel mérnök informatikus szakosokakik korábban hallgatták a VITMAV18 Haladó C++ programozás tantárgyatvillamosmérnök szakosok közül, akik a 'A Programozás alapjai 2' tantárgyat VIAUAA00 tantárgykóddal hallgatták (2014-től felvettek)
A tantárgy elvégzéséhez szükséges tanulmányi munka

Nincs megadva munkaidő bontás.

Tantárgykövetelmények hatályossága
Tantárgykövetelmények hatályosságának kezdete:
—
Tantárgykövetelmények hatályosságának vége:
—
Tantervi elhelyezés

Nincsenek rögzített tantervi elhelyezések ehhez a tárgyverzióhoz.