Está en la página 1de 5

Las 4 Ps de

proteccin 04
JA
Bauman / Dcima

Java Electrotecnia
Las 4 Ps de proteccin
Java

Las cuatro Ps de proteccin


El lenguaje Java proporciona cuatro niveles de proteccin para los mtodos y variables de instancia:
public, private, protected y package (de hecho, este ultimo no es una forma explcita de
proteccin de Java, pero la he incluido aqu debido a que es una bonita aliteracin). Antes de aplicar
niveles de proteccin al cdigo propio se deber saber lo que significa cada forma y comprender las
relaciones fundamentales que puede tener un mtodo o variable dentro de una clase con las dems clases
del sistema.

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.

En muchas formas la proteccin pblica es muy similar a la proteccin de paquete predeterminada.


Ambas permiten que los mtodos y variables sean accedidos por otras clases del mismo paquete. La
diferencia sucede cuando se crean paquetes de clases. Las variables y mtodos con

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

Un resumen de las formas de proteccin


Las diferencias entre los diversos tipos de proteccin pueden llegar a ser muy confusos, en particular
en el caso de mtodos y variables protected. La tabla 17.1, que resume exactamente en dnde se
permite cada cosa, le ayudara a aclarar las diferencias entre las formas de proteccin menos restrictivas
(public) a las ms restrictivas (private).

Diferentes esquemas de proteccin.


Visibilidad public protected package private
Desde la misma clase S S S S
Desde cualquier clase en el mismo paquete S S S No
Desde cualquier clase fuera del paquete S No No No
Desde una subclase en el mismo paquete S S S No
Desde una subclase fuera del mismo paquete S S No No

POLITECNICO 5

También podría gustarte