Herencia y Polimorfismo en Programación Orientada a Objetos
Clase 25 de 63 • Curso 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.