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.

Budapesti Műszaki és Gazdaságtudományi Egyetem
Villamosmérnöki és Informatikai Kar

Villamosmérnöki szak

Szabadon választható tantárgy

Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
VITMJV18   4/0/0/v 4  
3. A tantárgyfelelős személy és tanszék Dr. Maliosz Markosz,
4. A tantárgy előadója
 Név: Beosztás: Tanszék, Intézet:
 Dr. Maliosz Markosz adjunktus TMIT
 Dr. Sonkoly Balázs adjunktus TMIT
Dr. Szigeti János kutató BZAKA
5. A tantárgy az alábbi témakörök ismeretére épít

C++ programozási nyelv

6. Előtanulmányi rend
Kötelező:
NEM ( TárgyTeljesítve("BMEVITMAV18") )
ÉS
NEM
(Training.Code=("5N-A8")
VAGY
Training.Code=("5N-M8"))

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:

Kötelező: A tantárgyat nem vehetik fel

  • mérnök informatikus szakosok
  • akik korábban hallgatták a VITMAV18 Haladó C++ programozás tantárgyat
  • villamosmé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)



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

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.

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

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.

9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium)

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

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

12. Konzultációs lehetőségek

Előadások után illetve e-mail-en keresztül folyamatosan, vizsgák előtt igény esetén szervezetten.

13. Jegyzet, tankönyv, felhasználható irodalom
  1. B. Stroustrup: A C++ programozási nyelv (I-II)
  2. Stephen C. Dewhurst: C++ hibaelhárító (C++ Gotchas Avoiding Common Problems in Coding and Design)
  3. Scott Meyers: Hatékony C++ (Effective C++)
  4. Scott Meyers: Még hatékonyabb C++ (More Effective C++)
  5. 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)
  6. Scott Meyers: Effective STL
  7. Andrei Alexandrescu, Herb Sutter: C++ kódolási szabályok
14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
Kontakt óra  56
Félévközi készülés órákra  10
Felkészülés zárthelyire  14
Házi feladat elkészítése  20
Kijelölt írásos tananyag elsajátítása   -
Vizsgafelkészülés  20
Összesen120
15. A tantárgy tematikáját kidolgozta
 Név: Beosztás: Tanszék, Intézet:
 Németh Krisztián egy. tanársegéd TMIT
 Dr. Maliosz Markosz tud. munkatárs TMIT