Delegación (informática)

De Wikipedia, la enciclopedia libre

La delegación es un mecanismo, usado en la programación orientada a objetos, por medio de la cual una clase delega en otra una determinada funcionalidad.

Se aplica como sustitución a la herencia. Como valor añadido, permite, combinado con la herencia múltiple de interfaces, sustituir la herencia múltiple de clases en los lenguajes donde no se permite esta última directamente. Además, los conflictos de nombres que se plantean en la herencia múltiple se resuelven manualmente con esta técnica.

Diferencias con Herencia[editar]

La delegación se caracteriza por "reutilización selectiva", en cambio en herencia es un "todo o nada". Es cierto que en composición y delegación se escribe mucho más que en herencia, ya que en herencia se hereda de forma declarativa, y esto simplifica la tarea del programador en ciertos casos. Se habla de la herencia como Caja Blanca y de Composición y delegación como Caja Negra. Es conveniente usar herencia cuando la relación de "Es Un" es clara u obvia.

Uso[editar]

Es una buena costumbre usar la delegación en lugar de la herencia si no es necesario hacer conversiones hacia arriba. En general, es mejor cualquier tipo de composición, si es factible, en lugar de la herencia. Sin embargo solo es una buena elección si simplifica más de lo que complica.

Si el lenguaje no soporta directamente este mecanismo se puede emular haciendo una composición de clases donde un objeto delegador (de nivel más próximo al cliente) contenga en un objeto delegado (más lejos del cliente), en el que delegue determinada funcionalidad. Esto se implementa añadiendo un miembro de la clase delegada en la clase delegadora e implementando los métodos públicos que tenga la clase delegada en la clase delegadora. Dichos métodos simplemente deben realizar una llamada con los mismos parámetros al método equivalente de la clase delegada.

Puede usarse también como una herencia dinámica si se hace sobre un objeto cuyo tipo (o clase) se decide en tiempo de ejecución.

El concepto de delegación se usa en la resolución de ciertos Patrones de Diseño como los patrones State, Strategy y Visitor.

Bibliografía[editar]

Design Patterns. Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Addison-Wesley Professional Computing Series, 1998