Professional Documents
Culture Documents
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:
partirdestadeclarao,aclasseUnicoComumusufruitodasascaractersticasdisponibilizadasnaclasseBilhete.
ParacriaoeexecuodeummtodocomomesmonomedaclassePainaclasseFilha,emexemploCobraTarifa(),necessriaa
utilizaodapalavraoverrideapsadeclaraodeseumodificadordeacesso(oexemplodedeclaraoabaixoconfere):
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.
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.
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/