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.
classVehículo:def__init__(self, marca, modelo, precio): self.marca = marca
self.modelo = modelo
self.precio = precio
self.disponible =Truedefvender(self):if self.disponible: self.disponible =Falseprint(f"El vehículo {self.marca} ha sido vendido.")else:print(f"El vehículo {self.marca} no está disponible.")defestado(self):return self.disponible
defget_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.
classAuto(Vehículo):defstart(self):if self.disponible:returnf"El motor del coche {self.marca} está en marcha."else:returnf"El coche {self.marca} no está disponible."defstop(self):if self.disponible:returnf"El motor del coche {self.marca} se ha detenido."else:returnf"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.
classCliente:def__init__(self, nombre): self.nombre = nombre
self.autos =[]defcomprar_auto(self, auto):if auto.estado(): self.autos.append(auto) auto.vender()else:print(f"El auto {auto.marca} no está disponible.")classConcesionaria:def__init__(self): self.inventario =[] self.clientes =[]def añadir_auto(self, auto): self.inventario.append(auto)defregistrar_cliente(self, cliente): self.clientes.append(cliente)defmostrar_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 autosauto1 = Auto("Toyota","Corolla",20000)auto2 = Auto("Honda","Civic",22000)auto3 = Auto("Ford","Mustang",30000)# Crear clientecliente = Cliente("Carlos")# Crear concesionariaconcesionaria = Concesionaria()concesionaria.añadir_auto(auto1)concesionaria.añadir_auto(auto2)concesionaria.añadir_auto(auto3)concesionaria.registrar_cliente(cliente)# Mostrar autos disponiblesconcesionaria.mostrar_disponibles()# Comprar autocliente.comprar_auto(auto1)# Mostrar autos disponibles después de la compraconcesionaria.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