schnorr / mlp

Disciplina de Modelos de Linguagens de Programação - INF/UFRGS
19 stars 11 forks source link

Trabalho Final: Delegates #23

Closed LucasAlegre closed 5 years ago

LucasAlegre commented 5 years ago

Olá, O último requisito da versão orientada a objetos é definir e utilizar delegates. Entretanto, existe bastante definições e tipos diferentes de delegates na internet. Gostaria de saber se o seguinte código de exemplo é suficiente para satisfazer o critério do trabalho.

class View {

  void show() {
    print("View.show()");  
  }

}

class Screen {

  private View view; // delegation link

  public Screen(View view) {
    this.view = view;
  }

  void show() {
    view.show();
  }

}

View view = new View();
Screen screen = new Screen(view); // establish delegation between two objects
screen.show(); //View.show()
schnorr commented 5 years ago

Adotamos o conceito de delegates do nosso livro do Robert W. Sebesta (Concepts of Programming Languages - décima edição), onde ele escreve (Sec. 2.19.2):

C# includes a new type, delegates, which are both object-oriented and type-safe method references to subprograms.Delegates are used for implementing event handlers, controlling the execution of threads, and callbacks.

O assunto é melhor desenvolvido na Sec. 9.7 (Calling Subprograms Indirectly) que detalha os usos mais comuns para delegates:

E que define delegate como sendo um ponteiro para função no formato de um objeto (abordagem da linguagem C#, inclusive com a palavra reservada delegate), ou seja, é um ponteiro com uma semântica associada que permite proteger de erros de tipo. Adotar callbacks ou gerenciar eventos com interfaces gráficas (tipicamente com callbacks na hora de instanciar elementos gráficos) seriam então suficientes para satisfazer este ponto na lista de requisitos do projeto.