Imprimir Post

Programação Orientada a Objetos com C# (Parte 3.2) – Encapsulamento

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.

Encapsulamento - Relembre - Link Primeiro Post

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.

Encapsulamento - Relembre - Link Post Anterior

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:

Encapsulamento - Penúltima Alteração - Classe Program x Classe Metro

Penúltima Alteração – Classe Program x Classe Metro

Resultado após a execução:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Penúltima Execução da Aplicação (Janela de Console)

Microsoft Visual Studio 2010 Ultimate – Penúltima Execução da Aplicação (Janela de Console)

Encapsulamento - Última Alteração - Classe Program x Classe Metro

Última Alteração – Classe Program x Classe Metro

Resultado após a execução:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Última Execução da Aplicação (Janela de Console)

Microsoft Visual Studio 2010 Ultimate – Última Execução da Aplicação (Janela de Console)

Comparando a penúltima alteração da classe Program com a última alteração desta mesma classe, tem-se:

Encapsulamento - Penúltima Alteração (Classe Program) x Última Alteração (Classe Program)

Penúltima Alteração (Classe Program) x Última Alteração (Classe Program)

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:

Encapsulamento - Penúltima Alteração (Objeto Metro) x Última Alteração (Objeto Metro)

Penúltima Alteração (Objeto Metro) x Última Alteração (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:

Encapsulamento - Penúltima Alteração (Objeto Metro)

Penúltima Alteração (Objeto Metro)

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:

Encapsulamento - Última Alteração (Objeto Metro)

Última Alteração (Objeto Metro)

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:

Encapsulamento - Última Alteração - Classe Program x Classe Metro

Última Alteração – Classe Program x Classe Metro

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:

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.

Encapsulamento - Relembre - Modificadores de Acesso para Classes

Encapsulamento - Relembre - Variáveis de Instância

Encapsulamento - Relembre - Criando Métodos na Classe de Objeto

Encapsulamento - Relembre - Membros da Classe

Encapsulamento - Relembre - Ações do Método

Tela ao colar o código:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Tela após Alteração da Classe

Microsoft Visual Studio 2010 Ultimate – Tela após Alteração da Classe

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:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Tela após Salvar o Projeto

Microsoft Visual Studio 2010 Ultimate – Tela após Salvar o Projeto

Deve-se em seguida abrir a classe Program:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Classe

Microsoft Visual Studio 2010 Ultimate – Classe

É 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:

Encapsulamento - Alteração da Classe

Alteração da Classe

Tela ao colar o código:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Tela após Alteração da Classe

Microsoft Visual Studio 2010 Ultimate – Tela após Alteração da Classe

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:

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Tela após Salvar o Projeto

Microsoft Visual Studio 2010 Ultimate – Tela após Salvar o Projeto

Finalizando o exemplo, resta apenas executar a Aplicação, deve-se então clicar no botão Start Debugging (F5):

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Execução da Aplicação

Microsoft Visual Studio 2010 Ultimate – Execução da Aplicação

Tela ao clicar no botão Start Debugging (F5):

Encapsulamento - Microsoft Visual Studio 2010 Ultimate - Execução da Aplicação (Janela de Console)

Microsoft Visual Studio 2010 Ultimate – Execução da Aplicação (Janela de Console)

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.

Sobre o autor

Thiago Richard Vanicore

Thiago Richard Vanicore formou-se em análise e desenvolvimento de sistemas, possui certificação ITIL Foundation V2 e entre seus conhecimentos estão: ASP .Net (WebForms/MVC5/Web API) C#, HTML5, Html/XHtml, CSS3, JQuery, JQuey Mobile, JavaScript, Xml, Ajax, Json, Microsoft SqlServer, MySql, Firebird, Azure, Visual Studio Online, Scrum, UML, CRM, Quality Assurance, CTI (Computer Telephony Integration) MPSBR (Melhoria de Processos do Software Brasileiro).

Link permanente para este artigo: http://linksinergia.com.br/2015/07/20/programacao-orientada-a-objetos-com-c-parte-3-2-encapsulamento/