Sunteți pe pagina 1din 10

17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos

Buscar

favorito(50) marcarcomolido tirardvidas

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.

(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.

Saiba mais sobre Orientao a Objetos

Programao Estruturada vs Programao Orientada a Objetos

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.

Saiba mais sobre Orientao a Objetos x Programao Estruturada

Os 4 pilares da Programao Orientada a Objetos

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.

Saiba mais sobre Abstrao

Encapsulamento

Oencapsulamentoumadasprincipaistcnicasquedefineaprogramaoorientadaaobjetos.Setratadeumdoselementosque

adicionamseguranaaplicaoemumaprogramaoorientadaaobjetospelofatodeesconderaspropriedades,criandouma

espciedecaixapreta.

Amaiorpartedaslinguagensorientadasaobjetosimplementamoencapsulamentobaseadoempropriedadesprivadas,ligadasa

mtodosespeciaischamadosgettersesetters,queiroretornaresetarovalordapropriedade,respectivamente.Essaatitudeevitao

acessodiretoapropriedadedoobjeto,adicionandoumaoutracamadadeseguranaaplicao.

Parafazermosumparalelocomoquevemosnomundoreal,temosoencapsulamentoemoutroselementos.Porexemplo,quando

clicamosnobotoligardateleviso,nosabemosoqueestacontecendointernamente.Podemosentodizerqueosmtodosque

ligamatelevisoestoencapsulados.

Saiba mais sobre Encapsulamento

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

Saiba mais sobre Polimor smo

Principais vantagens da POO

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.

Saiba mais sobre vantagens e desvantagens da Orientao a Objetos

Exemplos de Linguagens Orientadas a Objetos

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

Ajudenosaevoluir:vocgostoudopost? (60) (2)

Compartilhe:

Ficoucomalgumadvida?

Postaquisuadvidaoucomentrioquenossaequiperesponderomaisrpidopossvel.

Maisposts
Novidade

Qual a boa do m de semana? PROGRAMAO

Artigo

Orientao a Objetos com Ruby POO RUBY

Artigo

Sobrecarga e sobreposio de mtodos em orientao a objetos PROGRAMAO

Artigo

Programao Funcional: cdigo limpo e padres de projeto JAVA PADRESDEPROJETOS PROGRAMAO FUNCIONAL

Guia

Guia PHP PHP ZENDFRAMEWORK POO YII JQUERY

Listar mais contedo

Publique | Assine | Faleconosco


http://www.devmedia.com.br/os4pilaresdaprogramacaoorientadaaobjetos/9264 8/10
17/11/2016 POO:Os4pilaresdaProgramaoOrientadaaObjetos

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