En ingeniería de software , el patrón de delegación es un patrón de diseño orientado a objetos que permite que la composición de objetos logre la misma reutilización de código que la herencia .
En la delegación, un objeto maneja una solicitud delegando en un segundo objeto (el delegado ). El delegado es un objeto auxiliar , pero con el contexto original . Con el soporte a nivel de idioma para la delegación, esto se hace implícitamente haciendo que self
en el delegado se haga referencia al objeto original (envío), no al delegado (objeto receptor). En el patrón de delegado, esto se logra pasando explícitamente el objeto original al delegado, como argumento de un método. [1] Tenga en cuenta que "delegación" se utiliza a menudo de forma vaga para referirse al concepto distinto de reenvío, donde el objeto de envío simplemente usa el miembro correspondiente en el objeto de recepción, evaluado en el contexto del objeto de recepción , no el objeto original.
Tenga en cuenta que este artículo utiliza "objeto de envío / objeto de recepción" para los dos objetos, en lugar de "objeto de recepción / delegado", enfatizando qué objetos envían y reciben la llamada de delegación, no la llamada original.
Definición
En la Introducción a Gamma et al. 1994, Grady Booch definió la delegación como:
La delegación es una forma de hacer que la composición sea tan poderosa para su reutilización como la herencia [Lie86, JZ91]. En la delegación, dos objetos están involucrados en el manejo de una solicitud: un objeto receptor delega operaciones a su delegado . Esto es análogo a las subclases que difieren las solicitudes a las clases principales. Pero con la herencia, una operación heredada siempre puede hacer referencia al objeto receptor a través de la variable de este miembro en C ++ y self en Smalltalk. Para lograr el mismo efecto con la delegación, el receptor se pasa a sí mismo al delegado para que la operación delegada se refiera al receptor. [2]
Ejemplo
En el siguiente ejemplo (usando el lenguaje de programación Kotlin ), la clase Window delega la area()
llamada a su objeto Rectangle interno (su delegado).
class Rectangle ( val width : Int , val height : Int ) { área de diversión () = width * height } class Window ( val limits : Rectangle ) { // Área de diversión de delegación () = límites . area () }
Ayuda de idioma
Algunos lenguajes tienen incorporado un soporte especial para la delegación. [3] Por ejemplo, en el lenguaje de programación Kotlin , podríamos escribir:
interfaz ClosedShape { área de diversión (): Int } class Rectangle ( val width : Int , val height : Int ) : ClosedShape { anular el área de diversión () = width * height } class Window ( límites de valores privados : ClosedShape ) : ClosedShape por límites
Ver también
Referencias
- ^ Gamma y col. 1994
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Patrones de diseño: elementos de software orientado a objetos reutilizable (14. print. Ed.). Reading, Mass .: Addison-Wesley. pag. 20 . ISBN 0-201-63361-2.
- ^ "Delegación - Lenguaje de programación Kotlin" . Kotlin . Consultado el 23 de marzo de 2019 .
enlaces externos
- ¿Qué es la delegación? WikiWikiWeb
- Delegación en el Código Rosetta