Professional Documents
Culture Documents
TiagoEugeniodeMelo
tiago@comunidadesol.org
www.tiagodemelo.info
Encapsulamento
Definio:
Mecanismoquecolocajuntosocdigo(mtodos)e
osdados(atributos),mantendooscontroladosem
relaoaoseunveldeacesso.
Oconceitodeencapsulamentoestintimamente
ligadoaoconceitodeocultamentodainformao
(informationhiding).
www.tiagodemelo.info
Encapsulamento
Umobjetoencapsulaestado(dados)emtodos
(cdigo)quepodemacessardados.
Ilustraodoconceitodeobjeto:
www.tiagodemelo.info
Encapsulamento
Objetivo:
Controlaroacessodeatributosemtodosdeum
objeto,atravsdeumainterfacebemdefinida.
Benefcios:
Manutenodesoftware;
Evoluodesoftware;
www.tiagodemelo.info
Encapsulamento
Exemplo:
Motordeumautomvel.
Omotoristanoprecisaterconhecimentotcnico
decomofuncionacadapartedomotor,mas
apenassaberqualasuafinalidadeecomous
lo.
www.tiagodemelo.info
Encapsulamento
Vantagens:
Protegerosatributosdoobjetoquanto
manipulaoporoutrosobjetos(proteocontra
acessonoautorizado,valoresinconsistentes,
entreoutraspossibilidades).
Esconderaestruturainternadoobjetodemodo
queainteraocomesteobjetosejarelativamente
simplese,medidadopossvel,sigaumpadro
dedesenvolvimentoquefaciliteoentendimentodos
programadoresqueoutilizem.
www.tiagodemelo.info
Abstraodedadose
encapsulamento
Asclasses,normalmente,ocultamosdetalhes
deimplementaodosseususurios.Issose
chamaocultamentodeinformaes.
Exemplo:
Omotoristadeumveculoaofazerusodomotordo
carroestusandoomotorparaselocomover,
pormnoprecisasaberdosseusdetalhesde
funcionamento.
www.tiagodemelo.info
Abstraodedadose
encapsulamento
Nesseexemplo,oclientesepreocupacoma
funcionalidadequeomotoroferece,masno
comoessafuncionalidadeimplementada.
Esseconceitoconhecidocomoabstraode
dados.
www.tiagodemelo.info
Abstraodedadose
encapsulamento
AProgramaoOrientadaaObjetos(POO)tem
comoprincipaisatividadesacriaodetipose
aexpressodeinteraesentreobjetosdesses
tipos.
www.tiagodemelo.info
Abstraodedadose
encapsulamento
Essaatividadeestdiretamenteassociada
noodetipoabstratodedados(ADT
abstractdatatype),quemelhoraoprocessode
desenvolvimentodeprogramas,poispermite
maisflexibilidadeaoprogramadornacriaode
novostiposdedados.
www.tiagodemelo.info
Abstraodedadose
encapsulamento
Assim,podeseafirmarqueumADTcaptura
duasnoes:representaodedadose
operaesquepodemserrealizadasnesses
dados.
ProgramadoresJavautilizamclassespara
implementartiposabstratosdedados.
www.tiagodemelo.info
EncapsulamentoemJava
OencapsulamentoemJavaocorrenas
classes.
Quandooprogramadorcriaumaclasse,ele
especificaocdigoeosdadosqueiroformar
essaclasse.
Esteselementosserochamadosdemembros
daclasse.
www.tiagodemelo.info
EncapsulamentoemJava
Ocomportamentoeainterfacedeuma
classesodefinidosapelosmtodosque
operamnasinstnciasdedados.
OencapsulamentoemJavaimplementado
atravsdosseusmodificadoresdeacesso
pblico,protegido,privadoeimplcito.
www.tiagodemelo.info
EncapsulamentoemJava
Considerandoqueoobjetivodeumaclasse
encapsularacomplexidade,existem
mecanismosparaocultaracomplexidadeda
implementaoqueestdentrodaclasse.
Cadamtodoouvarivelemumaclassepode
serdefinidacomopblica,privadaouprotegida.
www.tiagodemelo.info
EncapsulamentoemJava
Ainterfacedeumaclassepossibilitaquetodos
osusuriosexternospossamacessar
livrementeosdadosdaclassequeosmtodos
pblicospermitem.
Josmtodosprivadosestabelecemqueos
dadossomentepodemseracessadospelos
mtodosquesomembrosdaclasse.
www.tiagodemelo.info
EncapsulamentoemJava
Considerandoqueosmembrosprivadosde
umaclassespodemseracessadosporoutras
partesdoprogramaatravsdosmtodos
pblicosdestaclasse,oprogramadoremJava
podefazerusodoencapsulamentopara
garantirqueaesinapropriadasou
imprevistasnoocorram.
www.tiagodemelo.info
EncapsulamentoemJava
Assim,oprogramadoremJavadeveser
bastantecuidadosoaodefinirainterface
pblicadeumaclasseparanoexpor
demasiadamenteofuncionamentodaclasse.
www.tiagodemelo.info
EncapsulamentoemJava
Encapsulamentoemclasses
www.tiagodemelo.info
EncapsulamentoemJava
Omodificadorprivateomaisrestritivoe
nofoicriadoparaclasses,masapenaspara
membrosdeclasses.
Apesardisso,possvelempregaro
modificadorprivatenasclasses.
www.tiagodemelo.info
EncapsulamentoemJava
Advidacomumquesurge:comouma
classepodeacessarumaclasseprivada?
Asoluodeclararaclasseprivadacomo
sendointerna.
Exemplo:
www.tiagodemelo.info
Classesqueencapsulamvalores
primitivos
OstiposprimitivosemJavasooriundosde
classesquepossibilitamarepresentaode
valoresnativoscomoclasses,oque
particularmentetilparausoemmtodosque
esperamumargumentoquesejaumherdeiro
daclasseObject.
www.tiagodemelo.info
Classesqueencapsulamvalores
primitivos
Todasasclassesquecorrespondemaostipos
primitivosdeJavafazempartedopacote
java.lange,porisso,nonecessrio
nenhumcomandoimportparautilizlas.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Oencapsulamentorelacionaosdados
(atributos)comocdigo(mtodos)queos
manipula.
Oencapsulamentotambmforneceoutro
recursoimportantequeocontroledeacesso.
Atravsdosmodificadoresdeacesso,os
programadorespodemcontrolaroacessoaos
membrosdeumaclasse.
www.tiagodemelo.info
ModificadoresdeacessoemJava
atravsdessecontrolequeoprogramador
garantequenohaverumusoindesejadodos
dadosdeumadeterminadaclasse.
Normalmente,umaclassecriadacomouma
espciedecaixapreta,quepodeserusada,
porm,somenteatravsdosseusmtodos
pblicosqueforamcolocadosdisposio.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Omodificadordeacessoumainstruoque
definecomoummembrodeumaclassepoder
seracessado.
Javapossuiumricoconjuntodestes
modificadores.
Algunsaspectosdocontroledeacessoesto
relacionadosheranaeaoconceitode
pacotes.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Javapossuiosseguintesmodificadoresde
acesso:public,privateeprotected.
Javatambmdefineumnveldeacessopadro
(default)equeseaplicasomentequandoho
usodeherana.
Omododeacessodefaulttambmconhecido
comopacote(package).
www.tiagodemelo.info
ModificadoresdeacessoemJava
Dica
UmmembroemJavapodeterno
mximoummodificadorde
acesso.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Modificadordeacessopublic
Estemodificadorpermitequeomembropblico
sejaacessadoporqualqueroutrocdigodo
programa.
Omodificadordeacessopublicomaisliberale
que,portanto,exigemaiorresponsabilidadedo
programadoraoempreglo.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Modificadordeacessoprivate
Estemodificadordeterminaqueomembroprivado
spodeseracessadopormtodosdedentroda
prpriaclasse.
Omodificadordeacessoprivateomaisrestritivo
equedeveserempregadosemprequepossvel.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Modificadordeacessoprotected
Somenteosatributosemtodospodemser
declaradoscomoprotected.
Ummembroprotegidodeumaclasseest
disponvelatodasasclassesdomesmopacote,
exatamentecomoumrecursopadro.
Almdomais,umrecursoprotegidodeumaclasse
estdisponvelatodasassubclassesdaclasse
quepossuiorecursoprotegido.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Modificadordeacessopadro(default)
Quandonodeclaradootipodemoderador,Java
adotacomoopadro(default).
NoexisteapalavrachavedefaultemJava.
Osrecursosdefaultdeumaclassesoacessveisa
qualquerclassenomesmopacotequeaclasseem
questo.
www.tiagodemelo.info
ModificadoresdeacessoemJava
OquecaracterizaumpacoteemJava?
Quandoumprogramadorescreveumaplicativoque
envolvevriasclassesdiferentes,possvelque
mantenhatodososseuscdigos(arquivos.java)e
todososseusarquivosbinrios(arquivos.class)em
umnicodiretriodetrabalho.
Aoexecutarocdigo,oprogramadorofazapartir
daquelediretrio.
OambientedeexecuoJavaconsideraquetodosos
arquivosdeclassenodiretrioatualdetrabalho
constituemumpacote.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Oquepodeacontecerquandoumprogramador
Javacolocavriasclassesnummesmo
diretriosemsepreocuparcomo
encapsulamento?
Significaqueasclassesdestediretrioso
acessveisaquaisquerclassesdestediretrio,pois
comosefossemdomesmopacote.
Istopodelevararesultadosindesejados.
www.tiagodemelo.info
ModificadoresdeacessoemJava
Ordemderestriodosmodificadoresde
acesso(maisrestritoparamaisliberal):
www.tiagodemelo.info
Sintaxedosmoderadoresdeacesso
Resumo:
www.tiagodemelo.info
EfeitodosmoderadoresemJava
www.tiagodemelo.info
Usodosmtodosseteget
Hnecessidadedesetermtodospblicos
paraquesepossaacessarosatributosque,
emgeral,soprivados.
Opadroadotado,pelosprogramadoresem
Java,paraestesmtodossetNomeAtributo(.)
egetNomeAtributo(.)paramodificarereceber
osvaloresdosatributos,respectivamente.
www.tiagodemelo.info
Usodosmtodosseteget
Ento,qualarazodesecolocarosatributos
comoprivadosseexistemmtodosquepodem
acesslos?
Porquenotornloslogocomopblicos?
Emboraosmtodosset()eget()possamfornecer
acessoadadosprivate,oacessorestritopela
maneiracomoosmetodosforamimplementados
peloprogramador.Issoajudaadesenvolver
programasmaisseguroseconfiaveis.
www.tiagodemelo.info
Usodosmtodosseteget
Exemplo:
Umatributominutodeumaclasserelgio.
Sabesequeesseatributopoderecebervaloresno
intervalo[0..60].
Nofariasentidoqualquervalorforadesse
intervalo.
Nestecaso,recomendaseousodosmtodosgets
comoumaformadegarantiraintegridadedos
dadosdasclasses.
www.tiagodemelo.info
Usodosmtodosseteget
Dica
Osprojetistasdeclassenoprecisamfornecer
mtodosset()ouget()paracadaatributo
private.
Essascapacidadesdevemserfornecidas
somentequandofizeremsentido.
www.tiagodemelo.info
ResumodeacessoemJava
Deformaresumida,osmodosdeacessode
Javaso:
public:umrecursopblicoquepodeseracessado
porqualquerclasse.
protected:umrecursoprotegidospodeser
acessadoporumasubclassedaclassequepossui
orecurso,ouporummembrodomesmopacoteda
classequepossuiorecurso.
www.tiagodemelo.info
ResumodeacessoemJava
Deformaresumida,osmodosdeacessode
Javaso:
default:umrecursopadrospodeseracessado
porumaclassedomesmopacotequeaclasseque
possuiorecurso.
private:umrecursoprivadospodeseracessado
pelaclassequepossuiorecurso.
www.tiagodemelo.info
Atividades
Quaissoasrestriesimpostaspelos
comandospublic,protectedeprivateemJava?
Omodificadordeacessoimplcitoimpeas
mesmasrestriesdomodificadorprotected?
Justifiqueasuaresposta.
Omtodomaindeumaclassedeve,
obrigatoriamente,usaromodificadorpublic?
Justifiqueasuaresposta.
www.tiagodemelo.info
Atividades
CrieumaclasseemJavaque:a)contenhaos
atributosnome,idadeealtura;b)encapsuleos
atributos;c)crieummtodomainquemostre
osvaloresqueestonosatributos.
www.tiagodemelo.info
Atividades
CrieumaclasseRetangulo.Aclassetematributos
larguraealtura,ambossendodotipofloat.Aclasse
devetermtodosquecalculamopermetro
(perimetro())earea(area())doretngulo.Aclasse
temmtodossetegetparaalargura(largura)ea
altura(altura).Osmtodossetdevemverificarse
larguraealturaso,cadaum,nmerosdeponto
flutuantemaioresque0,0emenoresque20,0.
EscrevaumprogramaemJavaparatestaraclasse
Retangulo.
www.tiagodemelo.info
Atividades
ConsidereoPrograma3.4erespondas
seguintesquestes:
AclasseTemposegueosprincpiosdo
encapsulamento?Comentearespeito.
Comopossvelestenderocdigoparaatender
aosprincpiosdoencapsulamento?Quaisseriam
asvantagensqueistotraria?Faaasmodificaes
necessriasnocdigo.
www.tiagodemelo.info
Atividades
www.tiagodemelo.info