Budapest University of Technology and Economics, Faculty of Electrical Engineering and Informatics

    Belépés
    címtáras azonosítással

    vissza a tantárgylistához   nyomtatható verzió    

    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