You are on page 1of 11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

www.devmedia.com.br
[versoparaimpresso]
Linkoriginal:http://www.devmedia.com.br/articles/viewcomp.asp?comp=9264

Os 4 pilares da Programao Orientada


a Objetos
Conhea nesse artigo os 4 principais pilares, bem como as
diferenas para programao estruturada e as principais
vantagens da POO.

Odesenvolvimentodesoftwareextremamenteamplo.Nessemercado,existemdiversas
linguagensdeprogramao,queseguemdiferentesparadigmas.Umdessesparadigmasa
OrientaoaObjetos,queatualmenteomaisdifundidoentretodos.Issoaconteceporquese
tratadeumpadroquetemevoludomuito,principalmenteemquestesvoltadasparaseguranae
reaproveitamentodecdigo,oquemuitoimportantenodesenvolvimentodequalqueraplicao
moderna.
AProgramaoOrientadaaObjetos(POO)dizrespeitoaumpadrodedesenvolvimentoque
seguidopormuitaslinguagens,comoC#eJava.Aseguir,iremosentenderasdiferenasentrea
POOeaProgramaoEstruturada,queeramuitoutilizadahalgunsanos,principalmentecoma
linguagemC.Essepadrosebaseiaemquatropilaresqueveremosaolongodesseartigo.Alm
disso,aPOOdiversasvantagensemsuautilizao,quetambmserovistaseexplicadas.
SaibamaissobreOrientaoaObjetos

Programao Estruturada vs Programao Orientada a Objetos

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

1/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

NaFigura1vemosumacomparaomuitoclaraentreaprogramaoestruturadaea
programaoorientadaaobjetosnoquedizrespeitoaosdados.Repareque,noparadigma
estruturado,temosprocedimentos(oufunes)quesoaplicadosglobalmenteemnossaaplicao.
Nocasodaorientaoaobjetos,temosmtodosquesoaplicadosaosdadosdecadaobjeto.
Essencialmente,osprocedimentosemtodossoiguais,sendodiferenciadosapenaspeloseu
escopo.

Figura1.EstruturadaxOrientaoaObjetos
AlinguagemCaprincipalrepresentantedaprogramaoestruturada.Setratadeumalinguagem
consideradadebaixonvel,queatualmentenoutilizadaparaprojetosmuitograndes.Asua
principalutilizao,devidoaobaixonvel,emprogramaoparasistemasembarcadosououtros
emqueoconhecimentodohardwaresefaznecessrioparaumbomprograma.
Essacolocaonostrazaumdetalheimportante:aprogramaoestruturada,quandobemfeita,
possuiumdesempenhosuperioraoquevemosnaprogramaoorientadaaobjetos.Issoocorre
pelofatodeserumparadigmasequencial,emquecadalinhadecdigoexecutadaapsaoutra,
semmuitosdesvios,comovemosnaPOO.Almdisso,oparadigmaestruturadocostumapermitir
maisliberdadescomohardware,oqueacabaauxiliandonaquestodesempenho.
Entretanto,aprogramaoorientadaaobjetostrazoutrospontosqueacabamsendomais
interessantesnocontextodeaplicaesmodernas.Comoodesempenhodasaplicaesnouma
dasgrandespreocupaesnamaioriadasaplicaes(devidoaopoderdeprocessamentodos
computadoresatuais),aprogramaoorientadaaobjetossetornoumuitodifundida.Essadifuso
sedmuitopelaquestodareutilizaodecdigoepelacapacidadederepresentaodosistema
muitomaispertodoqueveramosnomundoreal.
Veremosemdetalhesesseseoutrospontosquedizemrespeitoaprogramaoorientadaa
objetos.Comodesenvolvedores,nossamissoentenderquaissoasvantagensedesvantagens
decadaumdosparadigmasdeprogramaoeescolhermosomelhorparanossaaplicao.A
escolhadalinguagemtambmdeveestarpresentenessaescolha.
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

2/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

SaibamaissobreOrientaoaObjetosxProgramaoEstruturada

Os 4 pilares da Programao Orientada a Objetos


Paraentendermosexatamentedoquesetrataaorientaoaobjetos,vamosentenderquaisso
osrequerimentosdeumalinguagemparaserconsideradanesseparadigma.Paraisso,alinguagem
precisaatenderaquatrotpicosbastanteimportantes:

