SOLID
Az objektumorientált programozásban a SOLID egy mozaikszó, amely az öt tervezési alapelv (Single responsibility principle, Open/closed principle, Liskov substitution principle, Interface segregation principle, Dependency inversion principle) kezdőbetűjéből áll, és célja, hogy a szoftvertervezést még érthetőbbé, rugalmasabbá és karbantarthatóbbá tegye. A SOLID-nak nincs közvetlen köze a felelősségek hozzárendelésének általános mintáihoz (General Responsibility Assignment Software Patterns, GRASP). A SOLID alapelvek szülőatyja Robert Cecil Martin amerikai szoftverfejlesztő és -tanácsadó, aki nem csak a Clean Code mozgalom vezérszónoka, hanem többek között az agilis szoftverfejlesztés módszertanát elindító Agile Manifesto egyik eredeti megfogalmazója is. Az elméletét Design Principles and Design Patterns[1][2] című könyvében mutatta be, de mint mozaikszó csak később Michael Feathers révén terjedt el.
Összetevők
[szerkesztés]- Egyetlen felelősség elve – Single Responsibility Principle[3]
- Egy osztály vagy modul csak egyetlen felelősséggel rendelkezzen (azaz: egy oka legyen a változásra).
- Azaz minden elkülönítve is értelmezhető funkció illetve felelősségi kör kezelése kerüljön külön osztályba vagy modulba.
- Nyílt/zárt elv – Open/Closed Principle[4]
- Egy osztály vagy modul legyen nyílt a kiterjesztésre, de zárt a módosításra.
- Azaz a funkcionalitás bővítéséhez ne legyen szükség az osztály forráskódjának módosítására, ehelyett legyen mód leszármazással vagy kompozíción keresztül kiterjeszteni a meglévő implementációt.
- Liskov helyettesítési elv – Liskov substitution principle[5]
- Minden osztály legyen helyettesíthető a leszármazott osztályával anélkül, hogy a program helyes működése megváltozna.
- Azaz garantáljuk, hogy egy adott (akár absztrakt) típussal átvett objektum teljesíti, amit a típustól elvárunk. Azaz típusörökléskor a leszármazottnak továbbra is megegyező módon támogatnia kell a felmenői által biztosított funkciókat. Árnyalja a képet, hogy a Java-világban elterjedt az opcionálisan implementálható metódusok használata, alapvetően az API egyszerűségének megőrzése érdekében. Ilyenkor az interfész technikailag ugyan tartalmazza az adott metódust, ám az implementációknak nem kötelező támogatniuk.
- Interfész elválasztási elv – Interface segregation principle[6]
- Az interfészek szétválasztásának elve: egyetlen kliens se legyen rákényszerítve arra, hogy olyan eljárásoktól függjön, amelyeket nem is használ.
- Ez a gyakorlatban általában azt jelenti, hogy egy átvett paraméter típusa lehetőleg arra legyen specializálva, amilyen művelet(ek)et ténylegesen elvégzünk rajta. Az ilyen célra kialakított legáltalánosabb interfészek gyakran tartalmazzák az „-able” végződést (pl.
Comparable
,Iterable
stb.). - Függőség megfordítási elv – Dependency inversion principle[7]
- A magas szintű modulok ne függjenek az alacsony szintű moduloktól. Mindkettő absztrakcióktól függjön.
- Tehát az alacsonyabb szint legyen egy API megvalósítása, a magasabb szint pedig ezen az API-n keresztül használja.
Jegyzetek
[szerkesztés]- ↑ Robert C. Martin: Getting a SOLID start. objectmentor.com . [2016. december 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. augusztus 19.)
- ↑ Robert C. Martin: Design Principles and Design Patterns. [2015. szeptember 6-i dátummal az eredetiből archiválva].
- ↑ Egy felelősség alapelve Single Responsibility Principle. objectmentor.com . [2015. június 1-i dátummal az [https://hu.wikipedia.org/wiki/Egy_felelősség_alapelve eredetiből archiválva].
- ↑ Open/Closed Principle. objectmentor.com . [2015. szeptember 5-i dátummal az eredetiből archiválva].
- ↑ Liskov Substitution Principle. objectmentor.com. [2015. szeptember 5-i dátummal az eredetiből archiválva].
- ↑ Interface Segregation Principle. objectmentor.com , 1996 [2015. szeptember 5-i dátummal az eredetiből archiválva].
- ↑ Dependency Inversion Principle. objectmentor.com. [2015. szeptember 5-i dátummal az eredetiből archiválva].
Források
[szerkesztés]- letscode.hu: Tiszta kód, 5. rész – A S.O.L.I.D. alapelvek
- Jeszenszky Péter: Objektumorientált tervezési alapelvek, 2018
- Répás Kristóf: A programozás absztrakt alapelveinek megjelenése a SOLID elvekben és a programtervezési mintákban
Fordítás
[szerkesztés]- Ez a szócikk részben vagy egészben a SOLID című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.