Você está na página 1de 48

Programao Orientao a Objetos (POO) com C#

Aprender os conceitos e a parte prtica da programao orientada a objetos com o C#


(c Sharp)
Iremos criar classes, declarar mtodos, utilizar abstrao, criar propriedades, criar
mtodos virtuais, utilizar polimorfismo e herana.
Para comear vamos utilizar um exemplo muito simples porque a programao
orientada a objetos bastante conceitual, complexa para quem vem da programao
estruturada, ento, vamos fazer um exemplo bem simples em windows forms no visual
Studio 2008.
No caso aqui no interessa onde utiliz-lo, este exemplo serve tanto para windows
form, .net, mbile, silverlight, enfim, conceitos da POO valem para qualquer tipo de
aplicao que ser desenvolvida.
Para aprender POO vamos estudar vrios exemplos, utilizar analogias do mundo real,
associar o objeto criado como o objeto da vida real, o objeto virtual o espelho do
objeto do mundo real, a POO foi modulada e criada olhando a realidade, como so os
objetos na vida real: carros, armrios, computadores, etc.
Em nosso primeiro exerccio prtico vamos criar classes para trabalhar com meios de
transportes, criar a classe carro, a classe avio, veremos que algumas coisas so
comuns, que utilizaremos em ambas as classes. Comparar isto com outros objetos da
vida real, computador, perifricos para um melhor entendimento.

Abra o Visual Studio 2008:

Em seguida, criar um novo projeto, Windows Forms Application:

Grave na pasta Project que est dentro de Meus Documentos >> Visual Studio 2008
>> Projects, daremos o nome de projOOP:

Assim o Visual Studio criou uma pasta projOOP, determinada pasta raiz do nosso
projeto. E abrir o primeiro formulrio Windows Form com o nome Form1.cs.
Atribua um ttulo a este formulrio, em propriedade localize o atributo Text e altere
para programando POO.

Adicione alguns controles para trabalharmos com nossos objetos, adicione um


groupBox e chamar seu Text de Carro.

Adicione trs labels e denominamos seus Texts:


Kilometragem.

Descrio Capacidade e

Agora coloque um textBox para os trs atributos de carros, em seguida, d um nome


para cada textBox no atributo name em propriedades: tbDescricaoCarro,
tbCapacidadeCarro e tbQuilometragemCarro.

Copie o GroupBox do Carro e cole abaixo. Ateno! No precisa selecionar todos os


objeto, apenas o GroupBox.

Altere o Text do GrouBox para Avio e todos os 3 atributos altere o sufixo para avio.
No se calcula o uso do avio por quilometragem, ento, troca-se quilometragem por
Horas.

Adicione um boto criar para carro e outro boto para Avio, agora altere o name
deles para btCriarCarro e btCriarAviao e ambos altere o Text para Criar.

Classe uma estrutura que define o tipo de dado, por exemplo, um carro um tipo
que tem uma descrio, uma capacidade e quilometragem, isso so atributos de uma
classe. Mas o carro tambm tem comportamento ele pode se movimentar, ligar,
estragar.
Um objeto uma instncia dessa classe, por exemplo, um Astra que cabe cinco
passageiros e tem 500 quilmetros rodado um objeto da classe carro.

Classe Carro
Agora vamos criar e instanciar as Classes, ver conceitos de heranas, trabalhar com
atributos e tipos de dados. Fazer analogias com o mundo real.
No Solution Explorer localizado a direita, vamos dar um clique com o boto direito no
projeto projOOP >> Add >> New Item ou diretamente em Class.

No caso de New Item, perceba que deveremos escolher Class e em seguida


denomin-lo como Carro.cs.

Perceba que o Visual Studio criou na classe chamada Carro, inicialmente ele criou um
namespace chamado projOOP (o nome do projeto) e a classe Carro, aqui dentro
iremos colocar os atributos da classe carro.
J coloca os namespaces: Generic, Linq e Text que praticamente os namespaces
que utilizaremos.

Mas neste momento podemos remov-los, no vamos utilizar eles agora.

Dentro da classe vamos colocar os atributos.


O public significa que os atributos podero ser acessados por outras classes, elas vo
ser visveis ao mundo externo.

Volte ao Form1.cs [design], d um duplo clique no boto criar do carro, ento, dentro
do mtodos btCriarCarro_Click.
Perceba que a classe form1 herda form, no C# os dois pontos significa a herana
entre duas classes. Veja tambm que a classe pblica.

