Programación orientada a objetos

Portada >> Programación >> Programación orientada a objetos


La programación orientada a objetos tiene su origen en 1972 con la creación del lenguaje Simula. Este lenguaje fue el primero en utilizar el concepto de clase y estableció el marco de definición de muchos de los lenguajes orientados a objetos actuales.

La programación orientada a objetos fue asentando sus bases y ganando popularidad poco a poco, hasta que en 1980 se convirtió en la metodología dominante gracias al lenguaje C++.

Hoy en día sigue siendo el paradigma estrella, pero ¿Qué es exactamente la programación orientada a objetos?

¿Qué es la programación orientada a objetos?

La programación orientada a objetos (también conocida por sus siglas POO) es un paradigma de programación que se basa en estructurar el código mediante el uso de clases. 

Como cualquier otro paradigma de programación, la programación orientada a objetos establece un estilo o forma de programar específica. Concretamente la POO pretende representar el mundo real, tanto la estructura de la información como su comportamiento, mediante el uso de clases y objetos.

Las clases se definen durante el proceso de programación y establecen cómo será la estructura de la información y su comportamiento. En esencia, describen un tipo de dato. Además, son las responsables de estructurar el código del programa.

Durante la ejecución del programa se crean los objetos a partir de las clases previamente definidas. Los objetos son los responsables de almacenar datos con la estructura establecida en la clase correspondiente. Los objetos se instancian a partir de las clases, por lo que también se conocen como instancias.

Para que lo entiendas mejor fíjate en este ejemplo:

Piensa en un coche, ¿Qué podrías decirme sobre un coche? No pienses en ningún coche en particular, solo piensa en el concepto coche.

Por un lado, un coche tiene una marca, un modelo, una matrícula, usa un tipo de combustible concreto, tiene un número de puertas, su carrocería es de un color, etc. Todos los coches tienen estas características, es lo que se conoce como estado.

Por otro lado, el coche se desplaza, acelera, frena, puede arrancar, encender o apagar las luces, repostar, etc. Todo esto son acciones comunes a cualquier coche. Es lo que se conoce como comportamiento.

Todo este conjunto de información y acciones se pueden agrupar para definir un tipo de dato complejo que describa cualquier coche. Esto sería la clase. 

Ahora piensa en un coche en particular. Si tienes coche, piensa en tu propio coche, o en el coche de tu vecino, o en el coche que está siempre aparcado frente a tu casa, o en KITT “el coche fantástico”. El que quieras, pero que sea un coche específico.

En este caso ya estás concretando más. Estamos hablando de un coche real, no del concepto de coche. Ese coche que tienes en mente será de una marca y modelos concretos, su carrocería será de un color específico, tendrá una matrícula única, estará parado o circulando a una velocidad concreta, etc.

Este coche tan real y tan concreto es lo que se conoce como objeto. Cumple con la definición común de coche, pero describe tanto la información como el comportamiento de un coche concreto.

¿Lo ves más claro? Si quieres saber cómo funcionan las clases y los objetos en Java pincha aquí.

Ventajas de la programación orientada a objetos

La programación orientada a objetos aporta grandes beneficios a la hora de programar, por eso se ha convertido en un paradigma tan extendido.

Permite que la reutilización de código sea mucho más simple gracias a la definición de estructuras reutilizables. Es muy común la creación de librerías que se pueden compartir entre proyectos.

Gracias a la definición de estructuras simples replicables se evita la duplicidad de código. Además, estructurar las aplicaciones en clases hace que el código esté mucho más ordenado, lo que permite construir sistemas complejos de forma ordenada y estructurada y garantiza que la corrección de errores sea más simple.

Por otro lado, la encapsulación protege la información de accesos no autorizados, puesto que permite determinar qué elementos del programa son o no accesibles en cada momento y por quién.

Todo esto se traduce en que el mantenimiento de las aplicaciones basadas en este paradigma también será mucho más sencillo.

Características principales de la programación orientada a objetos

Entre las características principales de la programación orientada a objetos podemos destacar las siguientes:

Encapsulación

Las clases tienen dos partes claramente diferenciadas, por un lado los atributos que representan el estado de la información, y por otro lado los métodos que representan el comportamiento.


Tanto los atributos como los métodos tienen asociado un nivel de accesibilidad que determina en qué situaciones se puede acceder o no al elemento. También establecen quién puede acceder al mismo.

