Csatoltság (számítógépes programozás)

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez

A szoftverfejlesztésben a csatoltság a szoftvermodulok közötti kölcsönös függőség mértéke; annak mértéke, hogy két rutin vagy modul milyen szorosan kapcsolódik egymáshoz; a modulok közötti kapcsolatok erőssége.

Csatoltság és kohézió

A csatoltságot általában a kohézióval állítják szembe. A laza kötés gyakran összefügg a magas kohézióval, és fordítva. A laza kötést gyakran a jól strukturált számítógépes rendszer és a jó tervezés jelének tekinti, és ha magas kohézióval párosul, akkor támogatja a nagyfokú olvashatóság és karbantarthatóság általános céljait. 

Története[szerkesztés]

A csatoltság és a kohézió szoftverminőségi mutatóit Larry Constantine találta ki az 1960-as évek végén egy strukturált tervezés részeként, amely a karbantartási és módosítási költségeket csökkentő "jó" programozási gyakorlatok jellemzőin alapul. A strukturált tervezés, beleértve a kohéziót és a csatoltságot, a Stevens, Myers & Constantine (1974) című cikkben, valamint a Yourdon & Constantine (1979) című könyvben jelent meg, és ez utóbbiak később szabványos kifejezésekké váltak.

Típusai[szerkesztés]

A csatoltság fogalmi modellje

A csatoltság lehet "alacsony" (más néven "laza" és "gyenge") vagy "magas" ("szoros" és "erős") is. A csatoltság néhány típusa, a legnagyobbtól a legkisebb csatoltságig terjedő sorrendben a következő:

Procedurális programozás[szerkesztés]

A modul itt bármilyen alprogramra utalhat, azaz egy vagy több utasításból álló, névvel és lehetőleg saját változónevekkel rendelkező halmazra.

Tartalmi csatoltság (magas)
Tartalmi csatoltságról akkor beszélünk, ha egy modul egy másik modul kódját használja, például egy elágazásnál. Ez sérti az információk elrejtését - az alapvető szoftvertervezési koncepciót.
Közös csatoltság
Közös csatoltságról akkor beszélünk, ha több modul hozzáfér ugyanazokhoz a globális adatokhoz. Ez azonban ellenőrizetlen hibaterjedéshez és előre nem látható mellékhatásokhoz vezethet, ha változtatásokat hajtanak végre.
Külső csatoltság
Külső csatoltságról akkor beszélünk, amikor két modul osztozik egy kívülről előírt adatformátumon, kommunikációs protokollon vagy eszközinterfészen. Ez alapvetően a külső eszközökkel és eszközökkel való kommunikációhoz kapcsolódik.
Vezércsatoltság
A vezércsatoltság azt jelenti, hogy az egyik modul egy másik modul áramlását irányítja azáltal, hogy információt ad át neki arról, hogy mit kell tennie (pl. egy "mit kell tennem" jelzőt ad át).
Bélyegzőcsatoltság (adatszerkezetes csatoltság)
Bélyegcsatoltság akkor fordul elő, amikor a modulok megosztanak egy összetett adatszerkezetet, és annak csak egy részét használják, esetleg különböző részeit (pl. egy teljes rekord átadása egy olyan függvénynek, amelynek csak egy mezőre van szüksége).
Ebben a helyzetben egy olyan mező módosítása, amelyre a modulnak nincs szüksége, a modul által a rekord olvasásának módjának megváltozásához vezethet.
Adatcsatoltság
Adatkapcsolás akkor fordul elő, amikor a modulok megosztják az adatokat például paramétereken keresztül. Minden adat egy elemi darab, és ezek az egyetlen megosztott adatok (pl. egy egész szám átadása egy függvénynek, amely négyzetgyököt számol).

Objektumorientált programozás[szerkesztés]

