La programación orientada a objetos tiene muchas definiciones aunque su propósito es modelar el mundo
real a través de conceptos como la encapsulación, herencia y poliformismo.
Encapsulación
Es un mecanismo para agrupar datos de un mismo concepto y funciones que operan sobre
estos datos. La encapsulación también brinda la oportunidad de ocultar la
implementación de manera que sólo se puede interactuar con los datos a través
de los método que son públicos. La agrupación de los datos y las
funcionalidades sobre los mismo se definen en clases.
Herencia
Es otro mecanismo cuya finalidad es extender la funcionalidad de una clase. Una clase
que hereda de otra adquiere los datos y funciones de la clase de la que
extiende. Esto conlleva a la reutilización de código.
Poliformismo
El poliformismo es el tercer mecanismo y establece que, a través de una interfaz,
es posible definir un comportamiento. Los comportamientos vienen definidos por
las funciones que operan sobre los datos. Cualquier clase puede incorporar un
comportamiento establecido, a través de una interfaz, y es responsabilidad de
cada clase el implementar el mismo.
Gracias a este mecanismo, distintas clases que incorporan el mismo comportamiento y, a
pesar de que tengan implementaciones distintas, se puedan intercambiar para un
mismo propósito.
Esto lleva a que cualquier clase A que tenga una dependencia con otra clase B que
incorpore un comportamiento Z pueda invertir esa dependencia. Eso significa que
un objeto de la clase A ya no cree una instancia del objeto de la clase B en su
interior si no que se utilice a través de alguno de sus método un objeto que
tenga un comportamiento Z. De esta manera se “inyecta” la dependencia.
Gracias a la inyección de dependencias los programadores tienen el control absoluto sobre todas las dependencias del sistema. Con esto se puede conseguir que las reglas de negocio
sean independientes, no tengan dependencias, de la base de datos o el framework
con el que se trabaje.
Conclusión
La programación orientada a objetos es la habilidad de usar el poliformismo para
ganar el control absoluto de todas las dependencias del sistema. Esto permite
al arquitecto a crear una arquitectura de plugins en la cual los módulos que
contienen las políticas de alto nivel son independientes de las reglas de bajo
nivel.
Los detalles de bajo nivel son relegados a plugins que se pueden desarrollar y desplegar de
manera independiente de los módulos de la política de alto nivel.