"¡Hola, Amigo! Quiero dedicar la conferencia de hoy a la encapsulación . Ya tienes una idea general de lo que es".

Encapsulación - 1

Entonces, ¿cuáles son las ventajas de la encapsulación? Hay muchos, pero señalaré cuatro que son, en mi opinión, los más importantes:

1) Estado interno válido.

Los programas frecuentemente tienen varias clases que interactúan con el mismo objeto. Al interactuar simultáneamente con los datos internos del objeto, pueden violar la integridad de los datos del objeto y hacer que el objeto deje de funcionar correctamente.

Por lo tanto, el objeto debe realizar un seguimiento de cualquier cambio en sus datos internos, o mejor aún, debe ser el que realice esos cambios.

Si no queremos que otras clases cambien alguna variable de clase, la declaramos privada , lo que significa que solo los métodos de esa clase pueden acceder a ella. Si queremos que las variables sean de solo lectura para otras clases, agregamos captadores públicos a estas variables.

Por ejemplo, es posible que queramos que todos sepan cuántos elementos hay en nuestra colección, pero nadie debería poder cambiarlos sin nuestro permiso. En este caso, declaramos una variable private int count y un método public getCount() .

La encapsulación adecuada garantiza que otras clases no puedan acceder directamente a los datos internos de nuestra clase y, en consecuencia, no puedan alterarlos sin que podamos controlar sus acciones. Deben llamar a métodos en la clase que contiene las variables que se cambiarán.

Es mejor asumir que otros programadores siempre usarán sus clases de la manera que les resulte más conveniente, no de la manera que sea más segura para usted (o su clase). Esta es una fuente de errores y una forma de prevenirlos.

2) Comprobación de parámetros.

A veces necesita verificar los parámetros pasados ​​a los métodos de su clase. Por ejemplo, supongamos que tenemos una clase que representa a una "persona" y puedes especificar su fecha de nacimiento. Debemos verificar que cualquier dato pasado se corresponda con la lógica del programa y la lógica de la clase. Por ejemplo, no existe el mes 13, ni el 30 de febrero, etc.

"¿Por qué alguien indicaría una fecha de nacimiento del 30 de febrero?"

"Bueno, antes que nada, podría ser el resultado de un error de entrada de datos".

En segundo lugar, antes de que un programa funcione como un reloj, puede tener muchos errores. Por ejemplo, algo como esto podría suceder.

Un programador escribe un código que determina quién cumple años pasado mañana. Digamos que hoy es 3 de marzo. El programa agrega 2 a la fecha actual y encuentra a todos los que nacieron el 5 de marzo. Hasta ahora, todo bien.

Pero cuando llega el 30 de marzo, el programa no encuentra a nadie, ya que no existe el 32 de marzo. Los programas tienen muchos menos errores cuando los métodos realizan la verificación de parámetros".

"Recuerdo que cuando estudiamos ArrayList miré su código, y había verificaciones en los métodos get y set para garantizar que el parámetro de índice sea mayor o igual a cero y menor que la longitud de la matriz. El código generaría un excepción si la matriz no tenía un elemento correspondiente al índice.

"Sí, esa es la verificación de entrada clásica " .

3) Menos errores al cambiar el código dentro de las clases.

Supongamos que escribimos una clase realmente útil como parte de un gran proyecto. A todos les gustó tanto que otros programadores comenzaron a usarlo en cientos de lugares en su propio código.

La clase demostró ser tan útil que decidió mejorarla. Pero si se deshace de cualquiera de los métodos de la clase, el código de docenas de otros programadores ya no se compilará. Tendrían que reescribir rápidamente su código. Y cuanto más se reescribe, más oportunidades hay de errores. Si rompes regularmente la construcción, serás odiado.

Pero si cambiamos los métodos marcados como privados, sabemos que estos métodos no son llamados por el código de nadie más en ninguna parte. Podemos reescribirlos y cambiar el número y tipo de parámetros, y el código dependiente seguirá funcionando. O al menos seguirá compilando.

4) Definimos cómo otros objetos interactuarán con nuestro objeto.

Podemos restringir qué acciones se pueden tomar en nuestro objeto. Por ejemplo, es posible que deseemos que se cree solo una instancia de una clase, incluso si se crea en varios lugares simultáneamente en el proyecto. Y podemos lograr esto usando encapsulación.

Encapsulación - 2

La encapsulación nos permite imponer restricciones adicionales que podrían convertirse en beneficios adicionales . Por ejemplo, la clase String se implementa como un objeto inmutable . Una instancia de la clase String no se puede modificar entre su creación y su destrucción. Todos los métodos de la clase String (remove, substring, ...) devuelven una nueva cadena y de ninguna manera cambian el objeto al que se les llama.

"Santa vaca. Así es como es".

"La encapsulación es intrigante".

"Estoy de acuerdo."