Es bastante común encontrar los siguientes niveles de accesibilidad, aunque dependerá del lenguaje:

  • Pública
  • Protegida
  • Privada

Siendo la visibilidad pública la menos restrictiva, es decir, los elementos que tengan esta visibilidad podrán ser accedidos desde cualquier parte del programa. 

En cambio, la visibilidad privada es la más restrictiva puesto que solo permite la visibilidad desde el interior de la clase contenedora, por lo que su acceso desde el exterior estaría totalmente restringido.

Abstracción

Este principio se basa en simplificar la complejidad interna del código de cara al exterior.

Dentro de una clase existe una lógica y un código bastante complejos. Estos elementos no se exponen debido a su complejidad, en su lugar se abstraen y se exponen métodos y atributos que simplifican su uso.

Como puedes ver, la abstracción está directamente relacionada con la encapsulación.

Para que lo entiendas mejor, vamos a ver un ejemplo.

¿Recuerdas el coche del que te hablaba al principio del artículo? Piensa en él de nuevo. ¿Alguna vez te has desplazado en coche? ¿O has encendido las luces? Seguro que sí.

Ahora piensa en los procesos internos del motor, sistema ecléctico, etc. que deben llevarse a cabo para que esas acciones puedan realizarse de forma sencilla. Esos procesos ni los ves ni los conoces. Pero no es necesario que los conozcas para que seas capaz de conducir el coche o encender las luces. Gracias a la abstracción no es necesario tener una ingeniería para poder conducir un coche.

Herencia

La herencia está directamente relacionada con la reutilización de código.

Se basa en que las clases pueden reutilizar (heredar) código de otras (tanto atributos como métodos).

Cuando una clase es heredada por otra, la segunda puede utilizar el código de la primera sin necesidad de volver a definirlo. Además, la segunda clase puede añadir su propio código para extender el código que está heredando. 

Por otro lado, cuando el código de la clase heredada cambia, la clase que la hereda dispone de ese cambio de forma inmediata.

Esta característica ahorra mucho tiempo a la hora de programar, puesto que permite reutilizar código ya definido en múltiples clases sin necesidad de volver a escribirlo.

Polimorfismo

Si buscas la raíz etimológica de la palabra polimorfismo verás que es algo así como muchas formas. Y justo de eso trata el polimorfismo en la programación orientada a objetos, de definir el comportamiento de un objeto de múltiples formas.

La programación orientada a objetos permite definir interfaces que sirvan de base para diferentes objetos. Posteriormente estos objetos podrán definir el comportamiento que mejor se ajuste a sus necesidades.

Esta característica está muy relacionada con la herencia, puesto que las clases que heredan código de otras pueden modificar este para que se adapte a las necesidades de la clase que lo está heredando.

El concepto puede resultar complejo de entender, pero es más sencillo de lo que parece. Fíjate en este ejemplo:

Tienes un círculo y un triángulo. Ambos son formas geométricas, por tanto, puedes calcular de ambos su área o su perímetro. Si esto es cierto, que lo es, podemos decir que, tanto el círculo como el triángulo son de tipo “forma geométrica” y ambos tienen como comportamiento “calcular área” y “calcular perímetro”.

Pero aquí hay algo que no cuadra. El área y el perímetro no se calculan de la misma forma para un círculo y para un triángulo. Para ambos se pueden calcular, si, pero no igual. Y aquí es donde el polimorfismo soluciona el problema.

Tanto círculo como triángulo tendrán el comportamiento “calcular área”, pero la forma de hacerlo será la apropiada para cada caso. Lo mismo ocurre con el cálculo del perímetro. El comportamiento tendrá múltiples formas que se adaptaran al objeto.

Lenguajes que utilizan programación orientada a objetos

Como ya he mencionado, la programación orientada a objetos se ha vuelto muy popular y hoy en día existen gran cantidad de lenguajes que se basan en este paradigma, como Java, Python, C++, C#, PHP, Ruby, TypeScript y muchos otros.

A lo largo de la historia han existido muchos lenguajes que se han basado en este paradigma e irán apareciendo otros nuevos en el futuro que también lo harán.

Si quieres aprender programación orientada a objetos puedes echarle un vistazo a los recursos gratuitos que he preparado tanto de Java como de Python.

Comments are closed.

Up ↑