Clases – Objetos, herencia, polimorfismo y composición

Una clase es una definición de un objeto, es utilizada para crear instancias de si misma, a estas instancias se las conoce como objetos de la clase o instancias de clase. Las clases contienen datos que les permiten tener un estado determinado así como métodos que definen su comportamiento.

Las clases responden a la necesidad de tener un criterio de estructuración del código. Generalmente son consideradas una entidad estática.

Los datos almacenados en una clase reciben el nombre de propiedades o atributos de la clase. Pueden ser distintos entre instancias de la clase y también pueden ser modificados en tiempo de ejecución. Estas estructuras de datos condicionan el tamaño en memoria de los objetos.

El comportamiento de las clases viene determinado por la definición de sus métodos. Estos métodos tienen la forma de rutinas o funciones que acceden a las propiedades o atributos de la clase. Su invocación se realiza mediante paso de mensajes en los que están contenidos los parámetros necesarios para su ejecución. El paso de mensajes debe tener en cuenta:

  • Los mensajes enviados a un objeto deben coincidir con los métodos definidos en la clase (nombre, argumento y tipos).
  • Los errores en la definición de tipos pueden ser comprobados en tiempo de compilación o en tiempo de ejecución dependiendo del lenguaje empleado.

Los objetos en contraposición a las clases, se consideran entidades dinámicas. Son creados en tiempo de ejecución a partir de la clase que los define. Los valores almacenados en ellos pueden ser alterados en tiempo de ejecución mediante el uso de sus métodos. Cada objeto tiene su propio estado y comparte comportamiento con los otros objetos de su clase.

Las clases puden tener distintas relaciones entre sí. Destacando:

Composición

Permite la creación de nuevos objetos a partir de otros ya definidos. Su relación viene definida por “tiene” o “esta compuesto por”.

Herencia

Posibilita la reutilización de código. Genera una jerarquia entre clases. La relación creada es del tipo “es un”.

Este tipo de relación posibilita la redefinición de métodos en las subclases al no ser que cuenten con el calificador “final” en la clase padre.

Las subclases cuentan con los métodos de la superclase heredada además de los suyos propios. La herencia cumple la propiedad transitiva. Las subclases pueden ser accedidas como la superclase a la que pertenecen.

Polimorfismo

Define la propiedad de un lenguaje de hacer referencia a un tipo distinto (tipo dinámico) en tiempo de ejecución, al declarado previamente (tipo estático). Normalmente esta capacidad está restringida por la relación de herencia, limitando el tipo dinámico a un descendiente del tipo estático. Las estructuras creadas haciendo uso de esta característica permiten combinar elementos heterogeneos con un comportamiento homogéneo.

Las operaciones afectados por el polimorfismo son:

  • Asignaciones explicitas entre objetos.
  • Paso de mensajes (parámetros).
  • Valores de retorno.

Vinculación dinámica

Permite que los métodos llamados por un mensaje se carguen en tiempo de ejecución. De esta manera se pueden utilizar los tipos dinámicos de los objetos en lugar de los estáticos generados en tiempo de compilación.

Clases abstractas

Son clases no instanciables. Pueden contener métodos abstractos (sin implementar). Las clases que heredande ella deben crear una implementación de los métodos abstractos (en caso contrario continuarán siendo clases abstractas). Son útiles para referenciar estáticamente a otras clases derivadas de la clase abstracta. Pueden crean un interfaz común cuando son usadas en una jerarquía de clases.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>