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ó    

    Objektumorientált szoftvertervezés

    A tantárgy angol neve: Object-Oriented Software Design

    Adatlap utolsó módosítása: 2017. június 21.

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

    Mérnök informatikus szak, BSc képzés

    Szoftverfejlesztés szakirány

     

    Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
    VIIIAC00 5 2/1/0/v 4  
    3. A tantárgyfelelős személy és tanszék Dr. Simon Balázs,
    A tantárgy tanszéki weboldala https://www.iit.bme.hu/targyak/BMEVIIIAC00
    4. A tantárgy előadója

    Dr. Simon Balázs, adjunktus, Irányítástechnika és Informatika Tanszék 

    Dr. Goldschmidt Balázs, docens, Irányítástechnika és Informatika tanszék

     

    5. A tantárgy az alábbi témakörök ismeretére épít
    • Szoftvertechnológia
    • Szoftvertechniák
    • C++, Java és C# programozás
    • Tervezési minták
    6. Előtanulmányi rend
    Kötelező:
    ((Szakirany("AMINszoftfejlAUT", _) VAGY
    Szakirany("AMINszoftfejlIIT", _) VAGY
    Szakirany("AMINszoftfejlMIT", _) VAGY
    Szakirany("AMIrendszfejl", _) VAGY
    Szakirany("AMIrendszterv", _) VAGY
    Szakirany("AMIszoft", _) VAGY
    Szakirany("VIABI-SOFTWE", _) )




    VAGY EgyenCsoportTagja("Szoftverfejlesztés MIT") )

    ÉS NEM ( TárgyEredmény( "BMEVIIIA371" , "jegy" , _ ) >= 2
    VAGY
    TárgyEredmény("BMEVIIIA371", "FELVETEL", AktualisFelev()) > 0)

    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ő: Szoftvertechnológia (VIIIAB01), Szoftver laboratorium 3 (VIIIAB00)
    7. A tantárgy célkitűzése

    A tárgy célja, hogy a hallgatók elmélyítsék és kibővítsék az objektumorientált tervezéssel kapcsolatos ismereteiket. A tárgy alapvetően a Java nyelvre épít, de egyes esetekben más objektumorientált nyelvekből is hoz példákat (C++, C#, Python).

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

    Előadások:

    1.       Az objektumorientált fogalmak áttekintése. Egységbezárás (encapsulation), többalakúság (polymorphism), öröklés (inheritance), asszociáció, függőség, aggregáció.

    2.       Fontosabb objektumorientált tervezési elvek: Liskov alapelv, dependency inversion, Design by Contract, Demeter elv, stb. Ezek szerepe a tervezésben.

    3.       Követelménykezelés, use-case alapú megközelítés és felelősségszétosztás. Az objektumorientált tervezésben használt alapelvek alkalmazása gyakorlati példákon bemutatva.

    4.       Objektumorientált tervezési heurisztikák az osztályok közötti függőség minimalizálására. Heurisztikák az osztályok tervezésére vonatkozóan.

    5.       További objektumorientált tervezési heurisztikák: asszociációk, öröklődés, szekvencia diagramok. Az egyes heurisztikák előnyei és hátrányai.

    6.       Tipikus tervezési hibák, ezek felismerése és javítása ("büdös kód" osztályon belül, osztályok között). Kapcsolat az objektumorientált tervezési elvekkel és heurisztikákkal.

    7.       Refaktorálás alapelvei, szükségessége, problémái, tervezéssel és hatékonysággal való kapcsolata. Tipikus refaktorálási megoldások (metódusátalakítás, lokális és temporális változók kezelése, felelősségek átalakítása metódusok és osztályok között, belső osztályok használata).

    8.       További refaktorálási megoldások (adatszervezés, adat objektumba rejtése, típuskód kezelése, feltételes kifejezések kezelése, metódushívás egyszerűsítése, generalizálás kérdései). Kapcsolat az objektumorientált tervezési elvekkel és heurisztikákkal.

    9.       Tiszta kód (clean-code) elvek: beszédes nevek, osztályok és függvények mérete, helyes és hibás kommentezés, objektumok és adatstruktúrák, hibakezelés, konkurencia kezelés.

    10.   API tervezési elvek, az API tervezés folyamata. API dokumentálása, inicializálás, paraméterlisták hossza, testreszabás, kényelmi függvények, kivételek, tesztelés.

    11.   Az elosztott objektumorientáltság problémái: memóriakezelési problémák, hálózati problémák, konkurencia problémák, késleltetés miatti problémák.

    12.   Az egyes elosztott kommunikációs problémák lehetséges megoldási módjai. Példák elosztott kommunikációra: SOAP, REST

    13.   Konkurens és párhuzamos minták: szinkronizáció (kritikus szakasz, várakozás, szálak közötti jelzés, publikus interfész), kontextus kezelési minták

    14.   További konkurens és párhuzamos minták: kérés-válasz kezelésének mintái, eseménykezelési minták, future, reactor, proactor, active object, half-sync/half-async

     

    Gyakorlatok:

    1.       Tervezési példa: objektumorientált modell tervezése szöveges követelmények alapján az objektumorientált tervezési elvek és heurisztikák figyelembe vételével.

    2.       Elemzés: hibásan megtervezett objektumorientált modellek vizsgálata, a hibák megkeresése, lehetséges javítási alternatívák vizsgálata

    3.       Példák hibásan megtervezett API-kra, az API tervezés nehézségei, publikált API-k módosításának problémái

    4.       Példák konkurencia problémákra: szinkronizálás, zárolás, double-checked locking, atomi műveletek kombinálása, szálak indítása

    5.       Csomagkezelő és fordító eszközök (ANT, Maven, Gradle, Bazel), függőségek kezelése, verziózás

    6.       Verziókezelési megoldások, elosztott verziókezelés, Git műveletek: commit, push, clone, pull, checkout, diff.

    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) Előadás és gyakorlat.
    10. Követelmények a. A szorgalmi időszakban:

        A gyakorlatokon a félév során legalább 5 kiszhárthelyi dolgozatot íratunk. Az aláírás feltétele: ezek közül legalább háromnak legalább elégségesnek kell lennie. A kiszárthelyi dolgozatok nem pótolhatók, mert csak a zárthelyik 3/5-ét kell elégségesre teljesíteni.

        A félév során a tananyag gyakorlati elmélyítését szorgalmi feladatok segítik.

    b. A vizsgaidőszakban:
    A fenti módon aláírást szerző hallgatók írásbeli vizsgát tesznek.
    11. Pótlási lehetőségek -
    12. Konzultációs lehetőségek Igény szerint a tárgy hallgatóival egyeztetve.
    13. Jegyzet, tankönyv, felhasználható irodalom
    • Robert C. Martin: Principles of Object-Oriented Design
    • Robert C. Martin: Clean Code, A Handbook of Agile Software Craftsmanship, Prentice Hall, 2008, ISBN-10: 0132350882, ISBN-13: 978-0132350884
    • William J. Brown, Raphael C. Malveau, Thomas J. Mowbray: AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis, Wiley, 1998, ISBN-10 0471197130
    • Martin Fowler, Kent Beck, John Brant, and William Opdyke: Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999, ISBN-10 0201485672
    • Jasmin Blanchette: The Little Manual of API Design, Trolltech, a Nokia company, 2008
    • Matt Gemmell: API Design, http://mattgemmell.com/api-design/
    14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka

    Kontaktóra

    42

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

    10

    Készülés gyakorlatokra

    10

    Készülés kiszárthelyikre

    10

    Önálló tananyag-feldolgozás

    8

    Vizsgafelkészülés

    40

    Összesen

    120

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

    Dr. Simon Balázs, adjunktus, Irányítástechnika és Informatika tanszék 

    Dr. Goldschmidt Balázs, docens, Irányítástechnika és Informatika tanszék

     

    IMSc tematika és módszer

    Az IMSc programban részt vevő hallgatók számára az előadásokon további elmélyülést biztosító irodalmat ajánlunk.

    Az IMSc programban részt vevő hallgatóknak igény szerint tanórán kívüli konzultációs lehetőséget biztosítunk.

    IMSc pontozás

    Az írásbeli vizsgán extra, IMSc feladatot biztosítunk, amelyre az alapfeladatokra elérhető pontszám 30%-át lehet kapni. A plusz feladat csak akkor kerül értékelésre, ha a vizsga alapfeladatai megoldásával a hallgató jeles osztályzatot ért el.

    Az IMSc feladatra kapott pontszám egyenes arányosításával áll elő a tárgyban megszerezhető maximum 20 IMSc pont.

    Az IMSc pontok megszerzése a programban nem résztvevő hallgatók számára is biztosított.