Címlap Programozás Alapvető tervezési minták
Alapvető tervezési minták PDF Nyomtatás E-mail
Olvasóink értékelése: / 0
ElégtelenKitűnő 
Hírek - Programozás, tervezés
Írta: Carlos   

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.

Inheritance: parent-child relation

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.

Association

 

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.

Aggregation and composition

 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.

 Dependency

 

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.
Constant data manager

 

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.

Interface

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.
Abstract base class

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
Immutable object

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.

Mutex, synchronized

 

 
SEO by Artio

Legfrisebb fórumbejegyzések

Részletek...

Támogatja a Joomla!. Designed by: Joomla Theme, linux hosting. Valid XHTML and CSS.