Você está na página 1de 12

ProgramaoOrientadaaObjetoscomC#(Parte4.

14)Herana
Categorias:Herana

porThiagoRichardVanicore

Resumo:

Oobjetivonoseaplicaaestepost.

Uma vez que o contedo total desta srie foi dividido em partes, devese considerar absoluto o resumo da primeira postagem at o
momentopresente.

Este tema da srie Programao Orientada a Objetos com C# encerrase nesta publicao. Sendo assim, a numerao sequencial
destapartedasriefinalizasede4.13para4.14(videttulo).

Palavraschaves:

Variveis,Propriedades,Modificador,Acesso,Classe,Objeto.

Texto:

MosaObra

Com a Introduo e apresentao de um novo aspecto no cenrio exemplificado, denominado Integrao (vide post anterior), o
prximo passo na Programao Orientada a Objetos com C# ser dar continuidade a estes assuntos e suas variantes, vistas at o
momentopresente.

Adendo

PararealizaodoPostforamutilizadososseguintesProgramas:

Windows7Ultimate
MicrosoftVisualStudio2010UltimateSP1(ServicePack1).

A nica configurao realizada aps a instalao dos programas acima, foi manter o Microsoft Visual Studio sendo executado como
usurioAdministradordoSistemaOperacional,afimdeevitarmaioresproblemas.

AlterandoaClasseBilhete

PartindodaclasseBilhete,deveseclicaremodificarareadaclasse,alterandoaparaoseguintecdigo:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ConsoleApplication
7 {
8 public class Bilhete
9 {
10 private string cor;
11 public string Cor
12 {
13 get { return cor; }
14 set { cor = value; }
15 }
16
17 private string tipo;
18 public string Tipo
19 {
20 get { return tipo; }
21 set { tipo = value; }
22 }
23
24 private decimal tarifa;
25 public virtual decimal CobraTarifa()
26 {
27 tarifa = 3.80m;
28 return tarifa;
29 }
30 }
31 }

DetalhesdamodificaodaClasse:

FoicriadaavariveldeinstnciatarifacomomembrodaclasseBilhete,sendoestadotipodecimal.Almdisto,avarivelestcom
omodificadordeacessocomoprivate,ouseja,acessvelapenasdentrodaclasseBilhete.

FoialteradoomtodoCobraTarifa()comomembrodaclasseBilhete,demaneiraapreparloparaexecuosemapassagemde
parmetros,almdissoestemtodoestcomomodificadordeacessocomopublic.

Ainda sobre o mtodo CobraTarifa(), sua ao se estabelece de maneira a guardar e retornar a varivel tarifa ou seja, o mtodo
CobraTarifa()encapsulaavariveltarifanaclasseBilhete,levandoaoretornodovalorfixo:3.80.

Autilizaodapalavrareservadavirtualumconceitonovo,aindanoexplicado.

Lembrando que, para garantir a utilizao da tcnica Herana no cenrio estabelecido, a Classe Bilhete serve como classe Pai ou
classeBaseparaasclassesqueaHerdam.

partir desta declarao, a classe Bilhete detm todas as caractersticas em comum a utilizao das Classes Filhas
ouDescendentes.

No caso do mtodo CobraTarifa(), a palavra virtual prov alm da utilizao fiel deste mtodo pelas classes filhas, a utilizao
modificadadestemesmomtododentrodesuasestruturasinternas,demaneiraaparticularizalo(serentendidoposteriormente).

Telaaocolarocdigo:
MicrosoftVisualStudio2010UltimateTelaapsAlteraodaClasse

Por fim, devese salvar a classe Bilhete e suas alteraes clicando no boto Salvar. Tela com a confirmao positiva (ver rodap da
janela)aoclicarnobotoSalvar:
MicrosoftVisualStudio2010UltimateTelaapsSalvaroProjeto

AlterandoaclasseUnicoComum

NaclasseUnicoComum,deveseclicaremodificarareadaclasse,alterandoaparaoseguintecdigo:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ConsoleApplication
7 {
8 public class UnicoComum : Bilhete
9 {
10 private decimal saldo = 100.00m;
11
12 public decimal Saldo()
13 {
14 return saldo;
15 }
16
17 private DateTime dataPrimeiraPassagem;
18 public DateTime DataPrimeiraPassagem
19 {
20 get { return dataPrimeiraPassagem; }
21 set { dataPrimeiraPassagem = value; }
22 }
23
24 private decimal tarifa;
25 public override decimal CobraTarifa()
26 {
27 TimeSpan diferencaHora = dataPrimeiraPassagem - DateTime.Now;
28 tarifa = base.CobraTarifa();
29
30 if (diferencaHora.Hours <= 2)
31 {
32 tarifa = tarifa + 2.12m;
33 }
34
35 return tarifa;
36 }
37
38 public void Debita()
39 {
40 saldo = saldo - tarifa;
41 }
42 }
43 }