Alosztálycsatoltság
Egy gyermek és a szülője közötti kapcsolatot írja le. A gyermek kapcsolódik a szülőjéhez, de a szülő nem kapcsolódik a gyermekhez.
Időbeli csatoltság
Ez az, amikor két művelet egy modulba kerül, csak azért, mert történetesen egy időben történnek.

A közelmúltban végzett munkák során számos más csatoltsági koncepciót vizsgáltak és használtak a gyakorlatban alkalmazott különböző modularizációs elvek indikátoraként.

Dinamikus csatoltság[szerkesztés]

Az ilyen típusú csatoltság célja a szoftverrendszer futásidejű kiértékelése. Azzal érveltek, hogy a statikus csatoltsági mérőszámok elveszítik pontosságukat, amikor a dinamikus kötés vagy öröklés intenzív használatával foglalkoznak. A probléma megoldására tett kísérlet során a dinamikus csatoltsági mérőszámokat vették figyelembe.

Szemantikus csatoltság[szerkesztés]

Ez a fajta összekapcsolás figyelembe veszi a szoftveregységek közötti fogalmi hasonlóságokat, például megjegyzések és azonosítók segítségével, és olyan technikákra támaszkodva, mint a latens szemantikus indexelés (LSI).

Logikai csatoltság[szerkesztés]

A logikai csatoltság (vagy evolúciós csatoltság vagy változáscsatoltság) egy szoftverrendszer kiadási előzményeit használja ki a modulok vagy osztályok közötti változásminták megtalálására: pl. olyan entitások, amelyeket valószínűleg együtt módosítanak, vagy a változások sorozata (egy A osztályban bekövetkező változást mindig egy B osztályban bekövetkező változás követ).

A szoros csatoltság hátrányai[szerkesztés]

A szorosan összekapcsolt rendszerek általában a következő fejlődési jellemzőket mutatják, amelyeket gyakran hátránynak tekintenek:

  1. Az egyik modulban bekövetkező változás általában más modulok változásainak hullámhatását idézi elő.
  2. A modulok összeszerelése több erőfeszítést és/vagy időt igényelhet a modulok közötti fokozott függőség miatt.
  3. Egy adott modult nehezebb lehet újrafelhasználni és/vagy tesztelni, mivel a függő modulokat is be kell vonni.

Teljesítményproblémák[szerkesztés]

Akár lazán, akár szorosan összekapcsolt, a rendszer teljesítményét gyakran csökkenti az üzenet és a paraméterek létrehozása, továbbítása, fordítása (pl. marshaling) és az üzenet értelmezése (amely lehet egy karakterláncra, tömbre vagy adatstruktúrára való hivatkozás), amelyek kisebb többletköltséget igényelnek, mint egy bonyolult üzenet, például egy SOAP-üzenet. A hosszabb üzenetekhez több CPU és memória szükséges. A futásidejű teljesítmény optimalizálása érdekében minimalizálni kell az üzenet hosszát, és maximalizálni kell az üzenet jelentését.

Üzenetátvitel költsége és teljesítménye
Mivel egy üzenetet teljes egészében továbbítani kell ahhoz, hogy annak teljes jelentése megmaradjon, az üzenet továbbítását optimalizálni kell. A hosszabb üzenetek továbbítása és fogadása több CPU-t és memóriát igényel. Emellett a vevőknek szükség esetén újra össze kell állítaniuk az üzenetet az eredeti állapotába, hogy teljesen fogadhassák azt. Ezért a futásidejű teljesítmény optimalizálása érdekében az üzenet hosszát minimalizálni, az üzenet jelentését pedig maximalizálni kell.
Üzenetfordítás költsége és teljesítménye
Az üzenetprotokollok és maguk az üzenetek gyakran tartalmaznak extra információkat (pl. csomag, struktúra, definíció és nyelvi információk). Ezért a vevőnek gyakran le kell fordítania egy üzenetet egy finomabb formára azáltal, hogy eltávolítja az extra karaktereket és a szerkezeti információkat és/vagy az értékeket egyik típusból a másikba konvertálja. Bármilyen fordítás növeli a CPU és/vagy a memória terhelését. A futásidejű teljesítmény optimalizálása érdekében az üzenet formáját és tartalmát csökkenteni és finomítani kell, hogy maximalizáljuk a jelentését és csökkentsük a fordítást.
Üzenetértelmezés költsége és teljesítménye
Minden üzenetet a címzettnek kell értelmeznie. Az egyszerű üzenetek, például az egész számok értelmezéséhez nem feltétlenül van szükség további feldolgozásra. Az összetett üzenetek, például a SOAP-üzenetek azonban elemzőt és karakterlánc-transzformátort igényelnek ahhoz, hogy a kívánt jelentésük megjelenjen. A futásidejű teljesítmény optimalizálása érdekében az üzeneteket finomítani és csökkenteni kell az értelmezési többletköltségek minimalizálása érdekében.