Primeiramente crie o Objeto, entre os dois mtodos Form1 e btCriarCarro_Click


adicione uma varivel privada, seu tipo vai ser carro e seu nome vai ser carroObj.

Pronto!! Agora hora de instanciar o objeto e passar os valores para esse objeto.

Na primeira linha instancia o objeto do tipo carro e em seguida atribui os valores dos
textBox para dentro do objeto CarroObj. Perceba que capacidade e Quilometragem foi
preciso transformar os valores digitados nos textBox em inteiros.
Caso seu Visual Studio no est mostrando o nmero de linhas, ative-as em:
Tools >> Options >> Text Editor >> All Languages >> Marque Display Line numbers

Tambm pode buscar uma linha utilizando a tecla de atalho Ctrl+G:

Antes de debugar vamos acrescentar um break point na linha 23.

Debugue o programa, acrescente os valores: Sandero, 5 e 20, aperte o boto Criar:

Para prosseguir selecione a opo: Debug >> step into ou aperte F10.

Perceba que ele criou o objeto carro e todos os valores foram atribudos a todos os 3
atributos da sua classe.

No Objeto CarroObj tem um + que ao clicar ele abrir todos os atributos do objeto e
aparecer um sinal de - para esconder.

Classe Avio
No Solution Explorer localizado a direita, vamos dar um clique com o boto direito no
projeto projOOP >> Add >> New Item ou diretamente em Class.

Digite o nome Avio.cs:

Acrescente os atributos da classe:

No Form1.cs[Design] d um duplo clique no boto criar de Avio:


Acrescente o objeto AviaoObj do tipo Aviao.

Complete o mtodo btCriarAviao_click

Teste o objeto Avio, acrescente um break point e verifique se as informaes


digitadas esto sendo armazenadas em AviaoObj.

Atividade 1: Aproveite todo o conhecimento estudado e crie um


novo projeto com duas classes: Funcionrio e Aluno. Denomine o
projeto como Academico, analise pelo menos 5 atributos para
cada classe. Construa um front-end em Windows form.

Herana
Seu principal objetivo permitira reutilizao de cdigo. A Herana tem a finalidade de
herdar funcionalidades mais bsicas. Agora de forma prtica iremos pegar nossas
classes: carro e avio e criar herana entre elas.
Como voc pode ver um carro tem uma Descrio, uma Capacidade e uma
Quilometragem e o avio tem uma Descrio, uma Capacidade e Horas, ambas tem
dois atributos em comum. Para aperfeioar o processo precisamos generalizar, que
significa criar uma classe bsica para atender os dois atributos em comum, ento,
vamos criar a classe meioTransporte.

Assim acrescentamos os dois atributos em comum entre as duas classes em


MeioTransporte.

preciso que a classe MeioTransporte seja publica para que a classe Carro e Avio
acesse a ela, ento adicione public.

preciso ajustar as classes Carro e Avio: apague os dois atributos que tem em
comum entre as duas classes e adicione herana dentro de cada classe. No C# s
adicionar a frente da classe o smbolo : e o nome da classe que est sendo herdada.

Volte a tela que o objeto est instanciado e veja que nada foi alterado na utilizao do
objeto.

Atividade 2: Construa a classe Pessoa e trabalhe a herana


entre as classes: Funcionrio e Aluno.

Funes
So as funcionalidades associadas aos objetos. Quando estamos programando as
classes as chamamos de mtodos. Os mtodos so como funes que esto
associadas a um objeto.
Precisamos adicionar funcionalidades para as nossas classes, ento, vamos basear
nas classes que criamos: Carro, Avio e MeioTransporte.
Exemplo: criar a funcionalidade de Mover.
Abra a classe Carro.cs, e crie o seguinte Mtodo:

O mtodo mover um mtodo void, quer dizer que quando invocado no retorna
nada. Para visualizarmos a chamada do mtodo adicione uma MessageBox, mas
antes preciso adicionar a biblioteca System.Windows.Forms para trabalharmos
como o MessageBox.

Ateno: Usar o MessageBox no uma boa prtica no trabalho multi-plataformas,


com ele no conseguimos trabalhar com classes que sero utilizadas tanto na web
quanto no desktop. Est sendo utilizado neste exemplo apenas para a demonstrao
da chamada da classe.

Outro fator importante a concatenao de um atributo com um texto, utilizamos o