DetalhesdamodificaodaClasse:

AclasseUnicoComumfoialteradacomomodificadordeacessopublic
AclasseUnicoComumherdoudaclasseBilheteeportantosetornouumaclasseDescendente.

FoicriadaavariveldeinstnciasaldocomomembrodaclasseUnicoComum,sendoestadotipodecimal.Almdisto,avarivel
estcomomodificadordeacessocomoprivate,ouseja,acessvelapenasdentrodaclasseUnicoComum.

FoicriadaavariveldeinstnciadataPrimeiraPassagemcomomembrodaclasseUnicoComum,sendoestadotipo
DateTime.Almdisto,avarivelestcomomodificadordeacessocomoprivate,ouseja,acessvelapenasdentrodaclasse
UnicoComum.

FoicriadaavariveldeinstnciatarifacomomembrodaclasseUnicoComum,sendoestadotipodecimal.Almdisto,avarivel
estcomomodificadordeacessocomoprivate,ouseja,acessvelapenasdentrodaclasseUnicoComum.

ForamcriadososmtodosSaldo(),CobraTarifa()eDebita()comomembrosdaclasseUnicoComum,demaneiraapreparlospara
execuosemapassagemdeparmetros.Almdissoestesmtodosestocomomodificadordeacessocomopublic.

AindasobreomtodoSaldo(),suaaoseestabelecedemaneiraaguardareretornaravarivelsaldoouseja,omtodoSaldo()
encapsulaavarivelsaldonaclasseUnicoComum,levandoaoretornodovalorprdefinidocomo:100.00.

NomtodoCobraTarifa()suaaoseestabelecedemaneiraaguardareretornaravariveltarifa,realizandoantesdissouma
operaodecomparaoquedeterminaseadiferenaemhorasentreadatadaprimeirautilizaocomopassagemeadataatual
menorouiguala2(horas).Emcasopositivoserreutilizadaatarifapadro,vindadaclassePaicomobasedeclculo
(base.CobraTarifa()),maisovalorde2.12.Casocontrriosercobradoovalorde3.80queatarifapadro(base.CobraTarifa()).

Autilizaodapalavrareservadaoverrideumconceitonovo,aindanoexplicado.

Lembrandoque,paragarantir,autilizaodatcnicaHerananocenrioestabelecido,aClasseUnicoComumfoimodificadacomo
segueabaixo:

1 public class UnicoComum : Bilhete

partirdestadeclarao,aclasseUnicoComumusufruitodasascaractersticasdisponibilizadasnaclasseBilhete.

ParacriaoeexecuodeummtodocomomesmonomedaclassePainaclasseFilha,emexemploCobraTarifa(),necessriaa
utilizaodapalavraoverrideapsadeclaraodeseumodificadordeacesso(oexemplodedeclaraoabaixoconfere):

1 public override decimal CobraTarifa()

ApalavrareservadaoverrideinformaaocompiladorqueomtodoCobraTarifa()irsobrescreveromtododemesmonomecriadona
classe Herdada Bilhete dentro da classe UnicoComum. Uma segunda condio para atender essa tcnica que, juntamente ao
mtodoCobraTarifa()daclassePaihajaapalavrareservadavirtual.

Outro detalhe importante que o mtodo CobraTarifa() da classe Bilhete ainda poder ser acessado dentro da classe
UnicoComumatravsdaseguintedefiniobase.CobraTarifa().

No mtodo Debita(), sua ao se estabelece de maneira a guardar a varivel saldo, realizando antes disso uma operao de
subtrao que determina o valor da varivel saldo menos o valor da tarifa (obtida atravs da execuo do mtodo CobraTarifa(),
sobrescritonaclasseUnicoComum).

Telaaocolarocdigo:

MicrosoftVisualStudio2010UltimateTelaapsAlteraodaClasse

Porfim,devesesalvaraclasseUnicoComumesuasalteraesclicandonobotoSalvar.Telacomaconfirmaopositiva(verrodapda
janela)aoclicarnobotoSalvar:
MicrosoftVisualStudio2010UltimateTelaapsSalvaroProjeto

AlterandoaclasseProgram

