Imprimir Post

Programação Orientada a Objetos com C# (Parte 4.14) – Herança

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.

Herança - Relembre - Link Primeiro Post

Este tema da série Programação Orientada a Objetos com C# encerra-se nesta publicação. Sendo assim, a numeração sequencial desta parte da série finaliza-se de 4.13 para 4.14 (vide título).

Palavras-chaves:

Variáveis, Propriedades, Modificador, Acesso, Classe, Objeto.

Texto:

Mãos a Obra

Com a Introdução e apresentação de um novo aspecto no cenário exemplificado, denominado Integração (vide post anterior), o próximo passo na Programação Orientada a Objetos com C# será dar continuidade a estes assuntos e suas variantes, vistas até o momento presente.

Herança - 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.

Alterando a Classe Bilhete

Partindo da classe Bilhete, deve-se clicar e modificar a área da classe, alterando-a para o seguinte código:

Detalhes da modificação da Classe:

  • Foi criada a variável de instância tarifa como membro da classe Bilhete, sendo esta do tipo decimal. Além disto, a variável está com o modificador de acesso como private, ou seja, acessível apenas dentro da classe Bilhete.
  • Foi alterado o método CobraTarifa() como membro da classe Bilhete, de maneira a prepará-lo para execução sem a passagem de parâmetros, além disso este método está com o modificador de acesso como public.

Ainda sobre o método CobraTarifa(), sua ação se estabelece de maneira a guardar e retornar a variável tarifa ou seja, o método CobraTarifa() encapsula a variável tarifa na classe Bilhete, levando ao retorno do valor fixo: 3.80.

A utilização da palavra reservada virtual é um conceito novo, ainda não explicado.

Lembrando que, para garantir a utilização da técnica Herança no cenário estabelecido, a Classe Bilhete serve como classe Pai ou classe Base para as classes que a Herdam.

À partir desta declaração, a classe Bilhete  detém todas as características em comum a utilização das Classes Filhas ou Descendentes.

No caso do método CobraTarifa(), a palavra virtual provê além da utilização fiel deste método pelas classes filhas, a utilização modificada deste mesmo método dentro de suas estruturas internas, de maneira a particulariza-lo (será entendido posteriormente).

Tela ao colar o código:

Herança - 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 Bilhete 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:

Herança - Microsoft Visual Studio 2010 Ultimate – Tela após Salvar o Projeto

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

Alterando a classe UnicoComum

Na classe UnicoComum, deve-se clicar e modificar a área da classe, alterando-a para o seguinte código:

Detalhes da modificação da Classe:

  • A classe UnicoComum foi alterada com o modificador de acesso public;
  • A classe UnicoComum herdou da classe Bilhete e portanto se tornou uma classe Descendente.
  • Foi criada a variável de instância saldo como membro da classe UnicoComum, sendo esta do tipo decimal. Além disto, a variável está com o modificador de acesso como private, ou seja, acessível apenas dentro da classe UnicoComum.
  • Foi criada a variável de instância dataPrimeiraPassagem como membro da classe UnicoComum, sendo esta do tipo DateTime. Além disto, a variável está com o modificador de acesso como private, ou seja, acessível apenas dentro da classe UnicoComum.
  • Foi criada a variável de instância tarifa como membro da classe UnicoComum, sendo esta do tipo decimal. Além disto, a variável está com o modificador de acesso como private, ou seja, acessível apenas dentro da classe UnicoComum.
  • Foram criados os métodos Saldo(), CobraTarifa() Debita() como membros da classe UnicoComum, de maneira a prepará-los para execução sem a passagem de parâmetros. Além disso estes métodos estão com o modificador de acesso como public.

Ainda sobre o método Saldo(), sua ação se estabelece de maneira a guardar e retornar a variável saldo ou seja, o método Saldo() encapsula a variável saldo na classe UnicoComum, levando ao retorno do valor pré-definido como: 100.00.

No método CobraTarifa() sua ação se estabelece de maneira a guardar e retornar a variável tarifa, realizando antes disso uma operação de comparação que determina se a diferença em horas entre a data da primeira utilização como passagem e a data atual é menor ou igual a 2 (horas). Em caso positivo será reutilizada a tarifa padrão, vinda da classe Pai como base de cálculo (base.CobraTarifa()), mais o valor de 2.12. Caso contrário será cobrado o valor de 3.80 que é a tarifa padrão (base.CobraTarifa()).

A utilização da palavra reservada override é um conceito novo, ainda não explicado.

Lembrando que, para garantir, a utilização da técnica Herança no cenário estabelecido, a Classe UnicoComum foi modificada como segue abaixo:

À partir desta declaração, a classe UnicoComum usufrui todas as características disponibilizadas na classe Bilhete.

Para criação e execução de um método com o mesmo nome da classe Pai na classe Filha, em exemplo CobraTarifa(), é necessária a utilização da palavra override após a declaração de seu modificador de acesso (o exemplo de declaração abaixo confere):

A palavra reservada override informa ao compilador que o método CobraTarifa() irá sobrescrever o método de mesmo nome criado na classe Herdada Bilhete dentro da classe UnicoComum. Uma segunda condição para atender essa técnica é que, juntamente ao método CobraTarifa() da classe Pai haja a palavra reservada virtual.

Outro detalhe importante é que o método CobraTarifa() da classe Bilhete ainda poderá ser acessado dentro da classe UnicoComum através da seguinte definição base.CobraTarifa().

No método Debita(), sua ação se estabelece de maneira a guardar a variável saldo, realizando antes disso uma operação de subtração que determina o valor da variável saldo menos o valor da tarifa (obtida através da execução do método CobraTarifa(), sobrescrito na classe UnicoComum).