Abstrao
AabstraoconsisteemumdospontosmaisimportantesdentrodequalquerlinguagemOrientada
aObjetos.Comoestamoslidandocomumarepresentaodeumobjetoreal(oquednomeao
paradigma),temosqueimaginaroqueesseobjetoirrealizardentrodenossosistema.Sotrs
pontosquedevemserlevadosemconsideraonessaabstrao.
Oprimeiropontodarmosumaidentidadeaoobjetoqueiremoscriar.Essaidentidadedeveser
nicadentrodosistemaparaquenohajaconflito.Namaiorpartedaslinguagens,hoconceito
depacotes(ounamespaces).Nessaslinguagens,aidentidadedoobjetonopodeserrepetida
dentrodopacote,enonecessariamentenosistemainteiro.Nessescasos,aidentidaderealde
cadaobjetosedpor..
Asegundapartedizrespeitoacaractersticasdoobjeto.Comosabemos,nomundorealqualquer
objetopossuielementosqueodefinem.Dentrodaprogramaoorientadaaobjetos,essas
caractersticassonomeadaspropriedades.Porexemplo,aspropriedadesdeumobjeto
CachorropoderiamserTamanho,RaaeIdade.
Porfim,aterceirapartedefinirmosasaesqueoobjetoirexecutar.Essasaes,oueventos,
sochamadosmtodos.Essesmtodospodemserextremamentevariveis,desdeAcender()
emumobjetolmpadaatLatir()emumobjetocachorro.
SaibamaissobreAbstrao

Encapsulamento
Oencapsulamentoumadasprincipaistcnicasquedefineaprogramaoorientadaaobjetos.Se
tratadeumdoselementosqueadicionamseguranaaplicaoemumaprogramaoorientadaa
objetospelofatodeesconderaspropriedades,criandoumaespciedecaixapreta.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

3/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

Amaiorpartedaslinguagensorientadasaobjetosimplementamoencapsulamentobaseadoem
propriedadesprivadas,ligadasamtodosespeciaischamadosgettersesetters,queiroretornare
setarovalordapropriedade,respectivamente.Essaatitudeevitaoacessodiretoapropriedadedo
objeto,adicionandoumaoutracamadadeseguranaaplicao.
Parafazermosumparalelocomoquevemosnomundoreal,temosoencapsulamentoemoutros
elementos.Porexemplo,quandoclicamosnobotoligardateleviso,nosabemosoqueest
acontecendointernamente.Podemosentodizerqueosmtodosqueligamatelevisoesto
encapsulados.
SaibamaissobreEncapsulamento

Herana
Oreusodecdigoumadasgrandesvantagensdaprogramaoorientadaaobjetos.Muitodisso
sedporumaquestoqueconhecidacomoherana.Essacaractersticaotimizaaproduoda
aplicaoemtempoelinhasdecdigo.
Paraentendermosessacaracterstica,vamosimaginarumafamlia:acriana,porexemplo,est
herdandocaractersticasdeseuspais.Ospais,porsuavez,herdamalgodosavs,oquefazcom
queacrianatambmofaa,eassimsucessivamente.Naorientaoaobjetos,aquesto
exatamenteassim,comomostraaFigura2.Oobjetoabaixonahierarquiairherdar
caractersticasdetodososobjetosacimadele,seusancestrais.Aheranaapartirdas
caractersticasdoobjetomaisacimaconsideradaheranadireta,enquantoasdemaisso
consideradasheranasindiretas.Porexemplo,nafamlia,acrianaherdadiretamentedopaie
indiretamentedoavedobisav.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

4/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

Figura2.Herananaorientaoaobjetos
Aquestodaheranavariabastantedelinguagemparalinguagem.Emalgumasdelas,comoC++,
haquestodaheranamltipla.Isso,essencialmente,significaqueoobjetopodeherdar
caractersticasdevriosancestraisaomesmotempodiretamente.Emoutraspalavras,cada
objetopodepossuirquantospaisfornecessrio.Devidoaproblemas,essaprticanofoidifundida
emlinguagensmaismodernas,queutilizamoutrasartimanhasparacriarumaespciedeherana
mltipla.
Outraslinguagensorientadasaobjetos,comoC#,trazemumobjetobaseparatodososdemais.A
classeobjectfornececaractersticasparatodososobjetosemC#,sejamcriadospelousurioou
no.

