lunes, 8 de enero de 2018

Metodología de programación en Java. Capítulo 10. Modificadores de acceso.

Modificadores de acceso


Modificadores de acceso: PUBLIC, PRIVATE, PROTECTED, DEFAULT


 Los modificadores de acceso indican el nivel de accesibilidad que tendrá un miembro o un tipo desde otros miembros que lo referencien. Existen cuatro modificadores de acceso en Java.
-public: indica que se puede acceder a él desde cualquier punto.
-protected: permite acceder a los miembros protected de una clase base a través de los miembros de esa clase base y de los miembros de sus clases derivadas. Se puede combinar con internal.
-private: indica que sólo pueden acceder a él integrantes de la misma clase. Es el modificador por defecto si no se especifica uno.
-default: Java nos da la opción de no usar un modificador de acceso y al no hacerlo, el elemento tendrá un acceso conocido como default o acceso por defecto que permite que tanto la propia clase como las clases del mismo paquete accedan a dichos componentes (de aquí la importancia de declararle siempre un paquete a nuestras clases).

Modificadores de clases y métodos: STATIC, FINAL, ABSTRACT


-final (constante): declara un campo al que sólo se le puede asignar un valor como parte de la declaración o en un constructor de la misma clase.
-final (método): no puede ser redefinido por una subclase.
-final (class): una clase final es una clase que no puede ser extendida, es decir ninguna otra clase puede ser hija de ésta, será entonces una clase única y que no tendrá herencia o herederos al no poder ser extendida.
-abstract: indica que la clase sólo se usará para ser la base de otras clases.
-static: declara un miembro (método o campo) que pertenece a la clase y no a una instancia de ésta. 
-static (variable de instancia): Si se aplica a una variable de instancia esta conserva y comparte el mismo valor en todas las instancias de la clase.
-static (método): Si se aplica a un método este es accesible sin instanciar la clase. 

Modificadores de acceso para clases


Cuando creamos una clase podemos usar los siguientes modificadores de acceso:
-public: cualquiera puede acceder a ella (instanciarse, heredarse, etc).
-default (ninguno): sólo pueden acceder a ella desde el mismo package.

Modificadores para herencia (se pueden combinar con los anteriores)


-final: la clase no puede ser heredada (no puede tener subclases). Se puede combinar con public.
-abstract: la clase no puede ser instanciada. Se puede combinar con public.

La clase no puede ser private ya que no podría accederse a ella.
Una clase no puede ser abstract y final al mismo tiempo.

Modificadores de acceso para variables de instancia


-public: se puede acceder desde cualquier otra parte del programa.
-protected: sólo puede accederse desde el mismo package u otras subclases.
-default (ninguno): sólo puede accederse desde el mismo package.
-private: sólo puede accederse desde la misma clase. En el caso de la herencia se puede acceder a una variable de instancia a través de sus métodos (setters, getters) públicos.

Modificadores para herencia (se pueden combinar con public, protected, default y private)


-final: convierte la variable en una constante. Se puede iniciar cuando se declara o desde el constructor.
-abstract: se utiliza para indicar que la clase no se puede instanciar y sólo será heredada.

Otros modificadores (se pueden combinar con public, protected, default y private)


-static: la variable pasa a tener ámbito de clase (y no de objeto o instancia). Una variable static es única para todas las instancias de ese objeto y su valor se comparte. 

Una variable no puede ser abstract por que para tener esa variable habría que instanciar el objeto.

Modificadores de acceso para métodos


-public: se puede acceder desde cualquier otra parte del programa.
-protected: sólo puede accederse desde el mismo package u otras subclases.
-default (ninguno): sólo puede accederse desde el mismo package.
-private: sólo puede accederse desde la misma clase.

Modificadores para herencia (se pueden combinar con public, protected, default y private):


-final: hace que el método no pueda sobreescribirse en una subclase.
-abstract: se utiliza para indicar que el método no será implementado y será heredado en una subclase (donde deberá ser implementado o la subclase deberá ser, también, abstracta). Si una clase contiene un método abstracto debe ser abstracta.

Otros modificadores (se pueden combinar con public, protected, default y private):


-static: el método puede ser llamado sin instanciar la clase. Un método static sólo puede acceder a variables y métodos static.

Modificadores de acceso para variables locales


-final: convierte la variable en una constante. Si creamos una constante que referencie a un objeto lo que es final es la constante, es decir, que no podemos asignarle otra referencia. El objeto en sí puede cambiar.

No pueden aplicarse los modificadores de acceso a las variables locales. No encontraremos ningún caso en el que un modificador de acceso sea aplicado a una variable local. Cualquier variable local declarada con un modificador de acceso no compilará. Solo hay un modificador que puede ser aplicado a las variables locales, y es final.

Modificadores de acceso para interfaces


 Una interfaz es un tipo de dato abstracto, similar a una clase, que define una lista de métodos public abstract que cualquier clase que implemente a la interfaz debe implementar. Una interfaz también puede incluir constantes public static final, métodos default y métodos static.

 El compilador automáticamente añade public a todos los métodos de la interfaz y abstract  a todos los métodos no-static y no-default. 

Si una interfaz sólo tiene un método public abstract es una interfaz funcional (puede tener uno o más métodos default).

 Una interfaz puede implementar métodos siempre y cuando incluya el modificador default.

Mecanismos de sincronización: VOLATILE y SYNCRHONIZED.


-volatile: indica que un campo puede ser modificado en el programa por el S.O., el hardware o un hilo concurrente en ejecución.
-synchronized: En caso de que necesitemos atomicidad podemos recurrir a synchronized o a cosas más avanzadas, como las clases del API java.util.concurrent de Java 5. synchronized se diferencia de volatile entre otras cosas en que este modificador se utiliza sobre bloques de código y métodos, y no sobre variables. Al utilizar synchronized sobre un bloque se añade entre paréntesis una referencia a un objeto que utilizaremos a modo de lock.

Ejemplos con métodos:
public static void main(string[] args){}
private int sumar(int, int){}
internal double dividir(double, double){}
protected internal void NombreMetodo(){}

Ejemplos con campos:
final tipo variable = valor;
private final tipo variable = valor; // Variable de sólo lectura. Constructor.

No hay comentarios:

Publicar un comentario