Tela ao colar o código:

Herança - 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 UnicoComum 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:

Herança - Microsoft Visual Studio 2010 Ultimate – Tela após Salvar o Projeto

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

Alterando a classe Program

Na classe Program, deve-se clicar e modificar a área da classe, alterando-a para o seguinte código:

Código:

  • Linha 1 a 4: são declarações de namespaces determinadas pelo próprio Microsoft Visual Studio.
  • Linha 6: declaração de namespace determinado pelo Microsoft Visual Studio à partir do nome dado para o projeto do tipo Console Application. Após a linha 6, o conteúdo presente desde a abertura da chave até o fechamento pertence ao namespace em questão.
  • Linha 8: declaração da classe Program automaticamente disponibilizada pelo Microsoft Visual Studio à partir do nome padrão adotado.
  • Linha 12 a 16: são declarações realizadas na classe Program. Instanciando, Inicializando, em seguida preenchendo as variáveis de instância do primeiro objeto criado (objUnitario) a partir da classe Unitario, que ao final serão visualizadas na janela de Console como mensagens de texto, através da utilização das próprias classes do Framework.
  • Linha 18 a 23: declaração de um novo objeto (objEspecialDesempregado) a partir da classe EspecialDesempregado,  Instanciando, Inicializando, em seguida preenchendo as variáveis de instância que ao final serão visualizadas na janela de Console como mensagens de texto, através da utilização das próprias classes do Framework.
  • Linha 25 a 34: declaração de um novo objeto (objUnicoComum) a partir da classe UnicoComum,  Instanciando, Inicializando, em seguida preenchendo as variáveis de instância que ao final serão visualizadas na janela de Console como mensagens de texto, através da utilização das próprias classes do Framework.
  • Linha 36: encerramento do código.

Detalhes da declaração da Classe:

  • Com a criação dos objetos objUnitario objEspecialDesempregado é possível verificar que suas respectivas características funcionam independentemente, sendo fruto da Herança estabelecida entre suas classes de origem (Classe Unitario e Classe EspecialDesempregado) e a classe Herdada (Bilhete).
  • Diferentemente do objeto objUnitario, o objeto objEspecialDesempregado possui uma propriedade particular em sua classe de origem (EspecialDesempregado), sendo esta nomeada como DataValidade. A propriedade DataValidade é portanto, exclusiva da classe (e objeto referente a classe) EspecialDesempregado.
  • Diante do cenário sistema metropolitano (estabelecido ao longo da série), o valor atribuído a Propriedade DataValidade representa o dia em que o desempregado deu entrada em seu bilhete especial (por direito) e portanto, terá 90 dias correntes em vigência.
  • Com a criação do objeto objUnicoComum é possível verificar que suas respectivas características funcionam independentemente, sendo fruto da Herança estabelecida entre sua classe de origem (Classe UnicoComum) e a classe Herdada (Bilhete).
  • Diferentemente do objeto objUnitario objEspecialDesempregado, o objeto objUnicoComum possui uma propriedade particular em sua classe de origem (UnicoComum), sendo esta nomeada como DataPrimeiraPassagem. A propriedade DataPrimeiraPassagem é portanto, exclusiva da classe (e objeto referente a classe) UnicoComum.
  • Diante do cenário sistema metropolitano (estabelecido ao longo da série), o valor atribuído a Propriedade DataPrimeiraPassagem representa o primeiro horário do dia em que o passageiro utilizou seu bilhete único comum e portanto, terá 1 hora de 2 horas (por direito) como garantia para reutiliza-lo como integração (uma vez que fora acrescentada 1 hora à título de estudo como tempo corrido após a primeira utilização).
  • O valor retornado do Método Saldo() representa o valor que o Bilhete Único Comum possui armazenado inicialmente. Além disso o Método Saldo() pertence exclusivamente a Classe Descendente UnicoComum.
  • O valor retornado do Método CobraTarifa() representa o valor da tarifa cobrada como integração e que dá direito a uma passagem mais barata através do Bilhete Único Comum. Além disso o Método CobraTarifa() foi sobrecarregado na Classe Descendente UnicoComum e a tarifa padrão reaproveitada através de Herança.
  • Diante do cenário sistema metropolitano (estabelecido ao longo da série), o valor calculado no Método Debita() representa o valor que o Bilhete Único Comum possui armazenado após a utilização de uma passagem. Além disso o Método Debita() pertence exclusivamente a Classe Descendente UnicoComum.

Tela ao colar o código:

Herança - 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:

Herança - 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):

Herança - 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):

Herança - 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 UnicoComum, Bilhete e  Program de maneira que o leitor possa entender a aplicabilidade de técnicas que referem-se a divisão de responsabilidades entre métodos estabelecidos em um contexto de Herança, comunicação e funções que cada uma destas desempenham entre si entre outros elementos e conceitos da Orientação a Objetos descritos até o momento

Os detalhes da execução da Aplicação neste post, são embasados na busca de fatos que ocorrem na vida real. Ao utilizar um Bilhete Único Comum em um meio de transporte como por exemplo um ônibus, o passageiro tem até 2 horas para reutiliza-lo e garantir uma passagem de integração. Obviamente num contexto completo, haveriam muito mais detalhes e lógicas a serem empregadas nesta regra de negócios, mas para compreensão didática, o autor acredita estar no caminho mais plausível para o leitor.

É 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, quinta parte da série: Programação Orientada a Objetos com C# será apresentado o conceito de Polimorfismo.

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/2016/05/18/programacao-orientada-a-objetos-com-c-parte-4-14-heranca-rascunho/