Megoldások[szerkesztés]

A csatoltság csökkentésének egyik megközelítése a funkcionális tervezés, amely a funkcionalitás mentén igyekszik korlátozni a modulok felelősségét. A két A és B osztály között akkor nő a csatoltság, ha:

  • A rendelkezik egy attribútummal, amely B-re utal (B típusú).
  • A egy B objektum szolgáltatásait használja.
  • A rendelkezik olyan metódussal, amely hivatkozik B-re (visszatérési típuson vagy paraméteren keresztül).
  • A a B osztály alosztálya (vagy implementálja).

Az alacsony csatoltság olyan kapcsolatra utal, amelyben az egyik modul egy egyszerű és stabil interfészen keresztül lép kölcsönhatásba egy másik modullal, és nem kell foglalkoznia a másik modul belső megvalósításával.

Az olyan rendszerek, mint a CORBA vagy a COM, lehetővé teszik, hogy az objektumok anélkül kommunikáljanak egymással, hogy bármit is tudnának a másik objektum megvalósításáról. Mindkét rendszer lehetővé teszi, hogy az objektumok más nyelven írt objektumokkal is kommunikáljanak.

Csatoltság és kohézió[szerkesztés]

A csatoltság és a kohézió olyan kifejezések, amelyek nagyon gyakran fordulnak elő együtt. A csatoltság a modulok közötti kölcsönös függőségekre utal, míg a kohézió azt írja le, hogy az egy modulon belüli funkciók mennyire kapcsolódnak egymáshoz. Az alacsony kohézió azt jelenti, hogy egy adott modul olyan feladatokat lát el, amelyek nem nagyon kapcsolódnak egymáshoz, és ezért a modul méretének növekedésével problémákat okozhat.

Modul csatoltsága[szerkesztés]

A párosítás a szoftvertervezésben az ehhez a koncepcióhoz kapcsolódó metrikák egy változatát írja le.

Az adat- és vezérlésáramlás csatoltságához:

  • di: a bemeneti adatok paramétereinek száma
  • ci: a bemeneti vezérlő paraméterek száma
  • do: a kimeneti adatok paramétereinek száma
  • co: a kimenet vezérlési paramétereinek száma

Globális csatoltsághoz:

  • gd: az adatként használt globális változók száma
  • gc: a kontrollként használt globális változók száma

Környezeti csatoltsághoz:

  • w: meghívott modulok száma (fan-out)
  • r: a vizsgált modult hívó modulok száma (ventilátor)

Coupling(C) annál nagyobb értéket ad, minél inkább összekapcsolt a modul. Ez a szám körülbelül 0,67 (alacsony csatoltság) és 1,0 (erős csatoltság) között változik.

Például, ha egy modulnak csak egyetlen bemeneti és kimeneti adatparamétere van.

Ha egy modul 5 bemeneti és kimeneti adatparaméterrel, ugyanennyi vezérlőparaméterrel rendelkezik, és 10 globális adatelemhez fér hozzá, 3 fan-in és 4 fan-out értékkel,

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Coupling (computer programming) 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 jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.