Polimorsmo
Outropontoessencialnaprogramaoorientadaaobjetosochamadopolimorfismo.Nanatureza,
vemosanimaisquesocapazesdealterarsuaformaconformeanecessidade,edessaideiaque
vemopolimorfismonaorientaoaobjetos.Comosabemos,osobjetosfilhosherdamas
caractersticaseaesdeseusancestrais.Entretanto,emalgunscasos,necessrioqueas
aesparaummesmomtodosejadiferente.Emoutraspalavras,opolimorfismoconsistena
alteraodofuncionamentointernodeummtodoherdadodeumobjetopai.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

5/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

Comoumexemplo,temosumobjetogenricoEletrodomstico.Esseobjetopossuiummtodo,
ouao,Ligar().Temosdoisobjetos,TelevisoeGeladeira,quenoiroserligadosda
mesmaforma.Assim,precisamos,paracadaumadasclassesfilhas,reescreveromtodoLigar().
Comrelaoaopolimorfismo,valemalgumasobservaes.Comosetratadeumassuntoqueest
intimamenteconectadoherana,entenderosdoisjuntamenteumaboaideia.Outropontoo
fatodequeaslinguagensdeprogramaoimplementamopolimorfismodemaneirasdiferentes.O
C#,porexemplo,fazusodemtodovirtuais(comapalavrachavevirtual)quepodemser
reimplementados(comapalavrachaveoverride)nasclassesfilhas.JemJava,apenasoatributo
@Overridenecessrio.
Essesquatropilaressoessenciaisnoentendimentodequalquerlinguagemorientadaaobjetose
daorientaoaobjetoscomoumtodo.Cadalinguagemirimplementaressespilaresdeuma
forma,masessencialmenteamesmacoisa.Apenasaquestodaherana,comocomentado,que
podetrazervariaesmaisbruscas,comoapresenadeheranamltipla.Almdisso,o
encapsulamentotambmfeitodemaneirasdistintasnasdiversaslinguagens,embora
osgettersesetterssejampraticamenteonipresentes.
SaibamaissobrePolimorfismo

Principais vantagens da POO


Aprogramaoorientadaaobjetostrazumaideiamuitointeressante:arepresentaodecada
elementoemtermosdeumobjeto,ouclasse.Essetipoderepresentaoprocuraaproximaro
sistemaqueestsendocriadoaoqueobservadonomundoreal,eumobjetocontm
caractersticaseaes,assimcomovemosnarealidade.Essetipoderepresentaotrazalgumas
vantagensmuitointeressantesparaosdesenvolvedoresetambmparaousuriodaaplicao.
Veremosalgumasdelasaseguir.
Areutilizaodecdigoumdosprincipaisrequisitosnodesenvolvimentodesoftwareatual.Com
acomplexidadedossistemascadavezmaior,otempodedesenvolvimentoiriaaumentar
exponencialmentecasonofossepossvelareutilizao.Aorientaoaobjetospermitequehaja
umareutilizaodocdigocriado,diminuindootempodedesenvolvimento,bemcomoonmerode
linhasdecdigo.Issopossveldevidoaofatodequeaslinguagensdeprogramaoorientadaa
objetostrazemrepresentaesmuitoclarasdecadaumdoselementos,eesseselementos
normalmentenosointerdependentes.Essaindependnciaentreaspartesdosoftwareoque
permitequeessecdigosejareutilizadoemoutrossistemasnofuturo.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

6/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

