Delegációminta
Szoftverfejlesztésben a delegációminta az objektumorientált programtervezési mintákhoz tartozik. Lehetővé teszi egy objektum-összetétel számára, hogy ugyanolyan jellegű kód-újrafelhasználást érjen el, mint például az öröklődés.
Delegálás során egy kérés úgy kezelődik, hogy egy objektum ezt a kérést egy második objektumra (a meghatalmazottra) átruházza. A meghatalmazott az csak egy segédobjektum az eredetinek a környezetével. A delegálás nyelvi szintű támogatásával ezt úgy hajtják végre implicit módon, hogy a "self" kulcsszó segítségével az eredeti (küldő) objektumra utalnak, és nem a megbízottra (a fogadó objektumra). A delegációmintában ezt inkább úgy érik el, hogy az eredeti objektumot közvetlenül a meghatalmazottnak adjuk át, például egy metódus változójaként.[1] Vegyük figyelembe, hogy a "delegálást" gyakran helytelenül használják a továbbítás pontos fogalmaként, amikor a küldő objektum egyszerűen a fogadó objektum megfelelő tagját használja.
Vegyük figyelembe, hogy ez a cikk inkább a "kérések küldését/fogadását" mutatja be két objektum között, és nem az "objektum/meghatalmazott fogadását". Kihangsúlyozza, hogy mely objektumok küldik és fogadják a delegálási hívást, és nem pedig az eredeti hívást.
Definíció
szerkesztés1994-ben Grady Booch a következő definícióját határozta meg a delegációnak:
„A delegálás egy módja annak, hogy az objektum-összetétel ugyanolyan erőteljes legyen újrafelhasználás szempontjából, mint az öröklődés [Lie86, JZ91]. A delegálás során két objektum vesz részt a kérelem kezelésében: a fogadó objektum műveleteket "delegál" a megbízottjának. Ez hasonló az alosztályokhoz, amelyek továbbítják a kérelmeket a szülőosztályokhoz. De öröklés esetén az örökölt művelet mindig utalhat a fogadó objektumra a "this" kulcsszó használatával, például a C++ programozási nyelvben és a "self" kulcsszó használatával a Smalltalkban. A delegálással azonos hatás elérése érdekében a fogadó átadja magát a megbízottnak, hogy a delegált művelet magára a fogadóra utaljon.[2] ” |
Példa
szerkesztésAz alábbi példában (a Kotlin programozási nyelv használatával) a Window osztály delegálja az area()
metódus hívását a belső Rectangle objektumának (a megbízottjának).
class Rectangle(val width: Int, val height: Int) {
fun area() = width * height
}
class Window(val bounds: Rectangle) {
// Delegation
fun area() = bounds.area()
}
Nyelvi támogatottság
szerkesztésEgyes nyelvek külön támogatják a beépített delegációt.[3] Például ha a Kotlin programozási nyelven írnánk a példát:
interface ClosedShape {
fun area(): Int
}
class Rectangle(val width: Int, val height: Int) : ClosedShape {
override fun area() = width * height
}
class Window(private val bounds: ClosedShape) : ClosedShape by bounds
Források
szerkesztés- ↑ Gamma et al. 1994
- ↑ Design patterns : elements of reusable object-oriented software, 14. print., Reading, Mass.: Addison-Wesley, 20. o. (1995. november 2.). ISBN 0-201-63361-2
- ↑ Delegation - Kotlin Programming Language. Kotlin . (Hozzáférés: 2019. március 23.)
Fordítás
szerkesztés- Ez a szócikk részben vagy egészben a Delegation pattern 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 és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
További információk
szerkesztés- What Is Delegation, WikiWikiWeb