Programación orientada a Objetos
Es un modo o paradigma de programación, que nos permite organizar el código pensando el problema como una relación entre “cosas”, denominadas objetos. Los objetos se trabajan utilizando las “clases”.
Estas nos permiten agrupar un conjunto de variables y funciones que veremos a continuación.
Con la POO se busca resolver aplicaciones cada vez más complejas, sin que el código se vuelva un caos. Además, se pretende dar pautas para realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.
Lo importante de la POO es poder separar los problemas generales en suma de pequeños problemas aislados, para poder modelar la solución y en un futuro que cualquiera pueda utilizar varios de estos módulos creados por este paradigma.
¿Qué es un paradigma de programación?
Un paradigma de programación es un estilo de desarrollo de programas. Es decir, un modelo para resolver problemas computacionales.
Los lenguajes de programación se encuadran en uno o varios paradigmas a la vez a partir del tipo de órdenes que permiten implementar, algo que tiene una relación directa con su sintaxis.
Paradigmas de programación:
- Imperativo: Los programas se componen de un conjunto de sentencias que cambian su estado. Son secuencias de comandos que ordenan acciones a la computadora.
- Declarativo: Opuesto al imperativo. Los programas describen los resultados esperados sin listar explícitamente los pasos a llevar a cabo para alcanzarlos.
- Lógico: El problema se modela con enunciados de lógica del primer orden.
- Funcional: Los programas se componen de funciones, es decir, implementaciones de comportamiento que reciben un conjunto de datos de entrada y devuelven un valor de salida.
- Orientado a Objetos: El comportamiento del programa es llevado a cabo por objetos, entidades que representan elementos del problema a resolver y tienen atributos y comportamiento.
Ventajas de la programación orientada a objetos
No se encapsulan los atributos, ni el acceso a los atributos desde las funciones, que también están encapsuladas dentro de la clase.
Ofrece la posibilidad de heredar de unas clases a otras para que puedan acceder a los miembros de la clase padre, con lo cual podemos solucionar de una manera más eficiente, el ampliar el comportamiento de nuestros objetos o clases.
Podemos hacernos visualmente una idea más clara de cómo se puede comportar la clase, además de tener en el mismo sitio tanto las funciones que hacen que podamos manejar la clase como los datos que vamos a manejar, etc.
¿Cómo se piensa con Programación Orientada a Objetos?
Es muy parecido a cómo lo haríamos en la vida real.
Por ejemplo: vamos a pensar en un coche para tratar de modelizar en un esquema de POO.
- Elemento principal: coche.
- Características: marca, modelo, color, etc.
- Funcionalidades: reversa, aparcamiento, etc.
Ahora si pensamos el ejemplo anterior desde el esquema de Programación Orientada a Objetos, sería de la siguiente manera:
Para poder comentar el anterior esquema de POO fácilmente aparecen los denominados diagramas de clases.
Tipos de relaciones de clases
La Orientación a Objetos (POO) intenta modelar aplicaciones del mundo real tan fielmente como sea posible y, por lo tanto, debe reflejar estas relaciones entre clases y objetos.
Existen tres tipos de relaciones:
Agregación / Composición
Esta relación se presenta entre una clase TODO y una clase PARTE que es componente de TODO.
La implementación de este tipo de relación se consigue definiendo como atributo un objeto de la otra clase que es parte-de.
Los objetos de la clase TODO son objetos contenedores. Un objeto contenedor es aquel que contiene otros objetos.
Asociación
Especifica una relación semántica entre objetos no relacionados. Este tipo de relaciones permiten crear asociaciones que capturan los participantes en una relación semántica.
Son relaciones del tipo “pertenece_a” o “está_asociado_con”.
Se da cuando una clase usa a otra clase para realizar algo.
Generalización / Especialización. Herencia simple y herencia múltiple.
De todas las relaciones posibles entre las distintas clases y objetos, hay que destacar por su importancia en la POO el concepto de herencia. La relación de herencia es una relación entre clases que comparten su estructura y el comportamiento.
Resulta importante destacar que esta temática será abordada en próximos encuentros, por el momento únicamente definiremos los siguientes conceptos:
Herencia simple: Una clase comparte la estructura y comportamiento de una sola clase.
Herencia múltiple: Una clase comparte la estructura y comportamiento de varias clases.
Cardinalidad en las relaciones
Sabemos que un coche tiene un motor, y que la persona está asociada a un vehículo.
Ahí nace el concepto de cardinalidad, es decir indicar el número de Objetos que están en la relación. Por ejemplo, una persona puede tener muchos coches, y que los coches solo tienen un motor.
Además, sabemos que cada motor pertenece a un solo coche, y los coches a veces tienen más de un titular que lo usan, es decir tienen a varias personas para usarlo.