Ocultamiento de información y acceso al conocimiento de objetos Lafilosofíadelanálisis,diseñoylaprogram Lafilosofíadelanálisis,d iseñoylaprogramaciónorientadaa aciónorientadaaobjetos(POO)define objetos(POO)define mecanismosparaqueunobjeto mecanismosparaqueunobjetoseaautónomo,c seaautónomo,capazdetomard apazdetomardecisionesquepuedan ecisionesquepuedan afectarloyrestringirademás,elaccesoq afectarloyrestringirademás,elaccesoquepuedantenerotro uepuedantenerotrosobjetosasuinform sobjetosasuinformación, ación, pormediodelocultamientoyladefinición pormediodelocultamientoyladefinicióndemétodosdeac demétodosdeaccesoasuconocim cesoasuconocimiento. iento.
Ocultamiento Elocultamientodeinformaciónseba Elocultamientodeinformaciónsebasaenlaposibilidadqu saenlaposibilidadquetienenlosobjetos,de etienenlosobjetos,de restringirelaccesoasuconocimiento,po restringirelaccesoasu conocimiento,porpartedeotrosobjetos rpartedeotrosobjetos,odeotraforma,definir ,odeotraforma,definir cuálessonloscriteriosylosmecanism cuálessonloscriterios ylosmecanismosparagarant osparagarantizardichoaccesoaq izardichoaccesoaquienesasílo uienesasílo requieran. Sedefinentresnivelesdevisibilidad,quepuedendefinirsepara Sedefinentresnivelesdevisibilidad,q uepuedendefinirseparaelconocimientoyel elconocimientoyel comportamientodeunobjeto.L comportamientodeunobjeto.Lainformacióndeu ainformacióndeunobjetopuedeser: nobjetopuedeser: •
Pública:Cualquierobjetopuedeteneraccesoaun Cualquierobjetopuedeteneraccesoaunmétodoounat métodoounatributo ributo
directamente,sinningunarestricción.E directamente,sinningunarestricción.EnJava,unmétodo nJava,unmétodoounatributopúb ounatributopúblicose licose representaanteponiendoasudefiniciónlapa representaanteponiendoasudefiniciónlapalabrareservada labrareservadapublic . •
Protegida:Cualquierobjetodea Cualquierobjetodealgunasubclase,od lgunasubclase,odeunaclasedelmism eunaclasedelmismopaquete opaquete
puedeteneraccesoalainformación.E puedeteneraccesoalainformación.EnJava,unmétodoo nJava,unmétodoounatributoproteg unatributoprotegidose idose representaanteponiendoasudefiniciónlapa representaanteponiendoasudefiniciónlapalabrareservada labrareservadaprotected . •
Privada:Soloobjetosdelamism Soloobjetosdelamismaclasepuedentenera aclasepuedenteneraccesoalainforma ccesoalainformación.EnJava, ción.EnJava,
unmétodoounatributoprivadoserep unmétodoounatributoprivadoserepresentaanteponiend resentaanteponiendoasudefiniciónla oasudefiniciónla palabrareservadaprivate . Estasdefinicionespermitenqueunac Estasdefinicionespermitenqueunaclasedefinalaformaen lasedefinalaformaenquequierequelosobjetos quequierequelosobjetos modeladosaccedanasuinform modeladosaccedanasuinformación.Usualmen ación.Usualmente,loquesedefineesquetodo te,loquesedefineesquetodoel el conocimientodeunobjetoseaprivado conocimientodeunobjetoseaprivado.Estotienesentido,d .Estotienesentido,dadoquelainforma adoquelainformacióndeun cióndeun objetosolodeberíaimportarlealmismoobjeto. Porejemplo,sihablamosdelaclase Estudiante,quedefinecomopartedesu conocimientosusnotasparciales,esta informaciónsololeconcierneaélyporlo tantodeberíaserprivada.
public class Estudiante { private float quiz1; private float quiz2; private float examenParcial1; private float examenParcial2; }
Ahora,silaclaseEstudiantesehadiseñadoconelobjetivodecalcularunconjuntode notasparciales,esnecesariodefinirestrategiasparaaccederasuinformación,siasíse requiere.
Accesoalconocimientodeunaclase Siluegodelprocesodediseño,esnecesarioaccederalainformacióndefinidaenlaclase estudiante,relacionadaconsusnotasparciales,esposiblehacerlodefiniendométodos queretornenestainformaciónyasí,formalizarunmecanismoparaqueestosuceda.En estecaso,laclasesemodificaría,paraincluirmétodosquepermitanaccederalos atributosexamenParcial1 yexamenParcial2 : public float getExamenParcial1() { return examenParcial1; } public float getExamenParcial2() { return examenParcial2; }
En Java, los métodos que permiten acceder a los atributos de una clase, se llaman getters y comienzanporelverbogeteningles,quesignificaobtener.
Modificacióndelconocimientodeunaclase Ahora,sinonosinteresarevelarnuestrasnotasparciales,tampocodeberíainteresarnos quealguiensinautorizaciónlasmodificara.Sinembargo,siesnecesario,deacuerdoal procesodediseño,esposiblehacerloatravésdeladefinicióndemétodos.Siserequiere porejemplo,modificarlainformacióndecadaunadelascuatronotas,esnecesariodefinir unmétodoparacadauna: public void setExamenParcial1(float examenParcial1) { this.examenParcial1 = examenParcial1; } public void setExamenParcial2(float examenParcial2) { this.examenParcial2 = examenParcial2; } public void setQuiz1(float quiz1) { this.quiz1 = quiz1; }
public void setQuiz2(float quiz2) { this.quiz2 = quiz2; }
EnJava,losmétodosquepermitenmodificarlosatributosdeunaclase,sellamansettersy comienzanporelverboseteningles,quesignificamodificar.
Heredandoconocimiento Elconocimientonotienequesersiempreprivado;encasosenlosqueseestablecen relacionesdeherenciaentreclasesdeobjetos,elconocimientoquesepretendeheredar, debeserporlomenos,protegido,paragarantizarquelassubclasestenganaccesoaesta información.
Representacióndenivelesdeaccesoendiagramasdeclases Esposiblerepresentarelniveldeaccesoquedefineunatributoounmétodoenun diagramadeclases,anteponiendoasudefiniciónun‘+’paradefinirqueespúblico,un‘‐‘ paradefinirqueesprivado,y‘#’paradefinirqueesprotegido.
Laclaseestudiante,quetienetodosuconocimientoprivado,serepresentaríaasí.Laclase automóvilencambio,cuentaconuncolor,devisibilidadpública,queusaparapintarsey unnúmerodepuertasqueesprivado;ademásdefinedosmétodos,unoparapintarse, queespúblicoyunoparacalcularelvalorapagarporunimpuesto,queesprivadoyse usaríacomoapoyoparaalgunaoperacióninternadelobjeto.