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.

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.