19 mayo, 2020

1. Encapsulamiento: control de acceso


1. CONTROL DE ACCESO Y ENCAPSULAMIENTO 

Una clase puede controlar qué partes de un programa pueden acceder a los miembros de su clase: variables miembro y métodos miembro. Una clase bien diseñada impide el acceso directo a sus variables miembro proporcionando a cambio un conjunto de métodos de acceso que sirvan como intermediarios entre las variables miembro y el mundo exterior. Esto permite controlar el uso correcto de las variables miembro, pues los métodos de acceso pueden actuar como filtros que prueben los datos que se pretenden ingresar a las variables miembro. Por otra parte, algunos métodos de la clase pueden ser necesarios sólo desde el interior de la clase por lo que deben quedar restringidos sólo para uso interno. 

Para controlar el acceso a los miembros de una clase, se usan especificadores o modificadores de acceso que se anteponen a las declaraciones de los miembros a controlar. Los especificadores de acceso son public, private y protected. Se ve la aplicación del especificador de acceso protected cuando se trabaja con herencia, por lo que lo veremos más adelante. En la tabla que sigue, se muestra el uso de los especificadores de acceso.

La primera columna indica si la propia clase tiene acceso al miembro definido por el especificador de acceso. La segunda columna indica si las subclases de la clase (sin importar dentro de qué paquete se encuentren estas) tienen acceso a los miembros. La tercera columna indica si las clases del mismo paquete que la clase (sin importar su parentesco) tienen acceso a los miembros. La cuarta columna indica si todas las clases tienen acceso a los miembros. 

Encapsulamiento es la capacidad de ocultar los detalles internos del comportamiento de una clase y exponer o dar a conocer sólo los detalles que sean necesarios para el resto de clases. Este ocultamiento nos permite restringir y controlar el uso de la clase. Restringir, porque habrán ciertos atributos y métodos privados o protegidos y controlar, porque habrán ciertos mecanismos para modificar el estado de nuestra clase como, por ejemplo, los métodos de acceso. 

Ejemplo 1: 

Haga que las variables miembro de la clase Alumno sean de uso privado y declare sus respectivos métodos de acceso: get/set.
package semana2;
public class Alumno {
   // Variables miembro
   private String nombre;
   private int nota1, nota2;
   
   // Constructor
   public Alumno(String nom, int n1, int n2) {
      nombre = nom;
      nota1 = n1;
      nota2 = n2;
   }

   // Métodos de acceso: get
   public String getNombre() {
      return nombre;
   }
   public int getNota1() {
      return nota1;
   }
   public int getNota2() {
      return nota2;
   }

   // Métodos de acceso: set
   public void setNombre(String nom) {
      nombre = nom;
   }
   public void setNota1(int n) {
      nota1 = n;
   }
   public void setNota2(int n) {
      nota2 = n;
   }

   // Operaciones
   public double promedio() {
      return (nota1 + nota2) / 2.0;
   }
}

A la pulsación de un botón, cree el objeto y, a la vez, inicialice sus variables miembro. Luego, modifique sus notas.
void procesar() {
   Alumno a = new Alumno("Juan",13,15);
   listado(a);
   a.setNota1(19);
   a.setNota2(18);
   listado(a);
}

void listado(Alumno x) {
   imprimir("nombre : " + x.getNombre());
   imprimir("nota 1 : " + x.getNota1());
   imprimir("nota 2 : " + x.getNota2());
   imprimir("promedio : " + x.promedio());
}

Resultado:
nombre : Juan
nota 1 : 13
nota 2 : 15
promedio : 14.0

nombre : Juan
nota 1 : 19
nota 2 : 18
promedio : 18.5

2. ASIGNACIÓN ENTRE VARIABLES REFERENCIA 

Cuando se asigna la variable referencia ra a la variable referencia rb, se asigna la dirección de memoria contenida en ra. Luego de ello, tanto ra como rb referencian (controlan) al mismo objeto. 

Ejemplo 2:
Cilindro ra = new Cilindro(2,5);
Cilindro rb;


rb = ra;


Note que a partir de este momento tanto ra como rb se refieren al mismo objeto.
rb.setRadio(8);

Cambia por 8 el valor del radio del objeto a través de la referencia rb.


imprimir(“Radio : “ + ra.getRadio());

Extrae el valor del radio del objeto a través de la referencia ra e imprime 8. 

Ejemplo 3: 

A la pulsación de un botón, cree el objeto a de la clase Alumno inicializando sus variables miembro. Luego, a través de la referencia b, modifique las notas.
void procesar() {
   Alumno a = new Alumno("Juan",13,15);
   listado(a);
   Alumno b = a;
   b.setNota1(19);
   b.setNota2(18);
   listado(a);
}

Resultado:

nombre : Juan
 nota 1 : 13
 nota 2 : 15
 promedio : 14.0

 nombre : Juan
 nota 1 : 19
 nota 2 : 18
 promedio : 18.5

Descargar ejercicios:
Descargar archivo

Preguntas:

¿Qué es control de acceso y encapsulamiento? 
¿Qué es un modificador de acceso? 
¿Qué son los métodos de acceso?
¿En que consiste la asignación entre variables referencia?

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!