Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
Descrio Capacidade e
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.
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.
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.
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
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.
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.
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.
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.
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.
Aperte f6 e ver que o primeiro erro sumir, faa o mesmo para avio:
Atividade 4:
No projeto acadmico instancie funcionrio e alunos do tipo
pessoa.
Polimorfismo
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.
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.
Crie o Carro e em seguida aperte em Mover. Primeiramente ele vai ligar o meio de
transporte e depois entrar em movimento.
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.
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.
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();
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.
Os mtodos ligar em: carro e em Avio, que sob escrevem devero tambm ser
protected.
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:
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.
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.
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.
Defina a propriedade Name para o item Arquivo como mnuArquivo e para Windows
como mnuWindows;
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;
// 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
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:
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.
Veja que com a exceo, o carro no ligar mais e nem entrar em movimento.
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.
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
Da mesma forma vamos criar a classe computador e implementar uma forma diferente
para ver como funciona, no se esquea de sua classe base:
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.