smbolo + seguido do texto entre aspas duplas.
Vamos fazer o mesmo mtodo para o avio.

No se esquea de adicionar em aviao.cs a biblioteca System.Windows.Forms.

Acrescente dois Buttons no formulrio, na propriedade TEXT Mover e os seguintes


NAMES: btMoverCarro, btMoverAviao.

D um duplo clique no Button Mover de carro. Adicione o objeto j criado CarroObj e


invoque o mtodo mover, nunca esquea dos parnteses, todo e qualquer mtodo
deve ser invocado com parnteses duplo.

Faa o mesmo para avio, d um duplo clique no Button mover de avio.

Execute o programa e faa o teste.


Carro: Zafira, 7 lugares, 10000 Km.
Avio: Airbus, 200 lugares, 150 Horas de vo.
No se esquea de criar os dois objetos antes de mover qualquer um dos dois.

Aps executar nenhuma das duas caixas de dialogo vieram com ttulo. Para resolver
isso adicione mais um parmetro no mtodo messageBox.

Atividade 3:
No projeto acadmico crie o mtodo andar para funcionrio e
aluno.

Agora vamos brincar um pouquinho com nossas classes, veja as duas variveis que
declaramos.

Uma do tipo Carro e a outra do Tipo Aviao. Podemos mudar esse tipo e coloc-las
do tipo meioTransporte, veja:

No acusou nenhum erro, por qu? Por que ambas estamos declarando um objeto de
uma classe bsica, no caso meioTransporte e instanciando um tipo mais especfico,
estou declarando um meio de transporte e colocando um carro.
Pense como funciona na vida real, em um computador tem vrias entradas USB, o
que uma entrada USB? um tipo genrico de entradas de perifricos. Voc pode
colocar uma impressora, uma mquina fotogrfica, um scanner, um celular, um
adaptador wi-fi, etc.
Imaginem pra cada tipo de perifrico ter que ter uma entrada USB. Assim fica invivel
concorda? esta analogia que trabalhamos nossas classes, termos 20 tipos de meios
de transportes e termos que criar uma forma diferente para acessar cada um.
A partir de agora abriremos as portas para comearmos a estudar polimorfismos.
Ento, vamos compilar nosso programa, aperte F6.

Aps compilar foi mostrado quatro erros, vamos analis-los:


Erro 1: No existe o atributo quilometragem para a classe do tipo Meio de Transporte.
Erro 2: No existe o atributo horas para a classe do tipo Meio de Transporte.
Erro 3 e 4: No existe o mtodo mover para classe Meio de Transporte.
Para resolvermos isto precisamos fazer um Type Casting, uma converso do carroObj
para ser do tipo carro.

Aperte f6 e ver que o primeiro erro sumir, faa o mesmo para avio:

No uma boa prtica de programao, iremos resolver isso quando aprendermos


polimorfismo.
Pare resolver os problemas 3 e 4 precisamos criar o mtodo mover dentro de meio de
transporte.

Execute o programa, aperte F5:


Carro: Zafira, 7 lugares, 10000 Km.
Avio: Airbus, 200 lugares, 150 Horas de vo.
Clique em Criar e em seguida Mover.
Perceba que no acontecer nada quando clicar em Mover, porque o programa no
est chamando o mtodo Mover de Avio e Carro, est chamando Mover de
MeioTransporte, e meio de transporte est vazio. No seguimento do contedo iremos
resolver isso.

Atividade 4:
No projeto acadmico instancie funcionrio e alunos do tipo
pessoa.

Polimorfismo

Sobrescrever mtodos virtuais declarando como override

Porque declarar o mtodo mover dentro da classe bsica (meioTransporte)? Para


poder cham-lo. Ento primeiramente iremos denominar como virtual o mtodo mover
da classe bsica meioTransporte.

Em seguida precisamos denominar como override os mtodos mover das classes


especficas: Aviao e Carro.

Mas alm das classes Carro e Aviao terem o mtodo mover a classe bsica tambm
tem sua implementao para Mover tambm. Incremente um MessageBox Ligando
meio Transporte.

Ateno: No se esquea de acrescentar a biblioteca System.Windows.Form para a


classe meioTransporte.

At agora aprendemos como anular o mtodo Mover da classe Base, por exemplo,
quando invocado o mtodo Mover da classe Carro, ele apenas acessar a classe
Mover de Carro e ignora o Mover da classe meioTransporte.

