Anteriormente habíamos hablado del proceso de Abstracción, este me ayuda a definir lo que es inherente al modelado de mi problema. Por ejemplo si tratamos de modelar un objeto Televisor, podemos pensar en que características y funciones debe tener este:
- Un botón de encender / apagar.
- Un par de botones para subir / bajar volumen.
- Un par de botones para cambiar el canal (subir / bajar)
Dejémoslo así sencillo.
Ahora después de este arduo proceso de abstracción, debo tomar todos esos conceptos que agrupe y meterlos en una bolsa o saco.
Encapsulación, tomar mi abstracción y ponerla dentro de una entidad.
Esta entidad resultante debería tener características y funcionalidades que estén fuertemente relacionadas, que sea coherente con lo que representa. Esta entidad es mi molde de creación de objetos. Es lo que conocemos como Clase y el objeto resultante formado de este molde es lo conocemos como Instancia. Por eso decimos que:
- Una Clase es una representación abstracta de un grupo de objetos.
- Una Instancia es una representación física real de este tipo de dato abstracto.
Es importante no confundir la encapsulación con ocultamiento de información, que es un mecanismo que me brinda el lenguaje para definir que cosas son o no visibles al mundo exterior y en que nivel de visibilidad.
En la encapsulación podemos definir una interfaz pública y manipular a través de ella las características de mis objetos para tener un mejor control en muchos aspectos.
Ahora el ocultamiento de información es algo que es fácil de entender por si misma. Podemos definir niveles de visibilidad para los atributos y métodos de un objeto, en Java conocemos 4 tipos de visibilidad:
- Publica : Visible para todos.
- Protegida : Visible para objetos hijos (concepto de herencia).
- Default : Visibles para todos los objetos del mismo grupo (concepto de paquete en java)
- Privada : Visible solo dentro del mismo objeto.