Pages - Menu

jueves, 20 de junio de 2013

Curso de Programación Orientada a Objetos 2/6: Clases

Continuamos con el curso de Programación Orientada a Objetos, tras una introducción donde podíamos ver por encima las características de este paradigma de programación, en este segundo capítulo veremos el concepto de Clases.

Curso de Programación Orientada a Objetos 2/6: Clases
Foto tomada de freedigitalphotos.net

¿Qué es una clase?

Ésta es posiblemente la primera pregunta que cualquier estudiante se haga al iniciarse en la Programación Orientada a Objetos.

Una clase es una abstracción de un concepto, una agrupación de elementos que asociamos con la realidad y que comparten características comunes.

Desde siempre se han agrupado los elementos y entidades del mundo real en conjuntos, por ejemplo los grupos animales, vehículos, carnívoros, insectos, felinos, vertebrados, invertebrados, etc.

La idea es que mediante el uso de las clases seamos capaces de clasificar y agrupar elementos que comparten características para así poder programar en base a éste concepto.

Ejemplo.

Pongamos el siguiente ejemplo, supongamos que queremos agrupar todos los muebles de una oficina, dicho grupo comprendería las mesas y las sillas, son distintos pero podemos agruparlos en una clase que englobe sus elementos comunes, es decir, una clase “muebles”.

Otro ejemplo perfectamente válido es el de los animales, agrupaciones de animales hay infinidad de ellos, pero por ejemplo podemos clasificarlos en vertebrados e invertebrados, carnívoros y herbívoros, etc.

Clases y subclases.

En base al ejemplo de los animales o del mobiliario podemos basar perfectamente nuestra programación en una primera (y muy general) clase llamada Mobiliario y Animal respectivamente.

Una vez tengamos en mente el concepto de las clases Mobiliario o Animal, tengamos visualizadas las características de cada uno y las propiedades que lo definen, podemos afinar un poco más.

En el caso de la clase Animal, somos conscientes de que todos los animales no son iguales, los hay terrestres, acuáticos, vertebrados, carnívoros, herbívoros, etc. Es decir, comparten muchas características pero tienen otras muchas que los hacen muy diferentes.

Debemos comenzar a pensar en que hay que definir nuevas clases que se ajusten más a estas clasificaciones, pero sin dejar de perder la referencia mental de que estamos tratando de un Animal.

Es decir, imaginemos que queremos programar en base a los animales carnívoros, por lo que el paso obvio es pensar en una clase Carnívoro, es mejor que la clase Animal, y realmente me sirve para mucho más, por lo que si directamente programo la clase Carnívoro es mejor ¿verdad?

Pues no, para poder hacer esto correctamente debemos definir primero la clase Animal, y a continuación la clase Carnívoro, pero de forma que la clase Carnívoro herede las propiedades de Animal, de ésta forma tendremos las características de ambos y si en un futuro tenemos que programar la clase Herbívoro no tendremos que programar de nuevo ciertas características comunes. Este tema se explicará con detenimiento en el tema de herencia.

Lo importante a tener en cuenta ahora mismo es que existen clases específicas que son hijas de otras clases más generales. Con esto nos aseguramos que nuestro desarrollo es bueno y adaptable a cualquier cambio futuro.

Clases abstractas.

Otro tema que veremos en el siguiente capítulo es el tema de las clases abstractas. Las clases abstractas son clases de las que no se pueden instanciar objetos.

¿Esto qué quiere decir? Pues si tomamos de ejemplo la clase Animal veremos que no deberíamos poder crear objetos que sean simplemente Animal, para tenerlo perfectamente hecho tendríamos que declarar una jerarquía de clases, por ejemplo, Animal -> Carnívoro -> Felino y a partir de la clase Felino crear el objeto Tigre.

¿No puedo crear objetos de la clase Animal? Sí y no, por una parte como poder se puede, pero no es aconsejable puesto que necesitamos más elementos que definan los objetos mejor. Un tigre es un animal, pero un mono también, y ambos son completamente distintos, necesitamos de algo más, y aquí entran de nuevo las subclases, para que podamos crear objetos mejor definidos.

Otro ejemplo podría ser el del mobiliario, podríamos crear las clases Mobiliario -> Asiento y a partir de ahí crear el objeto Silla.

Una clase abstracta nos da un esquema general, un esqueleto globalizado de las entidades que va a abarcar, las subclases siguientes son las que nos darán toda la información que necesitemos, y que definirá mucho mejor las entidades con las que queremos trabajar.

Es una buena práctica refinar cuanto más mejor, no deberíamos poder declarar un objeto de una clase abstracta directamente, puesto que el alcance de ésta en cuanto a características se refiere no está definido tan al detalle como un animal o un mueble necesita.

Este concepto lo veremos más en profundidad en el siguiente capítulo

Conclusiones.

Recordemos, una clase es una abstracción o agrupación de entidades que comparten elementos comunes. Éste concepto es muy importante y es el pilar básico de la Programación Orientada a Objetos.

Acabamos de ver el concepto de clase, cómo debemos aplicarlo en base a lo que queremos programar y la mejor forma de ir definiendo clases. Se ha nombrado en diversos momentos el concepto de Objeto, tema que trataremos en el siguiente capítulo pero que nos acaba de servir para poder comprender mejor que es una clase.

En el siguiente capítulo entraremos de lleno en el concepto de Objeto, veremos la mejor forma de definirlos y comenzaremos a construir clases y a crear objetos a partir de éstas con el fin de comprender perfectamente este tema.

¿Qué es para ti una Clase?