|
A következőkben a szoftverfejlesztésben alkalmazott alap-mintákat tárgyaljuk. A cikkben taglalt fogalmak az objektum-orientált világ alapkövei, amelyek nélkül nem lehet megvalósítani az összetettebb mintákat. Öröklődés, asszociáció, aggregáció, kompozíció Az osztályok közötti kód-újrafelhasználás módozatai (szülő-gyermek kapcsolat vagy hivatkozás, tartalmazás). Az általánosítás a hasonló tulajdonságokkal rendelkező osztályok közötti kapcsolatot írja le.
Az asszociáció az osztályok közötti függőséget fejezi ki. A képen egy irányítatlan asszociáció látható, amelynél mindkét osztály 'tud' a másikról. Az irányított asszociáció esetében csak az egyik fél ismeri a másik osztályt, amit nyíllal jelölünk.
Speciális asszociációk: aggregáció és kompozíció Az aggregáció az asszociáció azon változata, amely kifejezi, hogy egy objektum része egy másiknak (példaként: az autó kerekei részei az autónak). Az aggregáció erősebb változata a kompozíció, amely előírja, hogy a rész-objektum csakis egy egészhez tartozhat, és a rész együtt él és hal az egésszel. Az aggregáció esetén több egészhez is tartozhat a rész-objektum, tehát a részen több egész is osztozkodhat.
Függőség Az egyik osztály felhasználhatja a másikat anélkül, hogy köztük asszociációnak minősíthető kapcsolat lenne. Akkor alakulhat ki ilyen jellegű függés, ha például az egyik osztály: - függvényparaméterként kap egy referenciát vagy mutatót a másik osztályra - a másik osztályt példányosítja - a másik osztály statikus tagjára hivatkozik - üzenetet küld a másiknak Példánkban a BaseGameManager osztály addEntity függvénye bemenő paraméterként megkap egy BaseGameEntity* típusú mutatót. 
Adatrejtés - lekérdező / beállító függvények
Az objektum adatainak elérését szabályozza. A közvetlen hozzáférés által okozta gondokat kiszűri, és a karbantartás szempontjából is előnyősebb. Az OO megközelítés egyik ismérve az egységbezárás; az érzékeny adatokat az osztály magába zárja. Közvetlen hozzáférés helyett függvényeket biztosítunk a belső adatok módosítására, kiolvasására, amely biztonságosabbá és ellenőrizhetőbbé teszi az objektum kezelését. Privát metódus Lehetővé teszi, hogy az osztály belső működését elrejtsük a külső osztályok elöl.
Adattár (Constant Data Manager) Központi adattár a konstans adatok tárolására és elérésére. Az osztályok által használt konstans adatokat egy helyen tároljuk, nem szétszórtan az alkalmazásban. Ez megkönnyíti a karbantartást, és átláthatóbbá teszi a kódot.
 Interfész Közös függvény-felületet határoz meg, amit a megvalósító osztályoknak kötelezően implementálniuk kell (hacsak nem absztraktak). A minta segítségével hasonló szolgáltatásokat biztosító objektumok családja hozható létre. 
Absztrakt ős Az interfészhez hasonlóan meghatároz egy megvalósítandó felületet. A lényeges különbség, hogy a leszármaztatott osztályok által közösen használt függvényeket meg is valósítja. Az interfész egyik hátránya, hogy az összes függvényt meg kell valósítani, akkor is, ha minden alosztály ugyanazt az implementációt valósítja meg. Ez felesleges redundanciához, kódismétléshez vezet. Az absztrakt osztály, az interfészhez hasonlóan meghatároz egy megvalósítandó függvényhalmazt – ez azon függvények csoportja, amelyek működésben eltérhetnek a megvalósító osztály igényeire szabottan. Azon függvényeket viszont, amelyeket minden gyermekosztály ugyanúgy implementálna, az absztrakt osztály helyben definiálja – ezzel elkerülve a kódismétélést az osztályhierarchián keresztül.
Konstans objektum (Immutable Object) Az objektum állapota futás közben nem változik. Az adattagok értékét kizárólag az objektum létrehozásakor, a kontruktorban adhatjuk meg. A minta segítségével biztosíthatjuk, hogy egy objektum állapota utólag nem változtatható. Ez a tulajdonság hasznos lehet akkor, ha az objektum párhuzamos, több szálból is elérhető. Megvalósítás: - ne kínáljunk fel beállító metódusokat - tegyük a mezőket véglegessé (C++: const, Java: final) - ezáltal csakis a konstruktorból állíthatók be az érintett adattagok
 Kölcsönös kizárás, mutex, monitor A minta biztosítja, hogy az adott objektum állapota konzisztens maradjon akkor is, ha párhuzamosan több szálból próbáljuk lekérdezni, illetve módosítani. A fejlett programozási nyelvek lehetőséget biztosítanak a biztonságos többszálú elérésre. Az alapelv azonos, de a szintaxis eltérő. A Java esetében a synchronized kulcsszó segítségével tehetjük biztonságossá egy osztály tagfüggvényeinek elérését.
|