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.