7.dia Objektumorientált tervezési alapelvek Flashcards
(17 cards)
Statikus kódelemzés fogalma
A programkód elemzése annak futtatása nélkül. Kereshetünk hibákat vagy ellenőrízhetjük, hogy a kód megfelel-e a szabványoknak.
Példák statikus kódelemző eszközökre
Statikus kódelemző: Statikus kódelemzést véző eszköz.
Pl.:
C# : InferSharp, Roslyn Analyzers, Roslynator
C++ : Cppcheck
Java : Checkstyle
Python : Pylint
Több nyelvet támogató eszközök : Coala, Infer, MegaLinter, PMD, Semgrep
(PMD - IDE-kben pluginokkal)
A DRY elv
Ne ismételd magad! - Don’t repeat yourself!
Ismétlések fajtái:
- Kényszerített ismétlés : A fejlesztők úgy érzik, hogy nincs más választás, a környezet úgy tünik, hogy megköveteli.
- Nem szándékos ismétlés : A fejlesztők nem veszik észre.
- Türelmetlen ismétlés : A fejlesztő lusta, és az ismétlés tünik a könnyebbik útnak.
- Fejlesztők közötti ismétlés : Egy csapatban is megeshet.
Kódismétlés : Azonos forráskódrész, amely egynél többször fordul elő egy programban.
- Reprezentációs ismétlés : Külső API-kból vagy adatforrásokból származó ismétlés.
PMD támogatás: (Copy and Paste Detector) CPD
Finding duplicated code with CPD (C/C++, C#, ECMAScript, Java, Kotlin, Python)
Intellij IDEA: Analyze duplicates
Információ ismétlés az is, ha ki lehet számítani valamit mégis megismételjük:
pont_helye - másik_pont_helye - !(távolságuk) (Mondjuk néha a teljesítmény érdekében tárolhatunk ilyet.)
A KISS elv
Keep it simple, stupid
Egyszerűségre való törekvés.
A YAGNI elv
Nem lesz rá szükség! - You Aren’t Gonna Need It!
(XP alapelv)
Csak akkor implementálj valamit, ha szükség van rá, nem akkor, ha úgy gondolod. Hiszen ez kötséges.
Olyan képességekre vonatkozik amely feltételes lehetőség támogatását teszik lehetővé, és nem arra, hogyha a módosítását próbáljuk könnyíteni.
Csatoltság fogalma
Egy szoftvermodul függésének mértéke egy másik szoftvermodultól.
Tehát azt írja le, hogy a kapcsolatuk mennyire szoros.
Laza és Szoros csatoltság fogalma
Szoros csatoltság:
Növeli a bonyolultságot, és nehezíti a kód módosítását és karbantartását. Nem teszi lehetővé az újrafelhasználhatóságot.
Laza csatoltság:
Lehetővé teszi a nyitva zárt elvnek megfelelő kód írását.
Kiterjeszthető és karbantartható kód jön létre.
Lehetséges a párhuzamos fejlesztés.
Demeter Törvénye
Don’t talk to strangers!
Egy objektumnak ne legyen hozzáférése közvetett módon más osztályok mezőihez és műveleteihez.
Class form, Object form
GoF alapelvek
2 alapelv:
Interfészre programozzunk, ne implementációra.
Részesítsük előnyben az objektum-összetételt az öröklődéssel szemben.
Öröklés és objektum-összetétel
Saját megfogalmazásban:
Az öröklés túl szoros.
Objektum összetétel:
A másik osztály megkap egy osztály objektumot, és nem örökli a műveleteket. Azon az objektumon hívja a saját műveleteit.
egyszeres felelősség elve (SOLID alap elvek)
Egy felelősség egy ok a változásra. Ha egy felelőssége változik elronthatja a többit is.
Egy osztálynak csak egy oka legyen a változásra.
Később így fogalmazták meg: Egy modul egy, és csak egyetlen aktornak van alárendelve. Emberekhez köthető műveletek is legyenek elválasztva (Könyvelő, Bérügyi osztály…).
nyitva zárt elv (SOLID alap elvek)
A szoftver entitások (osztályok, modulok, függvények…) legyenek bővíthetők de ne legyenek módosíthatóak.
Nyitott bővítésre: Modul viselkedése legyen kiterjeszthető.
Zárt módosításra: A bővítés ne változtassa a forrás- vagy bináris kódot.
Liskov-féle helyettesítési elv (SOLID alap elvek)
Ha egy típus egy másik leszármazottja, akkor a leszármazott típusban mindenhol használható a másik típus is.
(Téglalap - Négyzet)
Interfész szétválasztási elv (SOLID alap elvek)
A vastag interfészekkel (sok barát, függvény) foglalkozik.
Ezek kényszerítik a klienseket olyan metódusok használatára amelyeket nem használnak. (Nyomtató példa.)
Ha egy ilyen interfésszel rendelkezik az osztály, akkor nem lesznek koherensek. Több különböző klienst szolgálnak ki.
Függőség megfordítási elv (SOLID alap elvek)
Magas szintű modulok ne függjenek alacsony szinű moduloktól, mindkettő absztraciótó függjön. Az absztrakció pedig ne függjön részletektől, hanem fordítva.
Függőség befecskendezés
A vezérlés megfordítása nevű architekturális minta alkamazásának egy speciális esete, amely lazán csatoltá teszi a kódot..
Vannak keretrendszerek amik ezt más kódra bízzák.
Objektumok függhetnek egymástól és ez a kapcsolat tranzitív.
Függőség: A kliens a feladatának elvégzéséhez egy szolgáltatásra van szüksége.
Függő: Maga a kliens objektum.
Objektum gráf: Függő objektumok és függőségeik összessége.
Befecskednezés: Egy kliens függőségeinek megadását jelenti.
DI konténerek: Program könyvtár, amely befecskednez.
Tiszta DI: DI konténer nélküli alkalmazása az elvnek.
Függőség befecskendezés Javában
Szabványos annotációkat biztosít hozza : Jakarta Dependency Injection.
Keretrendszerek:
Dagger, Spring Framework