JavaRush /Blog Java /Random-ES /Principios de encapsulación en Java

Principios de encapsulación en Java

Publicado en el grupo Random-ES
¡Hola! La conferencia de hoy estará dedicada a la encapsulación y la comenzaremos de inmediato con ejemplos :) Frente a usted hay una máquina de refrescos familiar. Tengo una pregunta para ti: ¿cómo funciona? Intenta responder en detalle: de dónde viene el vaso, cómo se mantiene la temperatura en el interior, dónde se almacena el hielo, cómo entiende la máquina qué almíbar añadir, etc. Lo más probable es que no tenga respuestas a estas preguntas. Bueno, tal vez no todo el mundo utilice este tipo de máquinas; hoy en día no son tan populares. Intentemos dar otro ejemplo. Algo que sabes que usas muchas veces al día. ¡Tengo una idea! Principios de encapsulación - 2 Cuéntanos cómo funciona el buscador de Google . ¿Cómo busca exactamente información basándose en las palabras que ingresó? ¿Por qué estos resultados están en la cima y no otros? Aunque utilices Google todos los días, probablemente no lo sepas. Pero no es importante. Después de todo, no es necesario que lo sepas. Puede ingresar consultas en un motor de búsqueda sin pensar en cómo funciona exactamente. Puedes comprar refrescos en una máquina expendedora sin saber cómo funciona. Se puede conducir un coche sin profundizar en el funcionamiento del motor de combustión interna, y sin saber nada de física, ni siquiera a nivel escolar. Todo esto es posible gracias a uno de los principios fundamentales de la programación orientada a objetos: la encapsulación . Al leer varios artículos sobre este tema, probablemente se haya encontrado con el hecho de que existen dos conceptos comunes en la programación: encapsulación y ocultación . Y con la palabra "encapsulación" los autores se refieren a una cosa u otra (da la casualidad). Desglosaremos ambos términos para que tenga una comprensión completa. El significado original de la palabra " encapsulación " en programación es la combinación de datos y métodos para trabajar con estos datos en un paquete ("cápsula"). En Java, la clase actúa como un paquete cápsula . Una clase contiene datos (campos de clase) y métodos para trabajar con estos datos. Principios de encapsulación - 3 Esto te parece obvio, pero en otros conceptos de programación todo funciona de manera diferente. Por ejemplo, en la programación funcional, los datos están estrictamente separados de las operaciones realizadas sobre ellos. En POO (programación orientada a objetos), los programas constan de clases cápsula, que son tanto datos como funciones para trabajar con ellos. Ahora hablemos de esconderse . ¿Cómo es posible que utilicemos todo tipo de mecanismos complejos sin entender cómo funcionan y en qué se basa su trabajo? Es simple: sus creadores han proporcionado una interfaz sencilla y fácil de usar.. En una máquina de refrescos, la interfaz son botones en un panel. Al presionar un botón, seleccionas el volumen del vaso. Al presionar el segundo, seleccionas el almíbar. El tercero se encarga de añadir hielo. Y eso es todo lo que tienes que hacer. No importa cómo esté exactamente diseñada la máquina por dentro. Lo principal es que está diseñado de tal manera que para obtener refresco, el usuario debe presionar tres botones . Lo mismo ocurre con un coche. No importa lo que esté pasando dentro de él. Lo principal es que cuando pisas el pedal derecho, el coche avanza y cuando pisas el pedal izquierdo, frena . Ésta es precisamente la esencia del ocultamiento. Todos los "interiores" del programa están ocultos para el usuario. Para él, esta información es superflua e innecesaria. El usuario necesita el resultado final, no el proceso interno. Veamos la clase como ejemplo Auto:
public class Auto {

   public void gas() {

       /*algunas cosas complicadas están pasando dentro del coche
       por lo que sigue adelante*/
   }

   public void brake() {

       /*algunas cosas complicadas están sucediendo dentro del auto
       como resultado de lo cual disminuye la velocidad*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // Cómo se ve todo para el usuario

       // presionó un pedal - fue
       auto.gas();

       //presionó otro pedal - frenó
       auto.brake();
   }
}
Así es como se ve la implementación oculta en un programa Java. Todo es como en la vida real: el usuario dispone de una interfaz (métodos). Si necesita el coche en el programa para realizar una acción, sólo necesita llamar al método deseado. Y lo que sucede dentro de estos métodos es información innecesaria, lo principal es que todo funcione como debería. Aquí hablamos de ocultar la implementación . Además de esto, Java también permite ocultar datos . Escribimos sobre esto en la conferencia sobre captadores y definidores , pero no estaría de más recordárselo. Por ejemplo, tenemos una clase Cat:
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("¡Maullar!");
   }


}
¿Quizás recuerdas de la última conferencia cuál es el problema de esta clase? Si no, recordemos. El problema es que sus datos (campos) están abiertos a todos, y otro programador puede crear fácilmente en el programa un gato sin nombre con un peso de 0 y una edad de -1000 años:
public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
En tal situación, puede controlar de cerca si uno de sus colegas está creando objetos con el estado incorrecto, pero sería mucho mejor excluir la posibilidad misma de crear tales "objetos incorrectos". Principios de encapsulación - 4 Nos ayudan con la ocultación de datos:
  1. modificadores de acceso ( privado , protegido , paquete predeterminado );
  2. captadores y definidores.
Allí podremos comprobar, por ejemplo, si alguien intenta asignar al gato un número negativo como edad. Como dijimos anteriormente, los autores de varios artículos sobre encapsulación se refieren a encapsulación (combinando datos y métodos), ocultación o ambas. Java tiene ambos mecanismos (este no es necesariamente el caso en otros lenguajes de programación orientada a objetos), por lo que la última opción es la más correcta. Usar la encapsulación nos brinda varias ventajas importantes:
  1. Seguimiento del correcto estado del objeto. Hubo ejemplos de esto arriba: gracias al setter y al modificador privado, protegimos nuestro programa de gatos con peso 0.

  2. Facilidad de uso gracias a la interfaz. Dejamos sólo métodos "externos" para el acceso de los usuarios. Todo lo que necesita hacer es llamarlos para obtener el resultado y no necesita profundizar en los detalles de su trabajo en absoluto.

  3. Los cambios en el código no afectan a los usuarios. Realizamos todos los cambios dentro de los métodos. Esto no afectará al usuario: escribió auto.gas() para la gasolina del auto, así que lo escribirá. Y el hecho de que hayamos cambiado algo en el funcionamiento del método gas() seguirá siendo invisible para él: él, como antes, simplemente obtendrá el resultado deseado.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION