¿QUÉ ES LA PROGRAMACIÓN ORIENTADA A OBJETOS?

La Programación Orientada a Objetos (POO)
es un paradigma de programación, es decir, un modelo o un estilo de programación que nos
da unas guías sobre cómo trabajar con él. Se basa en el concepto de
clases y objetos. Este tipo de programación se utiliza para estructurar un
programa de software en piezas simples y reutilizables de planos de código
(clases) para crear instancias individuales de objetos.
A lo largo de la historia, han ido apareciendo diferentes
paradigmas de programación. Lenguajes secuenciales como COBOL o procedimentales
como Basic o C, se centraban más en la lógica que en los datos. Otros más
modernos como Java, C#
y Python, utilizan paradigmas para definir los programas, siendo
la Programación Orientada a Objetos la más popular.
Con el paradigma de Programación Orientado a
Objetos lo que buscamos es dejar de centrarnos en la lógica pura de
los programas, para empezar a pensar en objetos, lo que constituye la base de
este paradigma. Esto nos ayuda muchísimo en sistemas grandes, ya que en vez de
pensar en funciones, pensamos en las relaciones o interacciones de los
diferentes componentes del sistema.
Un programador diseña un programa de software organizando
piezas de información y comportamientos relacionados en una plantilla llamada
clase. Luego, se crean objetos individuales a partir de la plantilla de clase.
Todo el programa de software se ejecuta haciendo que varios objetos interactúen
entre sí para crear un programa más grande.
¿POR QUÉ POO?
La
Programación Orientada a objetos permite que el código sea reutilizable,
organizado y fácil de mantener. Sigue el principio de desarrollo de software
utilizado por muchos programadores DRY
(Don’t Repeat Yourself),
para evitar
duplicar el
código y crear de esta manera programas eficientes. Además, evita el acceso no
deseado a los datos o la exposición de código propietario mediante la
encapsulación y la abstracción, de la que hablaremos en detalle más adelante.

ClASES, OBJETOS E INSTANCIAS
El primer
y más importante concepto de la POO es la distinción entre clase y objeto.
Una clase es una plantilla. Define de manera genérica
cómo van a ser los objetos de un determinado tipo. Por ejemplo, una clase para
representar a animales puede llamarse ‘animal’ y tener una serie de atributos, como ‘nombre’ o ‘edad’ (que normalmente son
propiedades), y una serie con los comportamientos que estos pueden tener, como
caminar o comer, y que a su vez se implementan como métodos de la clase
(funciones).
Un ejemplo sencillo de un objeto, como decíamos antes, podría ser un animal. Un animal tiene una edad,
por lo que creamos un nuevo atributo de ‘edad’ y, además, puede envejecer, por
lo que definimos un nuevo método. Datos y lógica. Esto es lo que se define en
muchos programas como la definición de una clase, que es la definición global y
genérica de muchos objetos.
Todo esto, junto con los principios que vamos a ver a
continuación, son herramientas que nos pueden ayudar a escribir un código
mejor, más limpio y reutilizable.

4 Principios de la Programación Orientada a
Objetos
- La encapsulación
La
encapsulación contiene toda
la información importante de un objeto dentro del mismo y solo expone la información
seleccionada al mundo exterior.
Esta propiedad permite asegurar que la información de un objeto
esté oculta para el mundo exterior, agrupando en una Clase las características
o atributos que cuentan con un acceso privado, y los comportamientos o métodos
que presentan un acceso público.
La encapsulación de cada objeto es responsable de su propia información y de su propio estado. La única forma en la que este se puede modificar es mediante los propios métodos del objeto. Por lo tanto, los atributos internos de un objeto deberían ser inaccesibles desde fuera, pudiéndose modificar sólo llamando a las funciones correspondientes. Con esto conseguimos mantener el estado a salvo de usos indebidos o que puedan resultar inesperados.
- La abstracción
La abstracción es cuando el usuario
interactúa solo con los atributos y métodos seleccionados de un objeto,
utilizando herramientas simplificadas de alto nivel para acceder a un objeto
complejo.
En la programación orientada a objetos, los
programas suelen ser muy grandes y los objetos se comunican mucho entre sí. El
concepto de abstracción facilita el mantenimiento de un código de gran
tamaño, donde a lo largo del tiempo pueden surgir diferentes cambios.
Así, la abstracción se basa en usar cosas
simples para representar la complejidad. Los objetos y las clases
representan código subyacente, ocultando los detalles complejos al usuario. Por
consiguiente, supone una extensión de la encapsulación. Siguiendo con el
ejemplo del coche, no es necesario que conozcas todos los detalles de cómo
funciona el motor para poder conducirlo.
- La herencia
La herencia define relaciones jerárquicas entre clases, de forma que atributos y métodos comunes puedan ser reutilizados. Las clases principales extienden atributos y comportamientos a las clases secundarias. A través de la definición en una clase de los atributos y comportamientos básicos, se pueden crear clases secundarias, ampliando así la funcionalidad de la clase principal y agregando atributos y comportamientos adicionales.
- El polimorfismo
El polimorfismo consiste en diseñar
objetos para compartir comportamientos, lo que nos permite procesar objetos
de diferentes maneras. Es la capacidad de presentar la misma interfaz para
diferentes formas subyacentes o tipos de datos. Al utilizar la herencia, los
objetos pueden anular los comportamientos principales compartidos, con
comportamientos secundarios específicos. El polimorfismo permite que el mismo
método ejecute diferentes comportamientos de dos formas: anulación de método y
sobrecarga de método.
Alrededor de estos principios de la
programación orientada a objetos se construyen muchas cosas. Por ejemplo,
los Principios
SOLID, o
los Patrones
de diseño, que son
recetas que se aplican a problemas recurrentes que se han encontrado y se
repiten en varios proyectos.
Beneficios de Programación Orientada a Objetos
- Reutilización del código.
- Convierte cosas complejas en estructuras simples reproducibles.
- Evita la duplicación de código.
- Permite trabajar en equipo gracias
al encapsulamiento ya que minimiza la posibilidad de duplicar funciones
cuando varias personas trabajan sobre un mismo objeto al mismo tiempo.
- Al estar la clase bien estructurada
permite la corrección
de errores en varios lugares del código.
- Protege la información a través de la encapsulación, ya
que solo se puede acceder a los datos del objeto a través de propiedades y
métodos privados.
- La abstracción nos permite construir sistemas más complejos y
de una forma más sencilla y organizada.
Conclusión
La Programación Orientada a Objetos es actualmente el paradigma que más se utiliza para diseñar aplicaciones y programas informáticos. Son muchas sus ventajas, principalmente cuando necesitas resolver desafíos de programación complejos. Permite una mejor estructura de datos y reutilización del código, lo que facilita el ahorro de tiempo a largo plazo.
LENGUAJES DE PROGRAMACIÓN ORIENTADO A OBJETOS
Este lenguaje orientado a objetos funciona independientemente de la plataforma de hardware, entonces, el código escrito en una máquina corre en otra, sin problemas. Incluso, si los sistemas operativos son diferentes, el código Java funciona gracias a la Máquina Virtual Java o JVM, por las siglas en inglés.
Su ámbito de aplicación es tan amplio, que existe software desarrollado para puntos de ventas, cajeros automáticos, internet de las cosas, dispositivos móviles, aparte de páginas web con este lenguaje.

C++ es un lenguaje de programación creado, como una extensión del lenguaje C, para hacerlo orientado a objetos. Es capaz de compilar instrucciones, por lo que brinda acceso total al hardware, originando su amplio uso en bases de datos, navegadores web y videojuegos.