Outragrandevantagemqueodesenvolvimentoorientadoaobjetostrazdizrespeitoaleiturae
manutenodecdigo.Comoarepresentaodosistemaseaproximamuitodoquevemosnavida
real,oentendimentodosistemacomoumtodoedecadaparteindividualmenteficamuitomais
simples.Issopermitequeaequipededesenvolvimentonofiquedependentedeumapessoa
apenas,comoaconteciacomfrequnciaemlinguagensestruturadascomooC,porexemplo.
Acriaodebibliotecasoutropontoquemuitomaissimplescomaorientaoaobjetos.No
casodaslinguagensestruturadas,comooC,temosqueasbibliotecassocoleesde
procedimentos(oufunes)quepodemserreutilizadas.NocasodaPOO,entretanto,asbibliotecas
trazemrepresentaesdeclasses,quesomuitomaisclarasparapermitiremareutilizao.
Entretanto,nemtudoperfeionaprogramaoorientadaaobjetos.Aexecuodeuma
aplicaoorientadaaobjetosmaislentadoqueoquevemosnaprogramaoestruturada,por
exemplo.Issoacontecedevidocomplexidadedomodelo,quetrazrepresentaesnaformade
classes.Essasrepresentaesirofazercomqueaexecuodoprogramatenhamuitosdesvios,
diferentedaexecuosequencialdaprogramaoestruturada.Esseograndemotivoportrsda
prefernciapelalinguagemCemhardwarelimitado,comosistemasembarcados.Tambmo
motivopeloqualaprogramaoparasistemasmveiscomooGoogleAndroid,emboraemJava
(linguagemorientadaaobjetos),sejafeitaomenosorientadaaobjetospossvel.
Nomomentoatualemqueestamos,tecnologicamenteessaexecuomaislentanosentida.
Issosignificaque,emtermosdedesenvolvimentodesistemasmodernos,aprogramaoorientada
aobjetosamaisrecomendadadevidoasvantagensqueforamapresentadas.Essasvantagens
soderivadasdomodelodeprogramao,quebuscaumarepresentaobaseadanoquevemosno
mundoreal.
SaibamaissobrevantagensedesvantagensdaOrientaoaObjetos

Exemplos de Linguagens Orientadas a Objetos


Humagrandequantidadedelinguagensdeprogramaoorientadaaobjetosnomercado
atualmente.Nesseartigo,iremosapresentar3dasmaisutilizadasnomomento:Java,C#eC++.
Cadaumadelaspossuiumaabordagemdiferentedoproblemaqueastornamuitoboasparaalguns
tiposdeaplicaesenotoboasparaoutros.

Java

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

7/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

OJava,muitoprovavelmente,alinguagemdeprogramaomaisutilizadanomercadoatual.
AuxiliadopelapresenadoJRE(JavaRuntimeEnvironment),ouvariaesdele,emquasetodosos
dispositivoseletrnicosdomomento,alinguagemJavaumgrandesucessoentreos
desenvolvedores.OsucessodalinguagemaumentouaindamaiscomoGoogleAndroid,que
escolheuoJavacomolinguagempreferencialdedesenvolvimentodeaplicaes.
OJavaimplementaosquatropilaresdeformabastanteintuitiva,oquefacilitaoentendimentopor
partedodesenvolvedor.Aabstrao,oprimeiropilar,implementadoatravsdeclasses,que
contmpropriedadesemtodos,deformabastantesimples.Joencapsulamentorealizado
atravsdepropriedadesprivadas,auxiliadaspormtodosespeciaisgettersesetters,comomostra
aListagem1.ValeressaltarapalavrachavethismostradanomtodoSetId().Essapalavra
chavefuncionacomoumrepresentantedaclasseatual,umaautorefernciaaoprprioobjeto.
privateintid;

