Na engenharia de software, o padrão de delegação é um padrão de design orientado a objetos que permite que a composição de objetos atinja a mesma reutilização de código que a herança, e serve como uma alternativa para obter o mesmo efeito da herança múltipla em linguagens que não a suportam.

Na delegação, um objeto (equivalente a classe filho na herança) lida com uma solicitação delegando a um segundo objeto (o delegate(delegado) )(equivalente a classe pai na herança), para isso o primeiro objeto torna-se proprietário do segundo objeto para usar suas propriedades e métodos. O delegado é um objeto auxiliar, mas com o domínio original . Com uma linguagem que tenha suporte para delegação, isso é feito implicitamente, fazendo com que o self no delegado se refira ao objeto original (de envio), não ao delegado (objeto de recebimento). No padrão delegation, isso é feito ao passar explicitamente o objeto original para o delegado como uma de suas propriedades.Gamma et al. 1994 Observe que "delegação" costuma ser usada de maneira vaga para se referir ao conceito distinto de forwarding (encaminhamento), onde o objeto de envio simplesmente usa o membro correspondente no objeto de recebimento, avaliado no campo do objeto de recebimento, não o objeto original, no caso da delegação o objeto original está no campo do objeto delegado.

Observe que este artigo usa "objeto de envio / objeto de recebimento" para os dois objetos, em vez de "objeto de recebimento / delegado", enfatizando quais objetos enviam e recebem a chamada de delegação, não a chamada original.

Definition Na introdução "Gamma et al. 1994, Grady Booch" definiu o delegation como:

Ou seja ao invés de herdar as características da classe pai para a classe filho diretamente, a classe filho é adaptada para receber um objeto instanciado da classe pai para usar seus métodos, para que esses métodos fiquem disponíveis na classe filho é necessário redeclarar aquele método com o mesmo nome e dentro dele chamar o método do objeto pai. Exemplo No exemplo abaixo (usando a linguagem de programação Kotlin ), a classe Window delega a chamada area() ao seu objeto Rectangle interno (seu delegado). class Rectangle(val width: Int, val height: Int) { fun area() = width * height }

class Window(val bounds: Rectangle) { // Delegation fun area() = bounds.area() }Outro exemplo em Java// delegation class RealPrinter { // the "delegate" void print()

System.out.println("The Delegate");

class Printer { // the "delegator" RealPrinter p = new RealPrinter();

// create the delegate void print()

p.print(); // delegation

Suporte de linguagem Algumas linguagens têm suporte especial para delegação incorporada. Por exemplo, na linguagem de programação Kotlin, poderíamos escrever: 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

Ver também Programação Orientada a Aspectos Delegação (computação) Padrão de design Padrão de fachada

Ligações externas

O que é delegação, WikiWikiWeb Delegação para o Código Rosetta

Categoria:Padrões de projeto de software