NaclasseProgram,deveseclicaremodificarareadaclasse,alterandoaparaoseguintecdigo:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ConsoleApplication
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Unitario objUnitario = new Unitario();
13 objUnitario.Tipo = "Papel";
14 objUnitario.Cor = "Branca";
15
16 Console.WriteLine("O Bilhete Unitrio de {0}, possui a cor {1} e ao passar na catraca, cobra-se uma tarifa de: R${2}", objUnitario.
17
18 EspecialDesempregado objEspecialDesempregado = new EspecialDesempregado();
19 objEspecialDesempregado.Tipo = "Papel";
20 objEspecialDesempregado.Cor = "Amarela";
21 objEspecialDesempregado.DataValidade = DateTime.Now.AddDays(90);
22
23 Console.WriteLine("O Bilhete Especial Desempregado de {0}, possui a cor {1} e valido at {2}", objEspecialDesempregado.Tipo, objEspecialD
24
25 UnicoComum objUnicoComum = new UnicoComum();
26 objUnicoComum.Tipo = "Plstico";
27 objUnicoComum.Cor = "Vermelha";
28 objUnicoComum.DataPrimeiraPassagem = DateTime.Now.AddHours(1);
29
30 Console.WriteLine("O Bilhete nico Comum apresenta inicialmente um saldo de R${0}", objUnicoComum.Saldo());
31 Console.WriteLine("O Bilhete nico Comum de {0}, possui a cor {1} e sua primeira utilizao ocorreu em {2}", objUnicoComum.Tipo, objUnicoCo
32 Console.WriteLine("O Bilhete nico Comum ao passar na catraca com integrao, cobra-se uma tarifa de: R${0}", objUnicoComum.CobraTarifa
33 objUnicoComum.Debita();
34 Console.WriteLine("O Bilhete nico Comum apresenta aps utilizao de uma passagem com integrao, um saldo disponvel de R${0}", objUnicoCom
35
36 Console.ReadKey();
37 }
38 }
39 }

Cdigo:

Linha1a4:sodeclaraesdenamespacesdeterminadaspeloprprioMicrosoftVisualStudio.
Linha6:declaraodenamespacedeterminadopeloMicrosoftVisualStudiopartirdonomedadoparaoprojetodotipoConsole
Application.Apsalinha6,ocontedopresentedesdeaaberturadachaveatofechamentopertenceaonamespaceemquesto.

Linha 8: declarao da classe Program automaticamente disponibilizada pelo Microsoft Visual Studio partir do nome padro
adotado.

Linha12a16:sodeclaraesrealizadasnaclasseProgram.Instanciando,Inicializando,emseguidapreenchendoasvariveisde
instncia do primeiro objeto criado (objUnitario) a partir da classe Unitario, que ao final sero visualizadas na janela de Console
comomensagensdetexto,atravsdautilizaodasprpriasclassesdoFramework.

Linha 18 a 23: declarao de um novo objeto (objEspecialDesempregado) a partir da classe EspecialDesempregado,


Instanciando,Inicializando,emseguidapreenchendoasvariveisdeinstnciaqueaofinalserovisualizadasnajaneladeConsole
comomensagensdetexto,atravsdautilizaodasprpriasclassesdoFramework.

Linha25a34:declaraodeumnovoobjeto(objUnicoComum)apartirdaclasseUnicoComum,Instanciando,Inicializando,em
seguida preenchendo as variveis de instncia que ao final sero visualizadas na janela de Console como mensagens de texto,
atravsdautilizaodasprpriasclassesdoFramework.

Linha36:encerramentodocdigo.

DetalhesdadeclaraodaClasse:

Com a criao dos objetos objUnitario e objEspecialDesempregado possvel verificar que suas respectivas caractersticas
funcionam independentemente, sendo fruto da Herana estabelecida entre suas classes de origem (Classe Unitario e Classe
EspecialDesempregado)eaclasseHerdada(Bilhete).
Diferentemente do objeto objUnitario, o objeto objEspecialDesempregado possui uma propriedade particular em sua classe de
origem(EspecialDesempregado),sendoestanomeadacomoDataValidade.ApropriedadeDataValidadeportanto,exclusivada
classe(eobjetoreferenteaclasse)EspecialDesempregado.
Diantedocenriosistemametropolitano(estabelecidoaolongodasrie),ovaloratribudoaPropriedadeDataValidaderepresentao
diaemqueodesempregadodeuentradaemseubilheteespecial(pordireito)eportanto,ter90diascorrentesemvigncia.

ComacriaodoobjetoobjUnicoComum possvel verificar que suas respectivas caractersticas funcionam independentemente,


sendofrutodaHeranaestabelecidaentresuaclassedeorigem(ClasseUnicoComum)eaclasseHerdada(Bilhete).

DiferentementedoobjetoobjUnitarioeobjEspecialDesempregado, o objeto objUnicoComum possui uma propriedade particular


em sua classe de origem (UnicoComum), sendo esta nomeada como DataPrimeiraPassagem. A propriedade
DataPrimeiraPassagemportanto,exclusivadaclasse(eobjetoreferenteaclasse)UnicoComum.

Diante do cenrio sistema metropolitano (estabelecido ao longo da srie), o valor atribudo a Propriedade
DataPrimeiraPassagemrepresentaoprimeirohorriododiaemqueopassageiroutilizouseubilhetenicocomumeportanto,ter
1horade2horas (por direito) como garantia para reutilizalo como integrao (uma vez que fora acrescentada 1 hora ttulo de
estudocomotempocorridoapsaprimeirautilizao).

OvalorretornadodoMtodoSaldo()representaovalorqueoBilhetenicoComumpossuiarmazenadoinicialmente.Almdissoo
MtodoSaldo()pertenceexclusivamenteaClasseDescendenteUnicoComum.

OvalorretornadodoMtodoCobraTarifa()representaovalordatarifacobradacomointegraoequeddireitoaumapassagem
mais barata atravs do Bilhete nico Comum. Alm disso o Mtodo CobraTarifa() foi sobrecarregado na Classe Descendente
UnicoComumeatarifapadroreaproveitadaatravsdeHerana.

Diante do cenrio sistema metropolitano (estabelecido ao longo da srie), o valor calculado no Mtodo Debita() representa o valor
que o Bilhete nico Comum possui armazenado aps a utilizao de uma passagem. Alm disso o Mtodo Debita() pertence
exclusivamenteaClasseDescendenteUnicoComum.

Telaaocolarocdigo:

MicrosoftVisualStudio2010UltimateTelaapsAlteraodaClasse

Por fim, devese salvar a classe Program e suas alteraes clicando no boto Salvar. Tela com a confirmao positiva (ver rodap da
janela)aoclicarnobotoSalvar:
MicrosoftVisualStudio2010UltimateTelaapsSalvaroProjeto

Finalizandooexemplo,restaapenasexecutaraAplicao,deveseentoclicarnobotoStartDebugging(F5):
MicrosoftVisualStudio2010UltimateExecuodaAplicao

TelaaoclicarnobotoStartDebugging(F5):

MicrosoftVisualStudio2010UltimateExecuodaAplicao(JaneladeConsole)

ConsideraesFinais:

Esta publicao visa alterar as Classes UnicoComum,Bilhetee Program de maneira que o leitor possa entender a aplicabilidade de
tcnicasquereferemseadivisoderesponsabilidadesentremtodosestabelecidosemumcontextodeHerana,comunicaoefunes
quecadaumadestasdesempenhamentresientreoutroselementoseconceitosdaOrientaoaObjetosdescritosatomomento
Os detalhes da execuo da Aplicao neste post, so 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 reutilizalo e garantir uma
passagemdeintegrao.Obviamentenumcontextocompleto,haveriammuitomaisdetalheselgicasaseremempregadasnestaregra
denegcios,masparacompreensodidtica,oautoracreditaestarnocaminhomaisplausvelparaoleitor.

importanteressaltarque,amedidaqueospostsforemevoluindo,comapresentaestericassomadasasprticas,atendnciaqueo
leitorvsanandosuasdvidasedificuldadesdeentendimento.

Na prxima publicao, quinta parte da srie: Programao Orientada a Objetos com C# ser apresentado o conceito de
Polimorfismo.

RefernciasBibliogrficas:

Asrefernciasbibliogrficasseroapresentadasnoltimopostdestasrie.

Compartilhar
Compartilhar
Compartilhar

Email
Curtir

Sobreoautor

ThiagoRichardVanicore

ThiagoRichardVanicoreformouseemanliseedesenvolvimentodesistemas,possuicertificaoITILFoundationV2
eentreseusconhecimentosesto:ASP.Net(WebForms/MVC5/WebAPI)C#,HTML5,Html/XHtml,CSS3,JQuery,
JQueyMobile,JavaScript,Xml,Ajax,Json,MicrosoftSqlServer,MySql,Firebird,Azure,VisualStudioOnline,
Scrum,UML,CRM,QualityAssurance,CTI(ComputerTelephonyIntegration)MPSBR(MelhoriadeProcessosdo
SoftwareBrasileiro).

Linkpermanenteparaesteartigo:http://linksinergia.com.br/2016/05/18/programacaoorientadaaobjetoscomcparte414heranca
rascunho/

Você também pode gostar