Bienvenidos a este post en el que veremos otro pilar de la programación orientada a objetos, el encapsulamiento y la abstracción.
Índice
1 - Qué es encapsulamiento en programación orientada a objetos
Decimos que el encapsulamiento en la programación orientada a objetos es cuando limitamos el acceso o damos un acceso restringido de una propiedad a los elementos que necesita un miembro y no a ninguno más.
El elemento más común de encapsulamiento son las clases, donde encapsulamos y englobamos tanto métodos como propiedades.
Otro ejemplo muy común de encapsulamiento son los getters y setters de las propiedades dentro de una clase. Por defecto nos dan el valor “normal” pero podemos modificarlos para que cambie.
private decimal _velocidadActual { get; set; }
public decimal VelocidadActual
{
get{
return _velocidadActual + 2;
}
set{
_velocidadActual = value;
}
}
En el ejemplo que acabamos de ver tenemos dos propiedades, ambas hacen referencia a la velocidad actual, pero hay ligeras diferencias.
Una es privada, por lo que desde fuera de la clase no podemos acceder a su valor.
La segunda es pública y accede a la privada anteriormente mencionada. Porqué hacemos esto?
El ejemplo que hemos visto es un caso real, los coches suelen marcar un par de kilómetros por hora mas de los reales. Por lo que encapsulamos esa lógica dentro del setter, el cual esta oculto para el consumidor que vería en su cuentaquilómetros la velocidad con los dos kilómetros por hora extra.
Podemos decir que encapsulamiento es una forma de ocultación de información entre entidades, mostrándose entre ellas solo la información más necesaria.
1.1 – Modificadores de acceso
Como hemos podido comprobar, el encapsulamiento va ligado a los modificadores de acceso, los cuales están explicados en el propio post destinado a los modificadores de acceso.(link)
Conviene bien recordarlos de todas maneras.
- Public acceso total
- Private, acceso únicamente desde la clase o struct que los contiene
- Internal, acceso desde el mismo Proyecto
- Protected desde la misma clase o desde las clases que heredan
- Protected internal, combina protected e internal y nos permite acceder desde el mismo Proyecto o de clases que la derivan.
- Private protected, que permite acceder desde la clase actual o de la que derivan de ella.
Nota: tambien son importantes las interfaces que veremos en el siguiente post.
2 - Abstracción en programación orientada a objetos
Nota: no confundir con abstracción en C# (post en el futuro).
La abstracción es un concepto muy similar al de la encapsulación, con la diferencia principal de que la abstracción nos permite representar el mundo real de una forma mas sencilla. Podríamos definirlo también como la forma de identificar funcionalidades necesarias sin entrar en detalle de lo que estamos haciendo.
El ejemplo mas claro es cuando frenamos en el coche, para nosotros, el usuario, es únicamente pisar el freno, pero por detrás el coche realiza una gran cantidad de acciones. También imaginad que en todos los coches el conductor frena de la misma manera, independientemente de si los frenos son de disco o de tambor. Mientras que el coche realiza diferentes acciones.
Pisar el freno sería el nivel de abstracción.
3 – Diferencias entre encapsulamiento y abstracción
Abstraccion | Encapsulamiento |
Búsca la solución en el diseño | Búsca la solución en la implementación |
Únicamente información relevante | Ocultación de código para protegerlo |
Centrado en la ejecución | Centrado en ejecución |