Escolar Documentos
Profissional Documentos
Cultura Documentos
Índice
PARTE I – Estruturado 3
Introdução 3
Criação da Interface 3
Programando 4
Criação da Classe 5
Criação da Interface 7
Criação da Classe 7
Entendendo a modificação 10
12
Laboratório
Orientação a Objeto com C#
PARTE I – Estruturado
Introdução
Este laboratório tem como objetivo construir um simples sistema de gerenciamento de porta,
de forma estruturada, que será convertido para POO posteriormente.
Criação da Interface
Para criar a interface deste exercício, primeiramente adicione as seguintes imagens ao projeto:
É possível adicionar alguns arquivos externos ao projeto para facilitar o seu uso. São os
Resources. Para adicionar um, dê um duplo clique em “Properties” no Solution Explorer. Depois
que aparecerem as propriedades do seu projeto, clique na aba Resources, à esquerda e
adicione as imagens (Fig 2):
Agora as imagens fazem parte do seu projeto. Para acessá-las, basta acessar o namespace
GerenciamentoDePortas.Properties.Resources e todos os resources que você
acabou de adicionar estarão lá em forma de imagem. Para facilitar o acesso, importe o
namespace GerenciamentoDePortas.Properties, assim o acesso ficará mais fácil.
12
Laboratório
Orientação a Objeto com C#
1. picPorta – PictureBox
a. Image: GerenciamentoDePortas.Properties.Resources.opened
b. SizeMode: StretchImage
Programando
Para gerenciar o estado da porta, crie duas variáveis: “aberta” e “trancada” do tipo Bool. A
porta deverá iniciar aberta e destrancada. Ou seja, no evento Load do formulário, sete a
variável “aberta” como True e a “trancada” como False.
Agora crie 4 funções: Abrir(), Fechar(), Trancar() e Destrancar(). A única coisa que cada botão
vai fazer é chamar a função correspondente o botão btnAbrir vai chamar a função Abrir(), e
assim por diante).
Cada função deverá fazer uma verificação se é possível fazer o procedimento desejado. Se for,
alterar o estado da variável em questão e alterar a imagem do picPorta. Por exemplo: se a
porta já estiver aberta, não é possível abri-la novamente. Só é possível abrir a porta se ela
estiver fechada e destrancada. Então o código da função Abrir() ficará assim:
12
Laboratório
Orientação a Objeto com C#
}
}
Introdução
Este laboratório pretende melhorar o exercício da porta começado anteriormente,
convertendo-o de uma forma simples para OO. A interface será a mesma.
Criação da Classe
Essa versão do sistema terá apenas uma classe: Porta. A classe Porta será responsável por
gerenciar a porta, contendo as variáveis “aberta” e “trancada” dentro dela, expondo somente
os métodos Abrir(), Fechar(), Trancar() e Destrancar().
A diferença dessa classe para o exercício anterior é que dentro dela, há um controle PictureBox,
que é passado no construtor. Ou seja, quando for instanciar um objeto da classe Porta, é
necessário passar um PictureBox por referência. No construtor da classe Porta, é necessário
instanciar o objeto _controleImagem com esse controle passado por referência.
12
Laboratório
Orientação a Objeto com C#
Nota (1) – Aqui você está criando um objeto da classe Porta. Você está CRIANDO, mas NÃO
está INSTANCIANDO.
Nota (2) – Agora sim você está INSTANCIANDO o objeto criado. Como a classe Porta exige
obrigatoriamente um objeto do tipo PictureBox, você deve passar a PictureBox que está
utilizando para mostrar as imagens.
Nota (3) – No evento Click de cada botão, apenas chame o método correspondente ao que
o botão faz.
12
Laboratório
Orientação a Objeto com C#
Criação da Interface
A interface é parecida com a do exercício anterior, mas serão criados alguns outros controles
para gerenciar a porta de cofre (Fig 5).
Criação da Classe
Como descrito na introdução, agora criaremos uma porta de cofre. No mundo real, uma porta
de cofre tem todas as características de uma porta comum. A única diferença é que para
destrancá-la, é necessário ter a mesma senha que foi inserida na tranca quando o cofre foi
criado. Então a melhor forma de criar uma classe PortaDeCofre seria herdando da classe Porta.
Então crie uma nova classe chamada PortaDeCofre e aplique a herança de Porta:
12
Laboratório
Orientação a Objeto com C#
Para arrumar a classe PortaDeCofre, crie um construtor que receba como parâmetro um objeto
do tipo PictureBox (assim como na classe Porta) e um outro parâmetro do tipo string para
poder definir a senha do cofre (como já explicado acima).
Agora com o construtor de PortaDeCofre criado, ainda é necessário especificar como acessar o
construtor da classe Porta. Na linha abaixo da declaração do construtor, acrescente a chamada
ao construtor da classe base e passe o parâmetro desejado, como mostra o trecho de código
abaixo:
12
Laboratório
Orientação a Objeto com C#
Crie um campo privado para guardar a senha passada no construtor. Como a porta do cofre já
começa fechada e trancada, indique isso também no construtor. Se não conseguir, altere a
visibilidade dos campos “aberta” e “trancada” na classe Porta para que sejam visíveis em todas
as classes filhas.
Sobrescreva o método Destrancar() da classe Porta. Não se esqueça de alterar o que for
necessário na classe Porta para poder sobrescrever tal método. Crie uma sobrecarga desse
método que receba uma string para verificar se é a senha correta para abrir a porta. O método
Destrancar() que está sobrescrevendo deve apenas chamar o método Destrancar() que recebe
a string. Obtendo o seguinte código:
this.Destrancar("");
12
Laboratório
Orientação a Objeto com C#
Entendendo a modificação
A evolução desta etapa será criar erros personalizados para melhorar a interface com o
usuário. Parece ser estranho, mas no Visual Studio 2005 é muito simples e útil.
Exception é uma classe que representa os erros que ocorrem durante a execução da aplicação.
Ao executar uma operação indevida nas classes do .Net, ele automaticamente dispara uma
exception. Por exemplo, se você tem um vetor de 5 posições e tentar acessar a 10ª posição.
Isso irá disparar uma IndexOutOfRangeException. Essa exceção na verdade é uma classe que
herda a classe Exception.
Você pode fazer uma exceção personalizada também. Para fazê-la, crie uma nova classe com o
nome PortaAbertaException e faça a herança de Exception. Agora crie um construtor que
chame o construtor da classe base, passando simplesmente a mensagem de erro como
parâmetro (algo como “A porta já está aberta”).
Pronto. A sua exceção personalizada está criada. Para dispará-la faça assim em alguma outra
classe:
Rode o programa e aparecerá uma mensagem de erro típica do Visual Studio 2005, mas com a
mensagem que você passou no construtor da classe base de PortaAbertaException.
12
Laboratório
Orientação a Objeto com C#
try
{
throw new PortaAbertaException();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Aparecerá uma MessageBox com a mensagem do erro que você criou. É muito simples e
elegante utilizar Try/Catch.
Seguindo esta idéia, é possível melhorar a classe Porta. Em cada método, ao invés de somente
verificar se é possível realizar a ação desejada, seria melhor se na impossibilidade de realizar a
ação, fosse disparada uma exceção. Assim ficaria até mais fácil mostrar para o usuário que a
ação não pode ser realizada e por qual motivo.
12
Laboratório
Orientação a Objeto com C#
MessageBox.Show(ex.Message);
}
}
Agora é possível mostrar ao usuário quando a ação desejada não ocorreu e o porquê disso.
Crie as seguintes classes: (todas elas serão filhas da classe Exception e serão as exceções
personalizadas do sistema)
1. Classe PortaFechadaException
2. Classe PortaAbertaException
3. Classe PortaTrancadaException
4. Classe PortaDestrancadaException
5. Classe PortaSenhaInvalidaException
Exceção disparada ao abrir uma porta com senha, informando a senha errada.
Todas as cinco classes devem possuir um construtor cada, chamando o construtor de sua classe
mãe, com um único parâmetro do tipo string (a mensagem da qual a exceção trata).
12