POO - Os 4 Pilares Da Programação Orientada A Objetos
POO - Os 4 Pilares Da Programação Orientada A Objetos
POO - Os 4 Pilares Da Programação Orientada A Objetos
Buscar
(60) (2)
Odesenvolvimentodesoftwareextremamenteamplo.Nessemercado,existemdiversaslinguagensdeprogramao,queseguem
diferentesparadigmas.UmdessesparadigmasaOrientaoaObjetos,queatualmenteomaisdifundidoentretodos.Issoacontece
porquesetratadeumpadroquetemevoludomuito,principalmenteemquestesvoltadasparaseguranaereaproveitamentodecdigo,
oquemuitoimportantenodesenvolvimentodequalqueraplicaomoderna.
AProgramaoOrientadaaObjetos(POO)dizrespeitoaumpadrodedesenvolvimentoqueseguidopormuitaslinguagens,comoC#
eJava.Aseguir,iremosentenderasdiferenasentreaPOOeaProgramaoEstruturada,queeramuitoutilizadahalgunsanos,
principalmentecomalinguagemC.Essepadrosebaseiaemquatropilaresqueveremosaolongodesseartigo.Almdisso,aPOO
diversasvantagensemsuautilizao,quetambmserovistaseexplicadas.
NaFigura1vemosumacomparaomuitoclaraentreaprogramaoestruturadaeaprogramaoorientadaaobjetosnoquediz
respeitoaosdados.Repareque,noparadigmaestruturado,temosprocedimentos(oufunes)quesoaplicadosglobalmenteem
nossaaplicao.Nocasodaorientaoaobjetos,temosmtodosquesoaplicadosaosdadosdecadaobjeto.Essencialmente,os
procedimentosemtodossoiguais,sendodiferenciadosapenaspeloseuescopo.
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 1/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
Figura1.EstruturadaxOrientaoaObjetos
AlinguagemCaprincipalrepresentantedaprogramaoestruturada.Setratadeumalinguagemconsideradadebaixonvel,que
atualmentenoutilizadaparaprojetosmuitograndes.Asuaprincipalutilizao,devidoaobaixonvel,emprogramaopara
sistemasembarcadosououtrosemqueoconhecimentodohardwaresefaznecessrioparaumbomprograma.
Essacolocaonostrazaumdetalheimportante:aprogramaoestruturada,quandobemfeita,possuiumdesempenhosuperiorao
quevemosnaprogramaoorientadaaobjetos.Issoocorrepelofatodeserumparadigmasequencial,emquecadalinhadecdigo
executadaapsaoutra,semmuitosdesvios,comovemosnaPOO.Almdisso,oparadigmaestruturadocostumapermitirmais
liberdadescomohardware,oqueacabaauxiliandonaquestodesempenho.
Entretanto,aprogramaoorientadaaobjetostrazoutrospontosqueacabamsendomaisinteressantesnocontextodeaplicaes
modernas.Comoodesempenhodasaplicaesnoumadasgrandespreocupaesnamaioriadasaplicaes(devidoaopoder
deprocessamentodoscomputadoresatuais),aprogramaoorientadaaobjetossetornoumuitodifundida.Essadifusosedmuito
pelaquestodareutilizaodecdigoepelacapacidadederepresentaodosistemamuitomaispertodoqueveramosnomundo
real.
Veremosemdetalhesesseseoutrospontosquedizemrespeitoaprogramaoorientadaaobjetos.Comodesenvolvedores,
nossamissoentenderquaissoasvantagensedesvantagensdecadaumdosparadigmasdeprogramaoeescolhermoso
melhorparanossaaplicao.Aescolhadalinguagemtambmdeveestarpresentenessaescolha.
Paraentendermosexatamentedoquesetrataaorientaoaobjetos,vamosentenderquaissoosrequerimentosdeuma
linguagemparaserconsideradanesseparadigma.Paraisso,alinguagemprecisaatenderaquatrotpicosbastanteimportantes:
Abstrao
AabstraoconsisteemumdospontosmaisimportantesdentrodequalquerlinguagemOrientadaaObjetos.Comoestamoslidando
comumarepresentaodeumobjetoreal(oquednomeaoparadigma),temosqueimaginaroqueesseobjetoirrealizardentro
denossosistema.Sotrspontosquedevemserlevadosemconsideraonessaabstrao.
Oprimeiropontodarmosumaidentidadeaoobjetoqueiremoscriar.Essaidentidadedevesernicadentrodosistemaparaque
nohajaconflito.Namaiorpartedaslinguagens,hoconceitodepacotes(ounamespaces).Nessaslinguagens,aidentidadedo
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 2/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
objetonopodeserrepetidadentrodopacote,enonecessariamentenosistemainteiro.Nessescasos,aidentidaderealdecada
objetosedpor..
Asegundapartedizrespeitoacaractersticasdoobjeto.Comosabemos,nomundorealqualquerobjetopossuielementosqueo
definem.Dentrodaprogramaoorientadaaobjetos,essascaractersticassonomeadaspropriedades.Porexemplo,as
propriedadesdeumobjetoCachorropoderiamserTamanho,RaaeIdade.
Porfim,aterceirapartedefinirmosasaesqueoobjetoirexecutar.Essasaes,oueventos,sochamadosmtodos.Esses
mtodospodemserextremamentevariveis,desdeAcender()emumobjetolmpadaatLatir()emumobjetocachorro.
Encapsulamento
Oencapsulamentoumadasprincipaistcnicasquedefineaprogramaoorientadaaobjetos.Setratadeumdoselementosque
adicionamseguranaaplicaoemumaprogramaoorientadaaobjetospelofatodeesconderaspropriedades,criandouma
espciedecaixapreta.
Amaiorpartedaslinguagensorientadasaobjetosimplementamoencapsulamentobaseadoempropriedadesprivadas,ligadasa
mtodosespeciaischamadosgettersesetters,queiroretornaresetarovalordapropriedade,respectivamente.Essaatitudeevitao
acessodiretoapropriedadedoobjeto,adicionandoumaoutracamadadeseguranaaplicao.
Parafazermosumparalelocomoquevemosnomundoreal,temosoencapsulamentoemoutroselementos.Porexemplo,quando
clicamosnobotoligardateleviso,nosabemosoqueestacontecendointernamente.Podemosentodizerqueosmtodosque
ligamatelevisoestoencapsulados.
Herana
Oreusodecdigoumadasgrandesvantagensdaprogramaoorientadaaobjetos.Muitodissosedporumaquestoque
conhecidacomoherana.Essacaractersticaotimizaaproduodaaplicaoemtempoelinhasdecdigo.
Paraentendermosessacaracterstica,vamosimaginarumafamlia:acriana,porexemplo,estherdandocaractersticasdeseus
pais.Ospais,porsuavez,herdamalgodosavs,oquefazcomqueacrianatambmofaa,eassimsucessivamente.Na
orientaoaobjetos,aquestoexatamenteassim,comomostraaFigura2.Oobjetoabaixonahierarquiairherdar
caractersticasdetodososobjetosacimadele,seusancestrais.Aheranaapartirdascaractersticasdoobjetomaisacima
consideradaheranadireta,enquantoasdemaissoconsideradasheranasindiretas.Porexemplo,nafamlia,acrianaherda
diretamentedopaieindiretamentedoavedobisav.
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 3/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
Figura2.Herananaorientaoaobjetos
Aquestodaheranavariabastantedelinguagemparalinguagem.Emalgumasdelas,comoC++,haquestodaheranamltipla.
Isso,essencialmente,significaqueoobjetopodeherdarcaractersticasdevriosancestraisaomesmotempodiretamente.Em
outraspalavras,cadaobjetopodepossuirquantospaisfornecessrio.Devidoaproblemas,essaprticanofoidifundidaem
linguagensmaismodernas,queutilizamoutrasartimanhasparacriarumaespciedeheranamltipla.
Outraslinguagensorientadasaobjetos,comoC#,trazemumobjetobaseparatodososdemais.Aclasseobjectfornece
caractersticasparatodososobjetosemC#,sejamcriadospelousurioouno.
Polimorsmo
Outropontoessencialnaprogramaoorientadaaobjetosochamadopolimorfismo.Nanatureza,vemosanimaisquesocapazes
dealterarsuaformaconformeanecessidade,edessaideiaquevemopolimorfismonaorientaoaobjetos.Comosabemos,os
objetosfilhosherdamascaractersticaseaesdeseusancestrais.Entretanto,emalgunscasos,necessrioqueasaespara
ummesmomtodosejadiferente.Emoutraspalavras,opolimorfismoconsistenaalteraodofuncionamentointernodeummtodo
herdadodeumobjetopai.
Comoumexemplo,temosumobjetogenricoEletrodomstico.Esseobjetopossuiummtodo,ouao,Ligar().Temosdois
objetos,TelevisoeGeladeira,quenoiroserligadosdamesmaforma.Assim,precisamos,paracadaumadasclassesfilhas,
reescreveromtodoLigar().
Comrelaoaopolimorfismo,valemalgumasobservaes.Comosetratadeumassuntoqueestintimamenteconectado
herana,entenderosdoisjuntamenteumaboaideia.Outropontoofatodequeaslinguagensdeprogramaoimplementamo
polimorfismodemaneirasdiferentes.OC#,porexemplo,fazusodemtodovirtuais(comapalavrachavevirtual)quepodemser
reimplementados(comapalavrachaveoverride)nasclassesfilhas.JemJava,apenasoatributo@Overridenecessrio.
Essesquatropilaressoessenciaisnoentendimentodequalquerlinguagemorientadaaobjetosedaorientaoaobjetoscomoum
todo.Cadalinguagemirimplementaressespilaresdeumaforma,masessencialmenteamesmacoisa.Apenasaquestoda
herana,comocomentado,quepodetrazervariaesmaisbruscas,comoapresenadeheranamltipla.Almdisso,o
encapsulamentotambmfeitodemaneirasdistintasnasdiversaslinguagens,emboraosgettersesetterssejampraticamente
onipresentes.
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 4/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
Aprogramaoorientadaaobjetostrazumaideiamuitointeressante:arepresentaodecadaelementoemtermosdeumobjeto,ou
classe.Essetipoderepresentaoprocuraaproximarosistemaqueestsendocriadoaoqueobservadonomundoreal,eum
objetocontmcaractersticaseaes,assimcomovemosnarealidade.Essetipoderepresentaotrazalgumasvantagensmuito
interessantesparaosdesenvolvedoresetambmparaousuriodaaplicao.Veremosalgumasdelasaseguir.
Areutilizaodecdigoumdosprincipaisrequisitosnodesenvolvimentodesoftwareatual.Comacomplexidadedossistemas
cadavezmaior,otempodedesenvolvimentoiriaaumentarexponencialmentecasonofossepossvelareutilizao.Aorientaoa
objetospermitequehajaumareutilizaodocdigocriado,diminuindootempodedesenvolvimento,bemcomoonmerodelinhas
decdigo.Issopossveldevidoaofatodequeaslinguagensdeprogramaoorientadaaobjetostrazemrepresentaesmuito
clarasdecadaumdoselementos,eesseselementosnormalmentenosointerdependentes.Essaindependnciaentreaspartes
dosoftwareoquepermitequeessecdigosejareutilizadoemoutrossistemasnofuturo.
Outragrandevantagemqueodesenvolvimentoorientadoaobjetostrazdizrespeitoaleituraemanutenodecdigo.Comoa
representaodosistemaseaproximamuitodoquevemosnavidareal,oentendimentodosistemacomoumtodoedecadaparte
individualmenteficamuitomaissimples.Issopermitequeaequipededesenvolvimentonofiquedependentedeumapessoa
apenas,comoaconteciacomfrequnciaemlinguagensestruturadascomooC,porexemplo.
Acriaodebibliotecasoutropontoquemuitomaissimplescomaorientaoaobjetos.Nocasodaslinguagensestruturadas,
comooC,temosqueasbibliotecassocoleesdeprocedimentos(oufunes)quepodemserreutilizadas.NocasodaPOO,
entretanto,asbibliotecastrazemrepresentaesdeclasses,quesomuitomaisclarasparapermitiremareutilizao.
Entretanto,nemtudoperfeionaprogramaoorientadaaobjetos.Aexecuodeumaaplicaoorientadaaobjetosmaislenta
doqueoquevemosnaprogramaoestruturada,porexemplo.Issoacontecedevidocomplexidadedomodelo,quetraz
representaesnaformadeclasses.Essasrepresentaesirofazercomqueaexecuodoprogramatenhamuitosdesvios,
diferentedaexecuosequencialdaprogramaoestruturada.EsseograndemotivoportrsdaprefernciapelalinguagemCem
hardwarelimitado,comosistemasembarcados.TambmomotivopeloqualaprogramaoparasistemasmveiscomooGoogle
Android,emboraemJava(linguagemorientadaaobjetos),sejafeitaomenosorientadaaobjetospossvel.
Nomomentoatualemqueestamos,tecnologicamenteessaexecuomaislentanosentida.Issosignificaque,emtermosde
desenvolvimentodesistemasmodernos,aprogramaoorientadaaobjetosamaisrecomendadadevidoasvantagensqueforam
apresentadas.Essasvantagenssoderivadasdomodelodeprogramao,quebuscaumarepresentaobaseadanoquevemosno
mundoreal.
Humagrandequantidadedelinguagensdeprogramaoorientadaaobjetosnomercadoatualmente.Nesseartigo,iremos
apresentar3dasmaisutilizadasnomomento:Java,C#eC++.Cadaumadelaspossuiumaabordagemdiferentedoproblemaque
astornamuitoboasparaalgunstiposdeaplicaesenotoboasparaoutros.
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 5/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
Java
OJava,muitoprovavelmente,alinguagemdeprogramaomaisutilizadanomercadoatual.AuxiliadopelapresenadoJRE(Java
RuntimeEnvironment),ouvariaesdele,emquasetodososdispositivoseletrnicosdomomento,alinguagemJavaumgrande
sucessoentreosdesenvolvedores.OsucessodalinguagemaumentouaindamaiscomoGoogleAndroid,queescolheuoJava
comolinguagempreferencialdedesenvolvimentodeaplicaes.
OJavaimplementaosquatropilaresdeformabastanteintuitiva,oquefacilitaoentendimentoporpartedodesenvolvedor.A
abstrao,oprimeiropilar,implementadoatravsdeclasses,quecontmpropriedadesemtodos,deformabastantesimples.Jo
encapsulamentorealizadoatravsdepropriedadesprivadas,auxiliadaspormtodosespeciaisgettersesetters,comomostra
aListagem1.ValeressaltarapalavrachavethismostradanomtodoSetId().Essapalavrachavefuncionacomoum
representantedaclasseatual,umaautorefernciaaoprprioobjeto.
privateintid;
publicintGetId()
{
returnid;
{
publicvoidSetId(intid)
{
this.id=id;
}
Listagem1.EncapsulamentoemJava
AsquestesdeheranaepolimorfismonoJavasoumpoucomaiscomplexas.OJavapossuiheranasimples,oquesignificaque
cadaclassepodeherdardeapenasumaoutra.Entretanto,oJavapossuiaschamadasInterfaces,quepossuempropriedadese
assinaturasdemtodos.Essasinterfacesprecisamserimplementadasparafuncionar,oquesignificaqueumaclassepode
implementarvriasinterfaceseherdardeapenasumaclasse.Naquestodepolimorfismo,oatributo@Overrideresponsvelpor
informaraoJavaqueomtodoemquestoestsendoreescrito.
C#
OC#,porsuavez,outradaslinguagensmaisutilizadasnomercado.Comooscomputadorespessoaisnomundo,emsuamaioria,
possuemosistemaoperacionalWindows,daMicrosoft,oC#sepopularizou.IssoporqueoWindowsimplementaoFramework.NET,
aoqualoC#estassociado.OC#umalinguagemdeusogeraleespecialmentecriadaparautilizaocomaorientaoaobjetos.
Valeressaltarque,emC#,tudoumobjeto(herdadaclasseobject).
Aabstraomuitosimples,esegueomodelodoJava.Aquestodeencapsulamentoumpoucodiferentedevidoa
implementaodosmtodosgetteresetter.Anomenclaturatambmumpoucodiferente.Avarivelquerealmenteguardaovalor
dodadochamadaatributo,enquantoapropriedadeoelementoquerealmenteacessaaqueledadodomundoexterno.Issoest
mostradonaListagem2.Almdisso,oC#fazusodeduaspalavraschaveespeciais:geteset.
//Atributo
privateintid;
//Propriedade
publicintId
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 6/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
{
get;
set;
}
Listagem2.EncapsulamentoemC#
AquestodaheranaemC#tambmsegueomodelodoJava:heranasimpleseapossibilidadedeutilizaodeinterfaces.A
importnciadasinterfacesmuitogrande,umavezqueelaspodemdarotipodosdados,quesomenteposteriormentesero
associadosaumtiporeal,comomostraaListagem3.IssotambmvlidoparaoJava.Porpadro,asidentidadesdasinterfaces
comeamcomaletraI.Opolimorfismo,porsuavez,baseadoemmtodosvirtuais(comapalavrachavevirtual)naclassepaie
reescritoscomapalavrachaveoverridenaclassefilha.
IExemploInterfaceexemplo;
exemplo=newImplementacaoIExemploInterface();
Listagem3.InterfacesemC#
C++
OC++,porsuavez,umalinguagemumpoucomaisprimitiva,epermitemuitomaisliberdadescomohardware.Comoelefoi
derivadoimediatamentedoC,oC++permiteautilizaodeponteiros,porexemplo,queirotrabalhardiretamentecomamemria.
Almdisso,oC++podeutilizartodasasbibliotecasCqueexistemdiretamente.
Emtermosdeabstrao,oC++implementaclasses,assimcomoqualquerlinguagemorientadaaobjetos.Eletambmpossuio
sentidodeprivadoepblico,queutilizadoparaencapsulamento.Esseencapsulamentorealizadoatravsde
mtodosgetteresetter,muitosimilaraovistoemJava,comomostraaListagem4.Reparequealistagemmostrasomentea
assinaturadosmtodosespeciais,sendoquesuaimplementaoamesmaqueemJava.Essetipodeadaptaomuitocomum
emC++,ondeaclasseguardadaemumarquivo.hesuaimplementaoemumarquivo.cpp.
private:
intid;
public:
intGetId()const;
voidSetId(intconstid);
Listagem4.EncapsulamentoemC++
AquestodaherananoC++umpoucodiferente.Alinguagempermiteaheranamltipla,oquesignificaquecadaclassepode
herdardequantasclassesdesejar.Issopodecausarproblemasdemtodosquepossuemomesmonome,portantoodesenvolvedor
precisaestaratento.Opolimorfismobaseadoemmtodosvirtuais,damesmaformacomooC#.Acomplexidade,entretanto,
maior,umavezquetemosquecuidardedetalhesdemaisbaixonvel,comoacessoamemria.
Almdessasexemplificadas,existemoutraslinguagensquemerecemsercitadas.Entreelas,podemoselencar:Python,linguagem
descriptorientadaaobjetosquemuitoutilizadaempesquisascientficasdevidoasuavelocidadeObjectPascal(tambm
conhecidacomoDelphi,devidoaonomedesuaIDE),apesardograndenmerodesistemasmaisantigosqueautilizamObjective
C,quealinguagemdeprefernciaparadesenvolvimentodeaplicaesparaossistemasdaApple,comoiPhoneeiPadRuby,
voltadaparaodesenvolvimentowebeVisualBasic.NET,muitoutilizadaatpoucotempo,mastambmcaindoemdesuso,
principalmentedevidoaoavanodoC#empopularidade.
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 7/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
Aolongodesseartigo,procuramoselencaroselementosquefazemdaprogramaoorientadaaobjetosumsucessonomomento.
Vimososquatropilaresdesseparadigmaeentendemoscomoelessoimplementadosemalgumasdaslinguagensmaisutilizadas
nomercadodedesenvolvimento.Almdisso,entendemosalgumasdasvantagensquetornaramaprogramaoorientadaaobjetos
umgrandesucessoparaodesenvolvimentodesistemasmodernos.
Cursorelacionado:Java:Introduoaorientaoaobjetos
PublicadonoCanal.netenoCanalRevista.netMagazine
porHenriqueMachado
Guru.netetecnologiasMS
Compartilhe:
Ficoucomalgumadvida?
Postaquisuadvidaoucomentrioquenossaequiperesponderomaisrpidopossvel.
Maisposts
Novidade
Artigo
Artigo
Artigo
Programao Funcional: cdigo limpo e padres de projeto JAVA PADRESDEPROJETOS PROGRAMAO FUNCIONAL
Guia
DevMedia
CurtirPgina 128milcurtidas
5amigoscurtiramisso
HospedagemwebporPorta80WebHosting
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 9/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos
http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 10/10