E para adicionar o mtodo Mover de meioTransporte antes de executar o MessageBox


da classe Carro.

Adicione base.Mover() antes do MessageBox na Classe Carro.

Execute o programa e veja qual ser o resultado:

Crie o Carro e em seguida aperte em Mover. Primeiramente ele vai ligar o meio de
transporte e depois entrar em movimento.

E quando precisarmos fazer com que a mensagemLigando meio de Transporte seja


especfica para cada classe que herda meioTransporte? Para resolver esta situao
aprenderemos agora a implementar classes abstratas.

Ento vamos criar o mtodo Ligar dentro de meio de transporte, carro e Avio.

Na classe meioTransporte vamos criar o mtodo virtual Ligar vazio e na classe Mover
apague o messageBox e adicione a chamada do mtodo Ligar.

Nas classes Carro e Avio crie o mtodo override de ligar e nele adicione o
MessageBox para ligar.

Execute e teste o programa.

Perceba que o mtodo Ligar em meio de transporte no tem implementao, ento,


nessa situao chamamos este mtodo de abstrato.

Altere a palavra virtual para abstratc no mtodo Ligar na classe MeioTransporte,


apague as Chaves que delimitam o contedo da classe, pois agora a classe Ligar
uma classe que no tem implementao.

Ops! O Visual Studio acusou um erro em nossa classe, isso ocorre porque toda classe
que tenha um mtodo abstrato uma classe abstrata, adicione a palavra abstract para
a classe MeioTransporte.

Execute e teste seu programa.

Para entender melhor: Uma classe abstrata aquela classe que no posso
instanciada, cria-se um objeto do tipo MeioTransporte, mas nunca instancie como
MeioTransporte, exemplo:
Cria-se do tipo meioTransporte private MeioTransporte CarroObj;
Mas nunca instancie como meioTransporte CarroObj = new MeioTransporte();
O certo CarroObj = new Carro();

Atividade 5: Implemente polimorfismo em nosso


projeto acadmico.

Construtores
Para criar um objeto Carro, chamo new Carro(), assim instanciar um objeto do tipo
carro, esta ao denominada: Construo de um objeto.
E todo objeto a ser criado tem uma determinada assinatura, que no caso quais
atributos que voc quer atribuir no ato da criao do objetos.
Atributos so todos os valores que descrevemos para detalhar uma determinada
classe, por exemplo, a classe Carro tem como atributo Quilometragem e herda dois
atributos da classe meio de transporte.
Para escrever um mtodo construtor em C# defina seu nome o mesmo nome da
classe, por exemplo, o mtodo Carro o mtodo construtor da classe Carro.
Ento, vamos exemplificar:
Na classe Carro implemente a construtora e atribua o valor 10 para o atributo
quilometragem.

Coloque o break point linha onde est atribuindo o valor 10 para a quilometragem e
analise a insero dos valores no objeto pelo mtodo construtor.
Para Avio crie sua classe construtora e insira o valor 20 para o atributo horas.

Agora vamos criar o mtodo construtor para a classe meioTransporte.

Acrescente um break point na construo do objeto carro e siga passo a passo a


execuo do programa (F10).
Perceba que durante a execuo os mtodos construtores: Carro e MeioTransportes
so executados.

Modificadores ou especificadores de visibilidade


Uma classe um mtodo eles tem uma visibilidade com outros mtodos, perceba que
na classe MeioTransporte tudo pblica: a classe, descrio, capacidade, construtor
todos so pblicos. Mas no bem assim que funciona na vida real, nem sempre ser
necessrio expor todos os mtodos e atributos, exponha somente o que pblico
usando public.
O que interno a classe voc no deixa ser visto por outras classes, um exemplo
clssico, o mtodo ligar no pode ser pblico porque ele abstrato, s pode ser
chamado pela sua prpria classe MeioTransporte.

Declarar mtodos protegidos


Trabalhar com propriedades e aprofundar em nossos exemplos

Ento nada melhor que esse mtodo seja privado:

O que acontecer? No momento que eu digo que ele privado as classes


descendentes no vo enxergar mais o ligar, e logo no vo poder sobrescrever. A
classe carro chama o mtodo ligar, neste caso teremos um erro.
Para resolver este impasse dever ser usado o protected. O protected esconde seus
mtodos atribudos para todo o universo externo de classes, assim disponibiliza
apenas para as classes que esto ligadas na hierarquia.
Troque private para protected:

