close

FOGRASD

Ugrás a navigációhoz Ugrás a kereséshez

Az objektum- orientált tervezésben a GRASP a General Responsibility Assignment Software Patterns (General Responsibility Assignment Software Patterns) rövidítése , amely a „GRASP (objektumorientált tervezés általános felelősségkiosztási szoftvermintái)” rövidítése. Bár úgy gondolják, hogy több mint önmagukban a minták , ezek a szoftvertervezésben ajánlott alkalmazások „jó gyakorlatainak” sorozatát jelentik.

Információs szakértő

A GRASP információs szakértő a felelősségek kijelölésének alapelve. Megmondja például, hogy egy objektum létrehozásáért vagy egy metódus megvalósításáért a felelősséget azt az osztályt kell viselnie, amely ismeri a létrehozásához szükséges összes információt. Ily módon nagyobb kohéziós kialakítást kapunk, és így az információ beágyazott marad (csökkent csatolás).

Probléma
Mi az általános elv a felelősségek objektumokhoz való hozzárendelésénél?
Megoldás
Rendeljen felelősséget az információs szakértőnek.
Előnyök
A beágyazottság megmarad, az objektumok saját információikat használják fel feladataik ellátásához. A viselkedés eloszlik a szükséges információkat tartalmazó osztályok között. Könnyebben érthetők és karbantarthatók.

Alkotó

Az alkotói minta segít azonosítani, hogy ki legyen felelős az új objektumok vagy osztályok létrehozásáért (vagy példányosításáért ) .

Az új példányt annak az osztálynak kell létrehoznia, amely:

  • Rendelkezik az objektum létrehozásához szükséges információkkal, ill
  • Közvetlenül használja az objektum létrehozott példányait, ill
  • Az osztály több példányát tárolja vagy kezeli
  • Tartalmazza vagy hozzáadja az osztályt.

Ennek a mintának az egyik következménye a láthatóság a létrehozott osztály és a létrehozó osztály között. Az egyik előny az alacsony csatlakozás, ami egyszerű karbantartást és újrafelhasználást jelent. A példányosítás az egyik leggyakoribb tevékenység az objektumorientált rendszerekben. Következésképpen hasznos, ha rendelkezünk egy általános elvvel az alkotási felelősségek kijelölésére. Ha jól van leképezve, a kialakítás támogatni tudja a laza csatolást, a nagyobb tisztaságot, a tokozást és az újrahasználatot.

Vezérlő

A vezérlő minta egy olyan minta, amely közvetítőként szolgál egy bizonyos interfész és az azt megvalósító algoritmus között oly módon, hogy az adatokat fogadja a felhasználótól, és az küldi el a különböző osztályokba. nevű módszer.

Ez a minta azt sugallja, hogy az üzleti logikát el kell választani a prezentációs rétegtől a kód újrafelhasználásának növelése és egyúttal nagyobb kontroll érdekében.

A kohézió növelése és a csatolás csökkentése érdekében ajánlatos a rendszereseményeket minél több vezérlőre felosztani.

Magas kohézió és alacsony csatolás

A kohézió és a csatolás fogalma nem kapcsolódik szorosan egymáshoz, azonban javasolt a magasabb fokú kohézió és az alacsonyabb kapcsolási fok. Ily módon kevesebb a függőség, és a rendszerben lévő egyes objektumok céljai meghatározottak.

Magas kohézió

