Programación orientada a objetos


Cuando aprendemos a programar, descubrimos que hay diferentes formas de organizar y escribir el código. Estas formas se llaman paradigmas de programación. Los más comunes son:

Programación estructurada: Se basa en dar instrucciones paso a paso, como seguir una receta. Es la forma más tradicional y probablemente la que ya has usado en Python.

Programación funcional: Aquí el código se organiza en funciones independientes que reciben datos, los procesan y devuelven resultados, un poco como máquinas que hacen tareas específicas.

Programación orientada a objetos (POO): Este paradigma organiza el código pensando en “objetos”, que son como cosas del mundo real. Cada objeto tiene características (atributos) y acciones (métodos). Por ejemplo, imagina que quieres programar sobre perros: todos los perros comparten características como nombre, raza o edad, pero cada uno tiene sus propios valores para esas características. Además, todos pueden hacer cosas como ladrar o correr, aunque cada perro lo haga a su manera.


Imagen logo Python

En la POO, usamos clases para definir cómo son los objetos y objetos para representar casos concretos. Así, el código se vuelve más organizado, fácil de entender y de reutilizar.


Ejemplo: Sistema de Gestión de Bibliotecas


El siguiente código Python implementa un sencillo sistema de gestión de biblioteca utilizando la programación orientada a objetos (POO).

Una breve explicación del código es:



class Libro:
    def __init__(self, titulo, autor):
        self.titulo = titulo
        self.autor = autor
        self.disponible = True
    
    def cambiar_estado(self):
        self.disponible = not self.disponible
    
    def __str__(self):
        estado = "Disponible" if self.disponible else "Prestado"
        return f"{self.titulo} por {self.autor} - {estado}"

class Biblioteca:
    def __init__(self):
        self.libros = []
    
    def agregar_libro(self, libro):
        self.libros.append(libro)
    
    def prestar_libro(self, titulo):
        for libro in self.libros:
            if libro.titulo == titulo:
                if libro.disponible:
                    libro.cambiar_estado()
                    print(f"El libro '{titulo}' ha sido prestado.")
                else:
                    print(f"El libro '{titulo}' ya está prestado.")
                return
        print(f"El libro '{titulo}' no está disponible en la biblioteca.")
    
    def consultar_inventario(self):
        for libro in self.libros:
            print(libro)

# Uso del sistema
biblioteca = Biblioteca()
libro1 = Libro("1984", "George Orwell")
libro2 = Libro("To Kill a Mockingbird", "Harper Lee")

biblioteca.agregar_libro(libro1)
biblioteca.agregar_libro(libro2)

print("Inventario de la biblioteca:")
biblioteca.consultar_inventario()

print("\nPrestando '1984':")
biblioteca.prestar_libro("1984")

print("\nInventario después del préstamo:")
biblioteca.consultar_inventario()

print("\nIntentando prestar '1984' nuevamente:")
biblioteca.prestar_libro("1984")

    

¿Que otros libros agregarias?

Creación de Figuras Geométricas con POO en Python

+

Para ilustrar cómo usar la programación orientada a objetos (POO) en Python para crear figuras geométricas y mostrarlas en la pantalla, utilizaremos la biblioteca Turtle. Esta biblioteca permite dibujar gráficos en una ventana de forma sencilla.


Instalación de la Biblioteca


La biblioteca Turtle viene incluida con Python, por lo que no es necesario instalarla por separado. Solo necesitas tener Python instalado en tu sistema.


Código Python


import turtle

# Clase base para las figuras geométricas
class FiguraGeometrica:
    def __init__(self, color):
        self.color = color

    def dibujar(self):
        raise NotImplementedError("Método 'dibujar' no implementado en la clase base")

# Clase para un cuadrado
class Cuadrado(FiguraGeometrica):
    def __init__(self, color, longitud_lado):
        super().__init__(color)
        self.longitud_lado = longitud_lado

    def dibujar(self):
        turtle.begin_fill()
        turtle.fillcolor(self.color)
        for _ in range(4):
            turtle.forward(self.longitud_lado)
            turtle.right(90)
        turtle.end_fill()

# Clase para un círculo
class Circulo(FiguraGeometrica):
    def __init__(self, color, radio):
        super().__init__(color)
        self.radio = radio

    def dibujar(self):
        turtle.begin_fill()
        turtle.fillcolor(self.color)
        turtle.circle(self.radio)
        turtle.end_fill()

# Configuración de la ventana de dibujo
turtle.speed(2)
turtle.bgcolor("white")

# Crear y dibujar un cuadrado rojo
cuadrado = Cuadrado("red", 100)
cuadrado.dibujar()

# Mover la tortuga para no sobreponer las figuras
turtle.penup()
turtle.goto(200, 0)
turtle.pendown()

# Crear y dibujar un círculo azul
circulo = Circulo("blue", 50)
circulo.dibujar()

# Finalizar el dibujo
turtle.hideturtle()
turtle.done()

    

Explicación

En este código:

  • Clase FiguraGeometrica: Es una clase base que define un método abstracto dibujar, que debe ser implementado por las clases derivadas.
  • Clase Cuadrado: Hereda de FiguraGeometrica y proporciona una implementación específica para dibujar un cuadrado.
  • Clase Circulo: También hereda de FiguraGeometrica y proporciona una implementación específica para dibujar un círculo.

La biblioteca Turtle es ideal para este tipo de tareas, ya que proporciona una forma sencilla de dibujar gráficos y visualizar resultados en una ventana gráfica.