Modèle de délégation - Delegation pattern
En génie logiciel , le modèle de délégation est un modèle de conception orienté objet qui permet à la composition d'objets d'obtenir la même réutilisation de code que l' héritage .
En délégation, un objet gère une requête en déléguant à un deuxième objet (le délégué ). Le délégué est un objet assistant , mais avec le contexte d'origine . Avec la prise en charge au niveau du langage de la délégation, cela se fait implicitement en ayant self
dans le délégué une référence à l'objet d'origine (envoi) et non au délégué (objet récepteur). Dans le modèle de délégué, cela est plutôt accompli en passant explicitement l'objet d'origine au délégué, en tant qu'argument d'une méthode. Notez que « délégation » est souvent utilisé de manière lâche pour désigner le concept distinct de transfert , où l'objet expéditeur utilise simplement le membre correspondant sur l'objet destinataire, évalué dans le contexte de l' objet destinataire , et non de l'objet d'origine.
Notez que cet article utilise « objet d'envoi/objet de réception » pour les deux objets, plutôt que « objet de réception/délégué », soulignant quels objets envoient et reçoivent l'appel de délégation, pas l'appel d'origine.
Définition
Dans l'introduction à Gamma et al. 1994, Grady Booch définit la délégation comme :
La délégation est un moyen de rendre la composition aussi puissante pour la réutilisation que l'héritage [Lie86, JZ91]. Dans la délégation, deux objets sont impliqués dans le traitement d'une requête : un objet récepteur délègue des opérations à son délégué . Ceci est analogue aux sous-classes qui reportent les demandes aux classes parentes. Mais avec l'héritage, une opération héritée peut toujours faire référence à l'objet récepteur via la
this
variable membre en C++ etself
en Smalltalk. Pour obtenir le même effet avec la délégation, le récepteur se transmet au délégué pour que l'opération déléguée se réfère au récepteur.
Exemple
Dans l'exemple ci-dessous (utilisant le langage de programmation Kotlin ), la classe Window délègue l' area()
appel à son objet Rectangle interne (son délégué).
class Rectangle(val width: Int, val height: Int) {
fun area() = width * height
}
class Window(val bounds: Rectangle) {
// Delegation
fun area() = bounds.area()
}
Support linguistique
Certains langages ont un support spécial pour la délégation intégré. Par exemple, dans le langage de programmation Kotlin , nous pourrions écrire :
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
Voir également
- Délégation (programmation orientée objet)
- Transfert (programmation orientée objet)
- Programmation orientée aspect
- Délégation (informatique)
- Design pattern
- Motif de façade
- Schizophrénie (programmation orientée objet)
Les références
Liens externes
- Qu'est-ce que la délégation , WikiWikiWeb
- Délégation sur le code Rosetta