Documentos de Académico
Documentos de Profesional
Documentos de Cultura
proteccin 04
JA
Bauman / Dcima
Java Electrotecnia
Las 4 Ps de proteccin
Java
Proteccin: de paquete
La primera forma de proteccin es aquella que se ha estado usando inconscientemente todo el tiempo:
la proteccin de paquete.
La proteccin de paquete no es un modificador explcito que se pueda aadir a la definicin de un
mtodo o variable, sino que, en vez de ello, es la proteccin predeterminada que se obtiene cuando no se
aade ningn modificador de proteccin a esas definiciones.
Solamente las funciones que estn dentro de un archivo fuente dado puedan verlo. Java no tiene este
tipo de control, ya que los nombres sern encontrados satisfactoria mente en otros archivos fuente,
siempre y cuando Java sepa dnde encontrarlos. En vez de la proteccin a nivel archivo Java tiene el
concepto de paquetes, que son un grupo de clases relacionadas por objetivo o funcin.
Los mtodos y variables que tienen proteccin de paquete son visibles para todas las dems clases que
estn en el mismo paquete, pero no para las que estn fuera del paquete. Este es el tipo de proteccin
que se ha estado usando hasta este punto, y no es mucha proteccin que digamos. La mayora de las
veces se tendr que ser ms explcito cuando se refiera la proteccin para los mtodos y variables de
clase.
La proteccin de paquete, el nivel de proteccin predeterminado, significa que los mtodos y variables
son accesibles para todas las demas2clases del mismo paquete.
Tal vez no piense que ha estado usando paquetes hasta este punto, pero as ha sido. En Java, si no se
pone explcitamente una clase en un paquete ser incluida en un paquete predeterminado, que es definido
esencialmente como todas las clases que estn en el mismo directorio. Por lo tanto, todas las clases que
se ponen en un solo directorio son parte de su propio paquete implcito y pueden ser usadas por otras
clases de ese directorio.
Proteccin: privada
A partir de la proteccin predeterminada que se obtiene con la proteccin de paquete, se puede ser
ms restrictivo o ms relajado en la manera en que se controla la visibilidad y el acceso a los mtodos y
variables. La forma mas restrictiva de proteccin es la privada, la cual limita la visibilidad de los mtodos y
variables de instancia a la clase en la cual estn definidos. Por ejemplo, una variable de instancia
private puede ser usada por mtodos que estn en el interior de la misma clase, pero no puede ser
vista 0 usada por ninguna otra clase u objeto. En forma similar, los mtodos privados pueden ser llamados
por otros mtodos que estn en el interior de la misma clase, pero no por ninguna otra clase. Adems, ni
las variables private ni los mtodos private son heredados por las subclases.
2 POLITECNICO
La proteccin privada significa que los mtodos y variables son accesibles solamente para otros
mtodos de la misma clase.
Para crear un mtodo o variable de instancia privado aada el modificador private a su definicin:
class Escritor {
private boolean blockDeEscritor = true;
private String animo;
private int ingreso = o;
private void obtenerIdea(Inspiracin in) {
}
Captulo crearLibro( int numDas, long numPginas ) {
}
}
En este fragmento de ejemplo de cdigo, los datos miembros de la clase Escritor (las variables
blockDeEscritor, animo, ingreso y el mtodo obtenerIdea()) son todos privados. El nico
mtodo accesible desde fuera de la clase Escritor es el mtodo crearLibro(). La nica cosa que los
dems objetos (Editores?) pueden pedir que haga el objeto Escritor es crearLibro(), ya que los
dems datos son detalles de implementacin que pueden afectar la manera en que esta escrito el libro,
pero no necesitan ser visibles o accesibles desde otras fuentes.
La regla prctica para la proteccin privada es que cualquier dato o comportamiento interno de la clase
que no deben tocar en forma independiente otras clases o subclases debe ser privado. El uso adecuado de
las variables y mtodos private es la manera en que se limita la funcionalidad de la clase a nicamente
aquellas caractersticas que se quieren que sean visibles fuera de la clase, como sucede con el ejemplo
de los componentes de la PC. Recuerde que el trabajo primario de un objeto es encapsular sus datos, para
ocultarlos del mundo y limitar su manejo. Ello separa el diseo de la implementacin, minimiza la cantidad
de informacin que una clase necesita saber de otra para completar su trabajo y reduce el alcance de los
cambios de cdigo que se necesiten hacer, si es que cambia la implementacin interna.
Adems de escoger cuales mtodos se quieren mantener privados y cuales se quiere tener accesibles
hacia otros, una regla prctica general es que todas las variables de instancia de una clase deben ser
privadas, y que se deben crear mtodos especiales que no sean privados para obtener o cambiar esas
variables. Mas tarde, en la seccin "Proteccin de variables de instancia y mtodos de acceso", aprender
mas acerca de esta regla y por que es importante.
Proteccin: pblica
Lo diametralmente opuesto a la proteccin privada, y la forma de proteccin menos restrictiva, es la
pblica. Un mtodo o variable que es declarado con el modificador public es accesible para la clase en la
que esta definido, para todas las subclases de esa clase, todas las clases del paquete y para cualquier otra
case que este fuera del paquete en cualquier lugar del universo entero de las clases Java.
La Proteccin pblica significa que los mtodos y variables son accesibles para otros mtodos que estn
en cualquier lugar dentro o fuera de la clase o paquete actual.
El indicar que un mtodo o variable es public no es necesariamente algo malo. As como ocultar los
datos internos de la clase mediante private ayuda a encapsular un objeto, el uso de mtodos pblicos
POLITECNICO 3
Las 4 Ps de proteccin
Java
define con precisin lo que es la interfaz para las instancias de la clase. Si se espera que la clase sea
reutilizada por otros programadores en otros programas, los mtodos de la clase; que ellos usaran deben
ser pblicos.
, A, proteccin de paquete pueden usarse en las clases que existan en el mismo paquete. Pero si
alguien importa la clase a su propio programa desde fuera del paquete, esos mtodos y variables no sern
accesibles a menos que hayan sido declarados public.
Las declaraciones pblicas funcionan en forma similar a las privadas; simplemente se sustituye la
palabra public por private.
Proteccin: protegida
La ltima forma de proteccin disponible en Java se refiere a la relacin entre una clase y sus subclases
presentes y futuras declaradas dentro o fuera de un paquete. Estas subclases estn mucho ms cercanas
a una clase particular que cualquier otra clase externa por las siguientes razones:
? Las subclases, por lo general, conocen ms acerca de la implementacin interna de una superclase.
? Las subclases son escritas frecuentemente por usted 0 por alguien a quien se le ha dado el cdigo
fuente.
Las subclases frecuentemente necesitan modificar 0 mejorar la representacin de los datos que estn
dentro de una clase madre.
Para soportar un nivel especial de visibilidad reservado para las subclases, y que sea un poco menos
restrictivo que private, Java tiene un nivel intermedio de acceso entre paquete y privado llamado,
adecuadamente, protegido. Los mtodos y variables protegidos son accesibles para cualquier clase que
este dentro del paquete como lo seran si estuvieran con proteccin de paquete, pero esos mtodos y
variables tambin estn disponibles para cualquier subclase de la clase que haya sido definida fuera del
paquete.
La proteccin protegida significa que los mtodos y variables son accesibles para todas las clases que
estn dentro del paquete, pero s10 para las subclases que estn fuera del paquete.
En C++ el modificador protected significa que solamente las subclases pueden acceder un mtodo o
variable, punto. El significado de protected en Java es ligeramente diferente, pues permite que tambin
cualquier clase que este dentro del paquete acceda esos mtodos y variables.
4 POLITECNICO
Por que se necesitara hacer esto? Tal vez tenga mtodos en la clase que sean especficos a su
implementacin interna, esto es, no se pretende que se usen por el pblico en general, pero que sean
tiles a las subclases para su propia implementacin interna. En este caso, el desarrollador de la subclase,
ya sea usted o cualquier otra persona, puede tener la seguridad de que va a ser capaz de manejar el
llamado o la especializacin de ese mtodo.
Por ejemplo, digamos que se tiene una clase llamada AudioPlayer, que reproduce un archivo de
audio digital. AudioPlayer tiene un mtodo llamado abrirSpeaker(), que es un mtodo interno que
interacta con el hardware para preparar la bocina y que pueda sonar. abrirSpeaker() no es
importante para nadie fuera de la clase AudioPlayer, por lo que a primera vista se podra hacer privado.
Un fragmento de AudioPlayer podra verse como lo siguiente:
class AudioP1ayer {
private boo1ean abrirSpeaker(Speaker sp) {
// detalies de implementacin
}
}
NOTA TECNICA
Esto funciona bien si no se van a derivar subclases de AudioPlayer. Pero que tal si se va a crear
una clase llamada StereoAudioPlayer que sea una subclase de AudioPlayer? Esta clase podra
necesitar acceso al mtodo abrirSpeaker() para sobreponerlo y proporcionar la inicializacin especifica
para bocinas estreo. Aun as no seria necesario que el mtodo fuera disponible en trminos generales
para cualquier objeto (y, por lo tanto, no deber ser publico), pero se requiere que la subclase tenga
acceso a el por lo tanto, la solucin es protegido.
POLITECNICO 5