La programación orientada a objetos (POO) es un paradigma de programación que busca modelar el mundo real a través de la creación de objetos, los cuales contienen atributos (datos) y métodos (funciones) que describen su comportamiento. En la POO, se pueden crear múltiples instancias de un objeto y cada una de ellas tendrá su propio estado y comportamiento, aunque compartirán la misma estructura.

Python es un lenguaje orientado a objetos, lo cual significa que permite la creación de objetos y clases, que son las plantillas para la creación de objetos. Cada objeto es una instancia única de una determinada clase, que puede ser creada a partir de sus atributos y métodos. La POO se utiliza comúnmente para el desarrollo de software porque favorece la modularidad, la reutilización de código, la capacidad de mantenimiento y la facilidad de expansión. Además, permite desarrollar soluciones de software más robustas y escalables. En este curso, se abordarán los fundamentos de la POO con Python, desde la creación de clases y objetos hasta la herencia y el polimorfismo, para que los estudiantes puedan adquirir conocimientos sólidos en este paradigma y puedan aplicarlo en sus proyectos de programación.

La programación orientada a objetos (POO) es un paradigma de programación que utiliza objetos para representar entidades y sus interacciones. Con la POO, se puede crear código más modular, reutilizable y mantenible. Un objeto es una instancia de una clase, y una clase es una plantilla o un modelo para crear objetos.

Una clase puede tener atributos (variables) y métodos (funciones), que definen su comportamiento. Por ejemplo, si creamos una clase "Coche", sus atributos podrían ser el modelo, la marca, el color, el peso, etc.; y sus métodos podrían ser "arrancar", "acelerar", "frenar", "apagar", etc. Una de las principales ventajas de la POO es la encapsulación, que permite ocultar la complejidad del código internamente y ofrecer solo una interfaz pública para interactuar con el objeto. Los usuarios pueden utilizar los objetos sin conocer cómo funcionan internamente, lo que aumenta la seguridad, reduce el riesgo de errores y simplifica el diseño y la mantenibilidad del código. Otra ventaja es la herencia, que permite crear nuevas clases basadas en clases existentes, y agregar o sobrescribir sus atributos y métodos. Esto facilita la creación de código modular y reutilizable, ya que las nuevas clases heredan las funcionalidades de las clases padre.

Por último, la POO permite también el polimorfismo, que permite utilizar objetos de distintas clases como si fueran del mismo tipo, siempre y cuando compartan una interfaz común. Esto facilita la creación de librerías de clases que trabajen together o lo que se puede llamar "interoperabilidad". En resumen, la POO es un paradigma de programación que utiliza objetos para representar entidades y sus interacciones, con la finalidad de simplificar el diseño, el mantenimiento y la reutilización de código. Las clases son las plantillas para crear objetos, que tienen atributos y métodos que definen su comportamiento. La POO ofrece ventajas como la encapsulación, la herencia y el polimorfismo que facilitan la creación de código modular, reutilizable y seguro.

Un ejemplo práctico de programación orientada a objetos es la creación de una aplicación de procesamiento de pedidos en línea para una tienda de artículos deportivos. En lugar de pensar en la aplicación como una serie de instrucciones lineales, la programación orientada a objetos nos permite pensar en la aplicación como un conjunto de objetos que interactúan entre sí para cumplir su función.

Por ejemplo, puede ser útil crear una clase de "Producto" que represente las diferentes opciones de productos disponibles para la venta. Esta clase podría incluir atributos como el nombre del producto, la descripción, el precio y el inventario disponible. Una vez que se ha creado esta clase, se pueden crear instancias de ella para cada producto que se vende en la tienda. Otra clase útil podría ser la clase "Pedido", que podría contener información sobre los productos que ordenó el cliente, la dirección de envío y el estado actual del pedido. La aplicación podría entonces crear instancias de esta clase para cada pedido que se coloca. Con la programación orientada a objetos, también sería posible crear una clase "Carrito de compras" que contendría una lista de los productos elegidos por el cliente y las cantidades correspondientes. Esto permitiría a la aplicación realizar cálculos como el costo total de los productos en el carrito y actualizar el inventario disponible en función de los pedidos realizados. En resumen, la programación orientada a objetos nos permite crear clases que representen los diferentes objetos que interactúan en una aplicación, lo que simplifica la lógica de programación y hace que el código sea más fácil de mantener y actualizar.

Ejemplo de Programación Orientada a Objetos en Python

Un ejemplo práctico de programación orientada a objetos en Python.

Imagina que estamos creando una aplicación para administrar una lista de tareas. En este caso, podemos crear una clase llamada Tarea que tenga atributos como nombre, descripción y estado. También podemos crear métodos para la clase que nos permitan actualizar el estado de la tarea, agregar una descripción o cambiar su nombre.


class Tarea:
    def __init__(self, nombre, descripcion):
        self.nombre = nombre
        self.descripcion = descripcion
        self.estado = 'Pendiente'

    def cambiar_estado(self, estado):
        self.estado = estado

    def agregar_descripcion(self, descripcion):
        self.descripcion = descripcion

    def cambiar_nombre(self, nombre):
        self.nombre = nombre

    def __str__(self):
        return f'Tarea: {self.nombre}\nEstado: {self.estado}\nDescripción: {self.descripcion}'

En este caso, el método __init__ se llama cuando la clase es inicializada y define los atributos nombre, descripcion y estado. Los otros métodos que creamos nos permiten actualizar los atributos de la clase según sea necesario. Para usar esta clase, simplemente creamos instancias de la clase Tarea y llamamos a sus métodos:


class Tarea:
    def __init__(self, nombre, descripcion):
        self.nombre = nombre
        self.descripcion = descripcion
        self.estado = 'Pendiente'

    def cambiar_estado(self, estado):
        self.estado = estado

    def agregar_descripcion(self, descripcion):
        self.descripcion = descripcion

    def cambiar_nombre(self, nombre):
        self.nombre = nombre

    def __str__(self):
        return f'Tarea: {self.nombre}\nEstado: {self.estado}\nDescripción: {self.descripcion}'

tarea_1 = Tarea('Comprar comida', 'Ir al supermercado y comprar comida para la semana')
print(tarea_1)
tarea_1.agregar_descripcion('Comprar comida saludable y variada')
tarea_1.cambiar_estado('Realizado')
print(tarea_1)
tarea_1.cambiar_nombre('Comprar comida para la semana')
print(tarea_1)

Como puedes ver, la programación orientada a objetos nos permite crear clases que encapsulan datos y funcionalidades relacionados. En este caso, nuestra clase Tarea nos permite administrar una tarea específica y modificarla según sea necesario utilizando sus métodos.