Generalização:
A generalização tem como função agrupar características comuns para objetos dentro de um mesmo contexto.
Veja o diagrama de classe, superclass é a classe Pessoa.
Podemos perceber que no topo temos a Pessoa(superclass), que pode ser um Cliente ou Usuário. Por sua vez esse usuário poderá ser um Administrador, assim tendo funções especiais como excluir ou inserir novos usuários.
Definição de Delegate:
O delegate são ponteiros para funções(métodos)
O que é um ponteiro?:
Ponteiro é um valor atribuído em memória que aponta para outro valor em memórias através de seu endereço.
Quando temos necessidade de utilizarmos métodos, e não sabemos qual método chamar, pois dependemos de algumas condições, podemos deixar o nosso código mais bonito usando um delegate.
Veja exemplo:
Abaixo temos um exemplo de uma aplicação Console em C#.
06
| delegate int Calular( int a, int b);
|
15
| if (DateTime.Now.Second % 2 == 0)
|
17
| calc = new Calular(Dividir);
|
20
| calc = new Calular(Somar);
|
23
| Console.WriteLine(calc.Invoke(DateTime.Now.Millisecond,
|
30
| private static int Somar( int a, int b)
|
35
| private static int Dividir( int x, int y)
|
São mensagens trocadas pelos sistemas, métodos e objeto para informar um acontecimento, uma ação que se inicia, que termina dentro da aplicação.
Podemos citar o método Andar() em Pessoa, assim podemos dizer que a Pessoa está Andando até que pare de andar, ou podemos dizer que a pessoa vai parar de Andar antes de ela parar de Andar.
Assim o objeto que chama pode executar alguma ação antes da Pessoa realmente para de Andar.
Exemplo de eventos em C#:Para usar eventos em C# temos que fazer uso de delegates como foi visto acima o delegate e um ponteiro para uma função (método), e eventos usam delegates para apontar a qual método o mesmo deverá chamar.
05
| public delegate void AndarHandler();
|
11
| public delegate void AndandoHandler( out bool pararAndar);
|
14
| public event AndarHandler AntesAndar;
|
15
| public event AndarHandler AntesPararAndar;
|
18
| public event AndandoHandler Andando;
|
27
| DateTime pararAs = DateTime.Now.AddSeconds(30);
|
30
| while (pararAs > DateTime.Now)
|
32
| bool pararAgora = false ;
|
35
| Andando( out pararAgora);
|
46
| System.Threading.Thread.Sleep(1000);
|
Declaração do objeto para testes.
É uma aplicação do tipo Console.
04
| Pessoa marcelo = new Pessoa();
|
08
| new Pessoa.AndandoHandler(marcelo_Andando);
|
10
| new Pessoa.AndarHandler(marcelo_AntesAndar);
|
11
| marcelo.AntesPararAndar +=
|
12
| new Pessoa.AndarHandler(marcelo_AntesPararAndar);
|
17
| Console.WriteLine( "Marcelo parou de andar." );
|
23
| static void marcelo_AntesPararAndar()
|
25
| Console.WriteLine( "Marcelo irá parar de andar." );
|
28
| static void marcelo_AntesAndar()
|
30
| Console.WriteLine( "Marcelo irá começar a andar." );
|
33
| static void marcelo_Andando( out bool pararAndar)
|
37
| if (DateTime.Now.Second % 7 == 0)
|
40
| Console.WriteLine( "Marcelo está andando." );
|
Na linha 6 da primeira listagem o nome do identificador não deveria ser "Calcular" em vez de "Calular" ??? (bem, cada um nomeia seus identificadores da forma que quiser). Seu post ficaria mais completo se abordasse aplicações visuais e o emprego de 'delegates' com eventos de componentes gráficos.
ResponderExcluir