Azt mondja nekünk, hogy az osztály által tárolt információnak konzisztensnek kell lennie, és (amennyire csak lehetséges) kapcsolódnia kell az osztályhoz.

  1. Egybeeső kohézió : A modul több feladatot hajt végre, anélkül, hogy kapcsolat lenne közöttük.
  2. Logikai kohézió : A modul több kapcsolódó feladatot is végrehajt, de futás közben ezek közül csak az egyik kerül végrehajtásra.
  3. Időbeli kohézió : A modul által végzett feladatoknak egyedüli kapcsolata az, hogy "egy időben kell végrehajtani".
  4. Eljárási kohézió : Egy modul feladatai között az egyetlen kapcsolat az, hogy a „termékre” jellemző lépések sorozatának felelnek meg.
  5. Kommunikációs kohézió : A feladatok a „termékre” jellemző lépések sorozatának felelnek meg, és mindegyik ugyanazt az adatot érinti.
  6. Információs kohézió : A modul által végzett feladatoknak saját kiindulópontjuk van, önálló kódolásuk és ugyanazon az adatokon dolgoznak. Tipikus példa: OBJEKTUMOK
  7. Funkcionális kohézió : Ha a modul egy és csak egy feladatot hajt végre, amelynek egyetlen célja van, akkor funkcionális kohézióról beszélünk.

Alacsony csatolás

Az az elképzelés, hogy az osztályok a lehető legkevésbé kapcsolódjanak egymáshoz. Olyan módon, hogy bármelyik módosítása esetén a lehető legkisebb hatás legyen a többi osztályra, elősegítve az újrahasználatot , és csökkentve az osztályok közötti függőséget.

  1. Tartalomcsatolás : Amikor egy modul közvetlenül hivatkozik egy másik modul tartalmára. (Magas szintű nyelveken ez nagyon ritka)
  2. Közös csatolás : Ha két modul ugyanahhoz a globális értékhez fér hozzá (és befolyásolja).
  3. Vezérlés csatolása : Amikor egy modul egy vezérlőelemet küld egy másiknak, amely meghatározza annak végrehajtási logikáját.

Polimorfizmus

Amikor típusfüggő felelősséget kell végrehajtani, akkor a polimorfizmust kell alkalmazni , amikor az alternatívák vagy a kapcsolódó viselkedések típusonként (osztályonként) változnak, a viselkedés felelősségét - polimorf műveletek segítségével - hozzárendelje azokhoz a típusokhoz, amelyekre a viselkedése változó. Rendelje hozzá ugyanazt a nevet a különböző objektumokon lévő szolgáltatásokhoz.

Tiszta gyártás

Tiszta gyártás történik azokban az osztályokban, amelyek nem képviselnek tényleges entitást vagy objektumot a problématartományban, hanem szándékosan hoztak létre a csatolás csökkentésére, a kohézió növelésére és/vagy a kód újrafelhasználásának javítására. Ez a megoldás, ha a tervező egy laza osztályra bukkan, és nincs másik osztálya, amelyben néhány metódust implementálhat. Vagyis ez egy "kitalált" osztály, vagy nem létezik a problémában, de hozzáadásával szerkezetileg javul a rendszer. Ellenjavallatként meg kell említeni, hogy ezzel a mintával visszaélve általában függvény- vagy algoritmusosztályok jelennek meg (amelyeknek csak egy módszerük van).

Közvetlenség

Az indirekt minta lehetővé teszi, hogy csökkentsük a két osztály közötti kapcsolatot, ha a köztük lévő közvetítés felelősségét egy harmadik köztes elemre (osztályra) ruházzuk. Például egy POS-ban (Point of Sale Terminal) használjunk interfész „Adaptert”, amelyen keresztül az ezt végző osztályokkal kialakíthatjuk a különböző fizetési módokat.

Probléma
Hol lehet felelősséget kiosztani az elemek közötti közvetlen összekapcsolás elkerülése/csökkentése és az újrafelhasználás javítása érdekében?
Megoldás
Rendelje hozzá a felelősséget egy objektumhoz, amely közvetít az elemek között.

Védett változatok

A változástól való védekezés alapelve, mégpedig oly módon, hogy mindent, amit egy korábbi elemzésben előre látunk, és amely módosulni fog, azt egy interfészbe csomagoljuk, polimorfizmus segítségével több implementációt hozunk létre, és lehetővé tegyük a jövőbeni implementációkat, hogy ami a lehető legkevésbé kapcsolódik a rendszerünkhöz, hogy amikor a változás bekövetkezik, az legyen a legkisebb hatással ránk. A fejlett Grasp minták része.

Lásd még