Os mtodos ligar em: carro e em Avio, que sob escrevem devero tambm ser
protected.

Coloque na classe base meioTransporte, vamos criar um atributo cham-lo de teste.

Observem quando eu instanciar um objeto do tipo base meioTransporte e as classes


que herdam a classe base: Carro e Avio em qualquer uma das classes voc
conseguir cham-lo e atribuir um valor para o atributo. Por exemplo:

E se trocarmos o atributo public para private?

Perceba que nas chamadas feitas nos objetos carro e Avio j apresentaram erro:

Apague os dois testes que criamos e deixe apenas o atributo private teste criado em
meio de transporte.
Para testarmos um atributo private precisamos trabalhar dentro da classe sua
atribuio, veja abaixo:

Atividade 6: Implemente mtodos Construtores em


nosso projeto acadmico.

Propriedades
Vamos ver o que so propriedade, como o uso de propriedades pode fortalecer o
encapsulamento e a partir do c# 3 vamos ver as propriedades automticas.
Todos os atributos que em nossas classes, como: quilometragem em Carro, Horas em
Avio.
Abra a classe meio de transporte:
Antes de aprender as propriedades automticas,vamos ver manualmente.
Ao criar a primeira propriedade: private string _descricao, veja que a maioria dos
desenvolvedores costumam colocar um sublinhado antes do no do campo. Outros
preferem colocar o nome do atributo em minsculo porque o C# case sensitive.
Crie um mtodo get que retornar o valor do atributo.
O set para que no momento que a pessoa atribuir o valor para dentro do atributo.

Desta forma o nosso atributo descrio virou uma propriedade, uma propriedade no
armazena um valor para string descrio ela simplesmente mapeia um valor para um
atributo privado.
Para Aviao

Para o Carro

Agora para criar o objeto vamos alterar todas as atribuies e vamos iniciar os objetos
em nosso formulrio.

Perceba que at os type casting no mais necessrio fazer.

Atividade 7: Implemente as propriedades em nosso


projeto acadmico.

Propriedades Automticas
Para trabalhar com propriedades automticas, por exemplo: campo descrio em
meioTransporte, fazemos o seguinte:

Ateno: Faa apenas se no tiver que implementar nada aps os mtodos: get e set.

Atividade 8: ajuste-as para serem automticas em


nosso projeto acadmico

C# - Usando Formulrios MDI

Vamos trabalhar com o formulrios MDI e tratar algumas de suas caractersticas e


propriedades usando a linguagem C#.
A interface MDI ou Multiple Document Interface usada em aplicaes Windows
Forms um conceito antigo e bem difundido. A interface MDI funciona como um
container que pode conter diversos outros formulrios. Um exemplo de aplicao
muito conhecida que usa essa interface o Microsoft Word.
Eu vou usar o SharpDevelop 3.0 mas podemos usar tambm o Visual C# 2008
Express ou o Visual Studio 2008.
Abra o SharpDevelop ou o Visual C# Express Edition crie uma nova soluo do tipo
Windows Application com o nome usandoMDI;
C# - Iniciando como formulrio MDI
Para ter um formulrio MDI basta definir a propriedade IsMidContainter do formulrio
como True:

Vejamos agora como criar formulrios filhos (Child) de forma dinmica e definir
algumas de suas propriedades como titulo, cor, tamanho, etc.
Formulrios filhos sero exibidos dentro do formulrio MDI que atua como um
container. Para fazer isso vamos criar um menu no formulrio MDI com opes.

A partir da ToolBox selecione o componente MenuStrip arraste-o e solte-o no


formulrio e em seguida altere sua propriedade Name para mn1;

Agora crie um menu de opes com a seguinte hierarquia :

Defina a propriedade Name para o item Arquivo como mnuArquivo e para Windows
como mnuWindows;

Abaixo temos a hierarquia e o nome dado a cada item do menu


Arquivo
-->Novo
-->Azul
-->Vermelho
->Sair

mnuArquivo
mnuArquivoNovo
mnuArquivoNovoAzul
mnuArquivoNovoVermelho
mnuArquivoSair

