Szerkesztő:Gengeliczkip/Csatolás (számítógépes programozás)

A Wikipédiából, a szabad enciklopédiából

A szoftverfejlesztésben a csatolás a szoftver modulok 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.

Kapcsolás és kohézió

A csatolást á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 csatolás é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 csatolást, 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 csatolás fogalmi modellje

A csatolás lehet "alacsony" ( más néven " laza " és "gyenge") vagy "magas" ("szoros" és "erős") is. A csatolás néhány típusa, a legnagyobbtól a legkisebb csatolásig 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.

Tartalom összekapcsolása (magas)
Tartalmi csatolásró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 azinformációk elrejtését - az alapvető szoftvertervezési koncepciót.
Közös csatolás
Közös csatolásró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ő csatolás
Külső csatolásró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ércsatolás
A vezércsatolás 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őcsatolás (adatszerkezetes csatolás)
Bélyegcsatolás 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.
Adatcsatolás
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).

Objektum orientált programozás[szerkesztés]

Alosztálycsatolás
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 csatolás
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 csatolási koncepciót vizsgáltak és használtak a gyakorlatban alkalmazott különböző modularizációs elvek indikátoraként.

Dinamikus csatolás[szerkesztés]

Az ilyen típusú csatolás célja a szoftverrendszer futásidejű kiértékelése. Azzal érveltek, hogy a statikus csatolási 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 csatolási mérőszámokat vették figyelembe.

Szemantikus csatolás[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 látens szemantikus indexelés (LSI).

Logikai csatolás[szerkesztés]

A logikai csatolás (vagy evolúciós csatolás vagy változáscsatolás) 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 csatolás 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 csatolás 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 csatolás, 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 csatolás 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.

Csatolás és kohézió[szerkesztés]

A csatolás és a kohézió olyan kifejezések, amelyek nagyon gyakran fordulnak elő együtt. A csatolás 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 csatolása[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 csatolásához:

  • d i : a bemeneti adatok paramétereinek száma
  • c i : a bemeneti vezérlő paraméterek száma
  • d o : a kimeneti adatok paramétereinek száma
  • c o : a kimenet vezérlési paramétereinek száma

Globális csatoláshoz:

  • g d : az adatként használt globális változók száma
  • g c : a kontrollként használt globális változók száma

Környezeti csatoláshoz:

  • 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 csatolás) és 1,0 (erős csatolás) 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,

[[Kategória:Szoftvermetrikák]] [[Kategória:Category:Objektumorientált programozás]]