Belépés címtáras azonosítással
magyar nyelvű adatlap
Haladó C++ programozás
A tantárgy angol neve: Advanced C++ Programming
Adatlap utolsó módosítása: 2015. augusztus 26.
Tantárgy lejárati dátuma: 2016. január 31.
Villamosmérnöki szak
Szabadon választható tantárgy
C++ programozási nyelv
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ó.
Kötelező: A tantárgyat nem vehetik fel
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.
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.
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).
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ó.
Előadások után illetve e-mail-en keresztül folyamatosan, vizsgák előtt igény esetén szervezetten.