No evento Click da opo Azul do menu vamos incluir o cdigo que ir criar um novo
formulrio e que ir definir algumas de suas propriedades. Veja abaixo como deve ser
o cdigo :
void MnuFileNovoAzulClick(object sender, EventArgs e)
{
// Cria um novo formulrio
Form frmAzul = new Form();
// Atribui um titulo ao formulrio
frmAzul.Text = "Formulrio Azul";
// Altera a cor de fundo do formulrio
frmAzul.BackColor = System.Drawing.Color.Blue;
// Maximiza o formulrio filho
frmAzul.WindowState=
System.Windows.Forms.FormWindowState.Maximized;
// Define quem o pai desta janela
frmAzul.MdiParent = this;
// exibe o formulrio
frmAzul.Show();
}
Executando o projeto e selecionando a opo Azul do menu conforme abaixo irermos
obter:

Observe que para criar o formulrio filho criamos uma nova instncia de form:
Form frmAzul = new Form();
Nota: O VB .NET possui o recurso My que pode ser usado para abrir um
formulrio: My.Forms.NomeFormulrio
Como o formulrio filho frmAzul esta maximizado ele ocupa todo formulrio pai e o
menu
Executando o mesmo cdigo com a propriedade
System.Windows.Forms.FormWindowState do formulrio filho definida como
Normal , vemos o formulrio contido no formulrio pai;

Em seguida definimos o formulrio Pai da janela frmAzul com o cdigo abaixo:


// Define quem o pai desta janela
frmAzul.MdiParent = this;
E finalmente exibimos o formulrio no modo Modal:

// exibe o formulrio
frmAzul.Show();
Ento , resumindo :
1- Para definir o formulrio principal MDI_Pai como um container MDI definimos sua
propriedade IsMDIContainer como True:
this.IsMDIContainer = true;
2- Para definir e exibir um formulrio filho (frmFilho) do container fazemos assim:
Form frmFilho = new Form();
frmFilho.MDI_Pai=this;
frmFilho.Show();
Para alterar a cor do fundo do formulrio basta incluir a seguinte rotina no evento Load
do formulrio ou criar uma rotina e cham-la no evento de inicializao do formulrio:
private void Form_Load
(object sender,
System.EventArgs e)
{
foreach (Control control in
this.Controls)
{
if (control is MdiClient)
{
control.BackColor =
Color.Red;
break;
}
}
}
Podemos alterar o arranjo dos formulrios filhos da seguinte maneira:

Cascade
Tile Horizontal
Tile Vertical
Arranje Icons

Para conseguir efetuar o arranjo via cdigo fazermos assim:


// Define o leiaute para cascade.
this.LayoutMdi(MdiLayout.Cascade);
// Define o leiaute para tile horizontal.
this.LayoutMdi(MdiLayout.TileHorizontal);
// Define o leiaute para tile vertical.
this.LayoutMdi(MdiLayout.TileVertical);

// Define o leiaute para arrange icons.


this.LayoutMdi(MdiLayout.ArrangeIcons);
No formulrio do exemplo defina o item Layout no menu com as opes conforme a
figura abaixo:

A seguir no evento Click de cada uma das opes do menu inclua o cdigo conforme
a figura abaixo:

E se quisermos fechar todos os formulrios filhos ? Simples. crie uma rotina com o
seguinte cdigo:
private void
fecharTodosToolStripMenuItem_Click(object
sender, EventArgs e)
{
foreach (Form mdiChildForm in MdiChildren)
{
mdiChildForm.Close();
}
}
E se eu quiser exibir em um menu os formulrios filhos que esto abertos ?
Simples , selecione o controle MenuStrip e na janela de propriedades selecione a
propriedade MdiWIndowListItem;
A seguir informe qual item do menu ir exibir os formulrios filhos abertos:

O resultado exibido a seguir:

Creio que esta uma introduo que esta de bom tamanho para usar formulrios MDI
com C#.

Delegates e Eventos
Para explicar vamos pegar a classe meio de transporte e vamos criar um mtodo
pblico.

Perceba que antes de instanciar a classe MeioTransporte.


O que delegate?
intimamente relacionado com o conceito de eventos, o que eventos?
Todo objeto tem seus eventos, por exemplo, um objeto Button tem um evento clique.
Quando criamos uma ao para o clique de um determinado boto, assim estaremos
criando um delegate que aponta para uma ao que ir executar um mtodo.
delegada a funcionalidade para outro mtodo executar.
Ento vamos criar uma situao que exemplifique o uso do Delegate. Avisar ao
usurio que o carro est ligado a partir de uma execuo pela interface, por isso que
usamos o beforeLigar, justamente para enviar a mensagem aps ter ligado o veculo.
Para utilizar o mtodo precisamos criar o evento do tipo delegate.

