Herencia y Polimorfismo en Programación Orientada a Objetos

Clase 25 de 63Curso de Python

Resumen

El concepto de herencia en programación permite que una clase derive atributos y métodos de otra, facilitando la reutilización de código y la creación de estructuras jerárquicas lógicas. En este ejercicio, se aplica herencia para modelar una concesionaria que vende autos, bicicletas y camiones.

¿Cómo se crea la clase base para los vehículos?

Primero, se define una clase base llamada Vehículo, que contiene atributos comunes como marca, modelo, precio y disponibilidad. Los métodos básicos incluyen verificar disponibilidad, obtener el precio y vender el vehículo.

class Vehículo: def __init__(self, marca, modelo, precio): self.marca = marca self.modelo = modelo self.precio = precio self.disponible = True def vender(self): if self.disponible: self.disponible = False print(f"El vehículo {self.marca} ha sido vendido.") else: print(f"El vehículo {self.marca} no está disponible.") def estado(self): return self.disponible def get_price(self): return self.precio

¿Cómo se implementa la herencia en las clases derivadas?

Las clases Auto, Bicicleta y Camión heredan de Vehículo. Cada una puede personalizar métodos específicos según sus necesidades.

class Auto(Vehículo): def start(self): if self.disponible: return f"El motor del coche {self.marca} está en marcha." else: return f"El coche {self.marca} no está disponible." def stop(self): if self.disponible: return f"El motor del coche {self.marca} se ha detenido." else: return f"El coche {self.marca} no está disponible."

¿Cómo se manejan las instancias de las clases en la concesionaria?

Se crean instancias de Auto, Cliente y Concesionaria para manejar el inventario y las ventas.

class Cliente: def __init__(self, nombre): self.nombre = nombre self.autos = [] def comprar_auto(self, auto): if auto.estado(): self.autos.append(auto) auto.vender() else: print(f"El auto {auto.marca} no está disponible.") class Concesionaria: def __init__(self): self.inventario = [] self.clientes = [] def añadir_auto(self, auto): self.inventario.append(auto) def registrar_cliente(self, cliente): self.clientes.append(cliente) def mostrar_disponibles(self): for auto in self.inventario: if auto.estado(): print(f"{auto.marca} {auto.modelo} está disponible por {auto.get_price()}.")

¿Cómo se aplican las operaciones en la concesionaria?

Finalmente, se crean instancias y se realizan operaciones para mostrar la funcionalidad del sistema.

# Crear autos auto1 = Auto("Toyota", "Corolla", 20000) auto2 = Auto("Honda", "Civic", 22000) auto3 = Auto("Ford", "Mustang", 30000) # Crear cliente cliente = Cliente("Carlos") # Crear concesionaria concesionaria = Concesionaria() concesionaria.añadir_auto(auto1) concesionaria.añadir_auto(auto2) concesionaria.añadir_auto(auto3) concesionaria.registrar_cliente(cliente) # Mostrar autos disponibles concesionaria.mostrar_disponibles() # Comprar auto cliente.comprar_auto(auto1) # Mostrar autos disponibles después de la compra concesionaria.mostrar_disponibles()

¿Qué beneficios trae la herencia en este contexto?

  • Reutilización de código: Las clases derivadas heredan atributos y métodos comunes.
  • Mantenimiento: Facilita el mantenimiento y la actualización del código.
  • Extensibilidad: Permite agregar nuevas clases derivadas con facilidad.
      Herencia y Polimorfismo en Programación Orientada a Objetos