Para resumir el contenido anterior, objeto se refiere a una determinada cosa y clase se refiere al tipo de objeto. Los objetos pueden tener estados y acciones, es decir, miembros de datos y métodos.
Hasta ahora, los miembros de datos y los métodos han estado abiertos a usuarios internos y externos. Dentro del objeto, usamos esto para llamar a los miembros y métodos de datos del objeto. Fuera del objeto, por ejemplo cuando llamamos al objeto en otra clase, podemos usar miembros object.data y object.method() para llamar a los miembros y métodos de datos del objeto.
Vamos a encapsular los miembros del objeto (los miembros incluyen miembros de datos y métodos), permitiendo así que solo se llame a algunos miembros desde el exterior. Usando la encapsulación, podemos mejorar la facilidad de uso y la seguridad de los objetos.
Encapsulación e interfaz
La encapsulación es un término común para las computadoras, lo que significa conservar una interfaz externa limitada y ocultar detalles de implementación específicos. Por ejemplo, en la arquitectura Linux, puede ver que el sistema operativo Linux encapsula los detalles específicos del hardware subyacente y conserva solo la interfaz de llamada del sistema. El usuario está fuera del paquete y solo puede realizar las operaciones requeridas a través de la interfaz.
La encapsulación es muy común en la vida. Por ejemplo, aquí tienes una linterna recargable:
Incluso sin leer el manual, un usuario puede adivinar el funcionamiento de esta linterna: encender y cargar. Esta linterna utiliza una carcasa de plástico para ocultar los detalles internos que los usuarios no necesitan tocar, dejando solo dos interfaces, el interruptor y el enchufe eléctrico. Al utilizar estas dos interfaces, los usuarios pueden utilizar las funciones para las que está diseñado el producto. Si todos los detalles se exponen al usuario al mismo tiempo, el usuario se sentirá abrumado por el producto (como el control remoto sin cáscara que se muestra a continuación). Por tanto, la encapsulación mejora la facilidad de uso del producto.
Si el producto no está empaquetado, muchos detalles de la linterna o del mando a distancia quedarán expuestos al usuario: batería, circuito, goma sellada, etc. Aunque esto permite a los usuarios operar el producto con mayor libertad, como descargar directamente la batería, sacar una luz LED, etc. Sin embargo, los usuarios suelen correr un mayor riesgo de dañar el producto. Por tanto, la encapsulación mejora la seguridad del producto.
Un producto de software Java es lo mismo que un producto cotidiano. Un objeto puede tener muchos miembros (miembros de datos y métodos) en su interior. Algunos miembros y métodos de datos se utilizan únicamente internamente. En este momento, esperamos tener un mecanismo para "empaquetar" el objeto para encapsularlo. De esta manera, los usuarios pueden aprender y utilizar más fácilmente interfaces externas sin tener que contactar a miembros internos.
Encapsulación de miembros de objetos.
Java utiliza tres palabras clave para controlar la visibilidad externa de los miembros de un objeto: público, privado y protegido.
1.público: el miembro es visible externamente, es decir, el miembro es parte de la interfaz
2.privado: este miembro no es visible desde el exterior y solo se puede utilizar internamente y no se puede acceder a él desde el exterior.
(protegido implica el concepto de herencia, que se discutirá más adelante)
Primero encapsulemos la clase Humana previamente definida:
Copie el código de código de la siguiente manera:
prueba de clase pública
{
principal vacío estático público (String [] argumentos)
{
Humano aPersona = nuevo Humano(160);
System.out.println(aPerson.getHeight());
unaPersona.growHeight(170);
System.out.println(aPerson.getHeight());
unaPersona.repeatBreath(100);
}
}
claseHumano
{
/**
* constructor
*/
humano público (int h)
{
esta.altura = h;
System.out.println("Nací");
}
/**
*accesor
*/
público int getHeight()
{
devolver esta altura;
}
/**
* mutador
*/
altura de crecimiento del vacío público (int h)
{
esta.altura = esta.altura + h;
}
/**
* encapsulado, para uso interno
*/
aliento vacío privado ()
{
System.out.println("hu...hu...");
}
/**
* llamar a la respiración()
*/
repetición de vacío públicoRespiración (int rep)
{
ent yo;
para(i = 0; i < rep; i++) {
este.respiración();
}
}
altura int privada; // encapsulado, para uso interno
}
Los métodos internos no se ven afectados por la encapsulación. Los métodos internos de los humanos pueden llamar a cualquier miembro, incluso la altura y la respiración () configuradas en privado.
Los métodos externos solo pueden llamar a miembros públicos. Cuando estamos fuera de Human, como en Test, solo podemos llamar a miembros especificados como públicos en Human, pero no a miembros especificados como privados.
A través de la encapsulación, la clase Humana solo conserva los siguientes métodos como interfaces:
1.obtenerAltura()
2.crecerAltura()
3.repAliento()
Podemos representar la clase Humana y su interfaz de la siguiente manera:
"Mando a distancia con estuche"
Si forzamos la altura de la llamada desde principal:
Copie el código de código de la siguiente manera:
System.out.println(aPerson.height);
Aparecerá el siguiente mensaje de error:
Copie el código de código de la siguiente manera:
Test.java:6: la altura tiene acceso privado en Humano
System.out.println(aPerson.height);
^
1 error
¡Bip, recibiste una descarga eléctrica! Un miembro declarado como privado no puede ser llamado externamente.
En la especificación habitual de Java, los miembros de datos que expresan el estado (como la altura) se configuran como privados. Las modificaciones a los miembros de datos deben realizarse mediante los métodos proporcionados por la interfaz (como getHeight() y growHeight()). Esta especificación desempeña un papel en la protección de los datos. Los usuarios no pueden modificar los datos directamente y deben utilizar los métodos correspondientes para leer y escribir datos. Los diseñadores de clases pueden agregar especificaciones de uso de datos a los métodos de interfaz.
encapsulación de clases
En un archivo .java, existe y solo puede haber una clase con la palabra clave pública, como la clase Test anterior. Entonces, desde cualquier otra clase, podemos llamar a esta clase directamente. La clase humana no tiene palabras clave. Anteriormente, los miembros de nuestros objetos no tenían palabras clave. Esta falta de palabras clave también representa una especie de visibilidad, en la que profundizaré cuando explique los paquetes.
Practique encapsulando una clase Antorcha para representar una linterna. La interfaz tiene conmutación y carga. Los miembros internos tienen poder.
Resumir
encapsulación, interfaz
privado, público