Dentro da classe MeioTransporte vamos criar o mtodo que ir cham-lo.


Vamos para o formulrio, no boto criar o carro, d um duplo clique. E vamos criar um
novo mtodo:

Perceba que foi criado fora do mtodo CriarCarro_click.


Agora vamos chamar nosso mtodo BeforeLigar dentro do mtodo CriarCarro_click.
Agora precisamos chamar o BeforeLigar dentro da classe meioTransporte no mtodo
ligar.

Vamos l, perceba que usa-se um construtor BeforeLigarHandler, mas perceba


tambm que no aceita com o sinal de igualdade tem que ser um (+=) pois trata-se de
uma incluso, porque um mesmo evento pode ter mais manipuladores, ento o
BeforeLigar pode disparar vrios mtodos.

Voltando para a classe meioTransporte e agora vamos alterar o mtodo mover.

Alm de delegar um evento em um determinado mtodo, podemos tambm tratar


erros a partir de um delegate. Por exemplo, vamos criar uma exception para tratar.

Veja que com a exceo, o carro no ligar mais e nem entrar em movimento.

Atividade 9: crie um delegate antes de andar para o


nosso projeto acadmico

Associao
Uma associao um vnculo que permite que objetos de uma ou mais classes se
relacionem. Atravs destes vnculos possvel que um objeto convoque
comportamentos e estados de outros objetos.
unrias - quando a associao ocorre entre objetos de uma mesma classe.
binrias - quando a associao ocorre entre dois objetos de classes distintas.
mltiplas - quando a associao ocorre entre mais de dois objetos de classes distintas.
Diferena entre Associao e Herana
A Herana um tipo de, as propriedades so herdadas de outra classe. permitido
criar uma nova classe a partir de um j existente, fazendo o reaproveitamento dos
seus mtodos e atributos.
Enquanto que a Associao um mecanismo pelo qual um objeto utiliza os recursos
de outro.
Para exemplificar vamos criar a classe pessoa.

Criar um boto Criar Pessoa

Implement-lo:

Interface
Herana o polimorfismo so grandes recursos da orientao a Objetos a interface
aumenta este poder.
Posso utilizar interface para simular herana mltipla. Simular que uma classe tem um
determinado comportamento implementando uma interface mantendo suas heranas.
Criar uma interface pode criar uma arquitetura plugvel extensvel.
Ento vamos ao nosso exemplo:
Crie um novo projeto com o nome de Calc.
Adicione uma nova classe chamada Calculadora:
Apague o namespace, vamos todos trabalhar com o nome padro.
Vamos criar uma classe Bsica para Calculadora

Agora adicione dois mtodos: Multiplicar e Somar:

Da mesma forma vamos criar a classe computador e implementar uma forma diferente
para ver como funciona, no se esquea de sua classe base:

Vamos a uma anlise, quando estancio um objeto do tipo CalcBase, no consigo


coloc-la do tipo de computador. Porque uma no herda a outra. Neste nosso exemplo
faremos que tanto Calculadora quanto Computador implementa uma interface.
Agora hora de criar a interface.

Nas classes vamos implementar a interface ICalc

Todos os mtodos que so implementados por esta interface devem estar


implementados nas classes que esto associadas.

Vamos Criar o front-end:

Vamos trabalhar o boto +:

Execute e veja o Resultado.


Vamos interfacear o processo. Vamos esconder nossa aplicao.
Ento perceba na imagem abaixo que o nosso objeto ser do tipo ICalc

Agora sim podemos validar a aplicao.

Execute e teste o boto somar, perceba que ele s ir somar se estiver selecionada a
classe que o mtodo ser trabalhado, para isso fizemos no programa perguntando se
o objeto no nulo. Perceba que o resultado para ambas o mesmo. Perfeito! Desta
forma trabalhamos com interface.
Agora podemos fazer a mesma forma com a multiplicao, ou... Melhorar um
poquinho, veja:
Pegue a validao dos radiosbutton e vamos criar um mtodo para instanciar outro
mtodo, isto para cuidarmos de reaproveitamento de cdigo.

Agora invoque-o dentro do boto somar.

Agora vamos fazer a multiplicao:


Copie todas as instrues de somar e insira no mtodo de multiplicar.

Você também pode gostar