publicintGetId()
{
returnid;
{

publicvoidSetId(intid)
{
this.id=id;
}

Listagem1.EncapsulamentoemJava
AsquestesdeheranaepolimorfismonoJavasoumpoucomaiscomplexas.OJavapossui
heranasimples,oquesignificaquecadaclassepodeherdardeapenasumaoutra.Entretanto,o
JavapossuiaschamadasInterfaces,quepossuempropriedadeseassinaturasdemtodos.Essas
interfacesprecisamserimplementadasparafuncionar,oquesignificaqueumaclassepode
implementarvriasinterfaceseherdardeapenasumaclasse.Naquestodepolimorfismo,o
atributo@OverrideresponsvelporinformaraoJavaqueomtodoemquestoestsendo
reescrito.

C#

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

8/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

OC#,porsuavez,outradaslinguagensmaisutilizadasnomercado.Comooscomputadores
pessoaisnomundo,emsuamaioria,possuemosistemaoperacionalWindows,daMicrosoft,oC#
sepopularizou.IssoporqueoWindowsimplementaoFramework.NET,aoqualoC#est
associado.OC#umalinguagemdeusogeraleespecialmentecriadaparautilizaocoma
orientaoaobjetos.Valeressaltarque,emC#,tudoumobjeto(herdadaclasseobject).
Aabstraomuitosimples,esegueomodelodoJava.Aquestodeencapsulamentoumpouco
diferentedevidoaimplementaodosmtodosgetteresetter.Anomenclaturatambmum
poucodiferente.Avarivelquerealmenteguardaovalordodadochamadaatributo,enquantoa
propriedadeoelementoquerealmenteacessaaqueledadodomundoexterno.Issoest
mostradonaListagem2.Almdisso,oC#fazusodeduaspalavraschaveespeciais:geteset.
//Atributo
privateintid;

//Propriedade
publicintId
{
get;
set;
}

Listagem2.EncapsulamentoemC#
AquestodaheranaemC#tambmsegueomodelodoJava:heranasimpleseapossibilidade
deutilizaodeinterfaces.Aimportnciadasinterfacesmuitogrande,umavezqueelaspodem
darotipodosdados,quesomenteposteriormenteseroassociadosaumtiporeal,comomostra
aListagem3.IssotambmvlidoparaoJava.Porpadro,asidentidadesdasinterfaces
comeamcomaletraI.Opolimorfismo,porsuavez,baseadoemmtodosvirtuais(coma
palavrachavevirtual)naclassepaiereescritoscomapalavrachaveoverridenaclassefilha.
IExemploInterfaceexemplo;
exemplo=newImplementacaoIExemploInterface();

Listagem3.InterfacesemC#

C++

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

9/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

OC++,porsuavez,umalinguagemumpoucomaisprimitiva,epermitemuitomaisliberdades
comohardware.ComoelefoiderivadoimediatamentedoC,oC++permiteautilizaode
ponteiros,porexemplo,queirotrabalhardiretamentecomamemria.Almdisso,oC++pode
utilizartodasasbibliotecasCqueexistemdiretamente.
Emtermosdeabstrao,oC++implementaclasses,assimcomoqualquerlinguagemorientadaa
objetos.Eletambmpossuiosentidodeprivadoepblico,queutilizadoparaencapsulamento.
Esseencapsulamentorealizadoatravsdemtodosgetteresetter,muitosimilaraovistoem
Java,comomostraaListagem4.Reparequealistagemmostrasomenteaassinaturados
mtodosespeciais,sendoquesuaimplementaoamesmaqueemJava.Essetipodeadaptao
muitocomumemC++,ondeaclasseguardadaemumarquivo.hesuaimplementaoemum
arquivo.cpp.
private:
intid;
public:
intGetId()const;
voidSetId(intconstid);

Listagem4.EncapsulamentoemC++
AquestodaherananoC++umpoucodiferente.Alinguagempermiteaheranamltipla,oque
significaquecadaclassepodeherdardequantasclassesdesejar.Issopodecausarproblemasde
mtodosquepossuemomesmonome,portantoodesenvolvedorprecisaestaratento.O
polimorfismobaseadoemmtodosvirtuais,damesmaformacomooC#.Acomplexidade,
entretanto,maior,umavezquetemosquecuidardedetalhesdemaisbaixonvel,comoacessoa
memria.
Almdessasexemplificadas,existemoutraslinguagensquemerecemsercitadas.Entreelas,
podemoselencar:Python,linguagemdescriptorientadaaobjetosquemuitoutilizadaem
pesquisascientficasdevidoasuavelocidadeObjectPascal(tambmconhecidacomoDelphi,
devidoaonomedesuaIDE),apesardograndenmerodesistemasmaisantigosquea
utilizamObjectiveC,quealinguagemdeprefernciaparadesenvolvimentodeaplicaespara
ossistemasdaApple,comoiPhoneeiPadRuby,voltadaparaodesenvolvimentowebeVisual
Basic.NET,muitoutilizadaatpoucotempo,mastambmcaindoemdesuso,principalmente
devidoaoavanodoC#empopularidade.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

10/11

23/11/2016

POO:Os4pilaresdaProgramaoOrientadaaObjetos

Aolongodesseartigo,procuramoselencaroselementosquefazemdaprogramaoorientadaa
objetosumsucessonomomento.Vimososquatropilaresdesseparadigmaeentendemoscomo
elessoimplementadosemalgumasdaslinguagensmaisutilizadasnomercadode
desenvolvimento.Almdisso,entendemosalgumasdasvantagensquetornaramaprogramao
orientadaaobjetosumgrandesucessoparaodesenvolvimentodesistemasmodernos.
Cursorelacionado:Java:Introduoaorientaoaobjetos

porHenriqueMachado
Guru.netetecnologiasMS

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=9264

11/11