Objetos y métodos: superpoderes en nuestro código
Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las características siguientes son las más importantes:
Abstracción
Una de las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características.
La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a crear un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.
Podría decirse que es el concepto abstracto de un objeto, lo que lo define.
Encapsulamiento
Para proteger a las variables de modificaciones no deseadas se introduce el concepto de encapsulación.
- Los elementos de una clase pueden ser públicos o privados.
- Los elementos públicos son aquellos a los que se puede acceder libremente desde fuera de la clase.
- Los elementos privados por el contrario solamente pueden ser accedidos por los métodos de la propia clase.
Herencia
Herencia es un mecanismo que permite derivar una clase a otra clase.
En otras palabras, tendremos unas clases que serán hijos, y otras clases que serán padres.
Las clases hijas pueden utilizar tanto sus métodos y propiedades como de la clase padre, siempre que su clase padre lo permita.
A través de ella, los diseñadores pueden crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada.
Cuando un objeto hereda de más de una clase, se dice que hay herencia múltiple.
Polimorfismo
Es la capacidad que tienen ciertos lenguajes para hacer que, al enviar el mismo mensaje (o, en otras palabras, invocar al mismo método) desde distintos objetos, cada uno de esos objetos pueda responder a ese mensaje (o a esa invocación) de forma distinta.
Imagina que tenemos la clase principal que se llama figura y tiene un método que se llama área, y además tenemos subclases (clases heredadas) como pueden ser triángulo, cuadrado, rectángulo, círculo...
Todas las subclases podrán invocar un método que sea área, pero cada una de ellas se calculará, mejor dicho, cada una de ellas ejecutará un cálculo diferente, aunque el método se llame igual.