You are on page 1of 47

Encapsulamento

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

You might also like