Resumo:
O objetivo não se aplica a este post.
Uma vez que o conteúdo total desta série foi dividido em partes, deve-se considerar absoluto o resumo da primeira postagem até o momento presente.
Este tema da série Programação Orientada a Objetos com C# irá demandar mais publicações. Sendo assim, a numeração sequencial desta parte da série passou de 3.1 para 3.2 (vide título) e assim seguirá (3.3, 3.4…) mediante a necessidade de conclusão.
Palavras-chaves:
Variáveis, Propriedades, Modificador, Acesso, Classe, Objeto.
Texto:
Mãos a Obra
Com a alteração da classe Program e a execução da classe Metro a partir desta, foram apresentadas mensagens em uma janela de console de maneira equivocada (vide post anterior), o próximo passo na Programação Orientada a Objetos com C# será utilizar o conceito de Encapsulamento para reparar esta falha imperdoável na regra de negócios estabelecida.
Adendo
Para realização do Post foram utilizados os seguintes Programas:
- Windows 7 Ultimate;
- Microsoft Visual Studio 2010 Ultimate SP1 (Service Pack 1).
A única configuração realizada após a instalação dos programas acima, foi manter o Microsoft Visual Studio sendo executado como usuário Administrador do Sistema Operacional, a fim de evitar maiores problemas.
Entendendo o Problema
O histórico evolutivo da série demonstra que, nas duas últimas postagens foram realizadas mudanças apenas na classe Program, mantendo, portanto a classe Metro inalterada:
Resultado após a execução:

Microsoft Visual Studio 2010 Ultimate – Penúltima Execução da Aplicação (Janela de Console)
Resultado após a execução:
Comparando a penúltima alteração da classe Program com a última alteração desta mesma classe, tem-se:
Nota-se uma única diferença, ou seja, o acréscimo da linha referente a atribuição do valor false para variável status do objeto Metro:
Na penúltima alteração da classe Program, os métodos Andar e AbrirPorta são executados após a instanciação e inicialização do objeto Metro. Durante esta execução, ocorrem alterações nos valores das variáveis status e portaAberta:
Na última alteração, à medida que a variável status é modificada fora destes métodos, Andar e AbrirPorta são invalidados de seus comportamentos, gerando falha com o resultado final apresentado:
A origem desta irregularidade ocorre em razão da variável status ter sido criada com o modificador de acesso public na classe Metro, fornecendo o chamado “acesso direto a variável” e violando a segurança da Aplicação:
Solucionando o Problema
A solução, portanto, é Encapsular a variável status (restringindo o acesso direto a esta variável), disponibilizando e permitindo que apenas os métodos Andar e AbrirPorta alterem esta variável internamente, a fim de obter os resultados necessários.
Alterando a classe Metro
Na classe Metro, deve-se clicar e modificar a área da classe, alterando-a para o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication { public class Metro { private bool status; public bool portaAberta; public void Andar(bool parametro) { status = parametro; if (status == true) { Console.WriteLine("O Metrô está andando"); } else { Console.WriteLine("O Metrô está parado"); } } public void AbrirPorta() { if (status == false) { Console.WriteLine("O Metrô abriu a porta"); portaAberta = true; } else { Console.WriteLine("O Metrô não pode abrir a porta pois está em andamento"); portaAberta = false; } } } } |
Detalhes da modificação da Classe:
- A classe Metro foi mantida com o modificador de acesso public;
- A variável de instância status sendo um membro da classe Metro, foi alterada com o modificador de acesso como private.
- Os métodos sendo membros da classe Metro, foram mantidos com o modificador de acesso public.
Tela ao colar o código:
Por fim, deve-se salvar a classe Metro e suas alterações clicando no botão Salvar. Tela com a confirmação positiva (ver rodapé da janela) ao clicar no botão Salvar:
Deve-se em seguida abrir a classe Program:
É possível verificar automaticamente na classe Program que, o Microsoft Visual Studio se encarregou de marcar a variável status do objeto Metro em vermelho. Esta indicação ocorreu em razão desta variável não possuir permissão de acesso (não é possível atribuir valores e nem, recuperar valores desta), pois foi alterada na classe Metro com o modificador de acesso private.
Propositalmente, a estratégia usada na alteração da classe Metro obriga agora a exclusão da linha que possui a variável status marcada em vermelho na classe Program e, portanto, mantem apenas o acesso aos métodos (que estão com o modificador public) para fazerem o trabalho esperado na execução da Aplicação:
Tela ao colar o código:
Por fim, deve-se salvar a classe Program e suas alterações clicando no botão Salvar. Tela com a confirmação positiva (ver rodapé da janela) ao clicar no botão Salvar:
Finalizando o exemplo, resta apenas executar a Aplicação, deve-se então clicar no botão Start Debugging (F5):
Tela ao clicar no botão Start Debugging (F5):
Considerações Finais:
Esta publicação visa alterar as Classes Metro e Program deixando no resultado da execução, mensagens que refletem a solução do problema criado anteriormente. Através do Encapsulamento, pode-se perceber que, não é necessário que o Usuário do Aplicativo tenha o conhecimento que exista uma variável chamada status, esta seja responsável por interferir no andamento do Metro ou a abertura e fechamento de suas portas. O que interessa realmente é disponibilizar apenas os métodos que realizam estas ações, funcionando externamente para o Usuário da Aplicação como ações disponíveis a serem executadas e internamente no código como guardiões de variáveis que irão ser acessadas apenas dentro destes métodos e suas classes de origem.
É importante ressaltar que, a medida que os posts forem evoluindo, com apresentações teóricas somadas as práticas, a tendência é que o leitor vá sanando suas dúvidas e dificuldades de entendimento.
Na próxima publicação, ainda terceira parte da série: Programação Orientada a Objetos com C#, será apresentado o terceiro post sobre Encapsulamento, o leitor irá conferir a continuidade do tema entre outros aspectos relevantes a este assunto.
Referências Bibliográficas:
As referências bibliográficas serão apresentadas no último post desta série.