4.2. Conceptos básicos de POO

Templo romano simbolizando los pilares de la Programación Orientada a Objetos
Fuente propia

Clases, objetos, constructores, subclases, ocultación, sobrecarga, superclases, encapsulación, herencia,... Estos y otros muchos son términos relacionados con la Programación Orientada a Objetos. Es un vocabulario novedoso para tí, que puede llegar a agobiarte, pero ten calma, en este apartado solo queremos acercarte a ellos, el curso que viene podrás profundizar hasta conseguir no solo entenderlos, sino también dominarlos.

Vayamos por partes, podemos afirmar que la Programación Orientada a Objetos se sustenta sobre todo en una serie de pilares fundamentales. Estos pueden simplificarse básicamente en cuatro:

  • Abstracción.
  • Herencia.
  • Encapsulación.
  • Polimorfismo.

En este apartado te centrarás en los dos primeros, la Abstracción y la Herencia, estudiando conceptos relacionados con ambos. La mejor forma para ello es basarnos en ejemplos sencillos que te permitan ver la luz en este entramado de nuevos conceptos.

 

Boceto de un coche con borde luminoso
Imagen en pixabay de YannHD bajo licencia CC0 Public Domain

La Abstracción es el primer paso que tú, como programador, deberás aplicar cuando comiences a usar la orientación a objetos. Básicamente es la capacidad de separar elementos para poder analizarlos de forma individual. La idea está basada en una técnica muy utilizada en programación: "Divide y vencerás". Una vez analizado el problema a resolver, el programador deberá detectar los elementos que lo integran para estudiarlos por separado.

La Abstracción consiste en expresar las características esenciales de cada tipo de objeto, es decir, las que distinguen a un tipo de objeto de los demás tipos, dejando en segundo término los detalles. Mediante la abstracción por tanto, un programador modelará los elementos de la vida real que intervienen en el problema que se tiene que resolver.

Por ejemplo, si pensamos en un coche e intentamos modelarlo, nos fijaremos en una serie de detalles que lo distinguen de los demás tipos de objetos: número de ruedas, plazas, color, dimensiones, peso, etc. También podemos pensar en las acciones que puede realizar el coche: arrancar, frenar, acelerar, cambiar de marcha,... En esta primera fase de aproximación a la realidad no se deberá atender a los detalles más profundos, sólo se necesitará conocer qué hace cada tipo de objeto, no cómo lo hace ni cuándo.

ADN
Imagen en Pixabay de OpenClipart-Vectors con licencia CC0 Public Domain

Una clase puede "heredar" atributos (variables) y métodos (funciones) de otra clase (herencia simple) o de otras (herencia múltiple), lo cual supone una característica muy potente de la programación orientada a objetos. Con ello el programador hace extensivo a nuevas clases lo existente en otras, ya creadas y testeadas, reutilizando recursos sin necesidad de modificar ni rediseñar nada.

Se dice que la subclase o clase hija obtiene todos los atributos y métodos de su superclase (clase padre y otros...). La superclase en este sentido es más general y la subclase es más específica,  pues además de lo heredado tendrá sus propios atributos (variables) y métodos (funciones) que no existirán en la superclase, es decir la subclase añade a lo suyo propio lo de la superclase. Por ejemplo si queremos definir un formato de texto (color fondo, color escritura, subrayados etc) podemos crear una clase general con estos atributos para tener después clases más específicas donde se incluyan por ejemplo subíndices, superíndices, sangrados, etc.

En definitiva, la herencia (no genética, ni económica, sino informática) es la transmisión de código informático.


Las ventajas de la herencia pueden resumirse en las siguientes:

  1. Con la herencia conseguiremos reutilizar el código de forma eficiente (estaremos utilizando el mismo código en las dos clases, padre e hija, pero solo lo habremos escrito una vez).
  2. Permite una propagación de cambios muy buena. Cualquier cambio que se realice en las clases base será accesible inmediatamente en las clases derivadas, siempre que la visibilidad establecida lo permita. Sin embargo a veces pueden surgir problemas, por tanto hay que asegurarse que los cambios son compatibles con las clases derivadas. Una regla que evita problemas es que las modificaciones en realidad consistan en añadir nuevos atributos y métodos y no modificar los existentes.
  3. La herencia es transitiva. Esto significa que una clase puede heredar características de la clase base que se encuentra niveles más arriba en la jerarquía de herencia. Por ejemplo si la clase Mercedes es una subclase de la clase Coche, y la clase Coche es una subclase de la clase Vehículo, entonces el Mercedes heredará atributos tanto de Coche como de Vehículo.

 

Comprueba lo aprendido

Pregunta 1

Una Biblioteca o Librería de clases es un conjunto de archivos no ejecutables que son usados por programadores.

Pregunta 2

Por Herencia todos los objetos de una subclase tienen los mismos atributos de la clase.

Pregunta 3

Los métodos destructores pueden emplearse para liberar memoria.