1+ """
2+ Mauricio Leyva
3+
4+ Jerarquía de vehículos que cumple con el Principio de Sustitución de Liskov (LSP).
5+ Todos los vehículos deben poder acelerar y frenar.
6+
7+ Instrucciones:
8+ 1. Crea la clase Vehículo.
9+ 2. Añade tres subclases de Vehículo.
10+ 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
11+ 4. Desarrolla un código que compruebe que se cumple el LSP.
12+ """
13+
14+ from abc import ABC , abstractmethod
15+
16+ class Vehiculo (ABC ):
17+ def __init__ (self ):
18+ self .velocidad = 0
19+
20+ @abstractmethod
21+ def acelerar (self , incremento ):
22+ pass
23+
24+ @abstractmethod
25+ def frenar (self , decremento ):
26+ pass
27+
28+ def obtener_velocidad (self ):
29+ return self .velocidad
30+
31+ class Coche (Vehiculo ):
32+ def acelerar (self , incremento ):
33+ self .velocidad += incremento
34+ return f"Coche acelerando. Velocidad actual: { self .velocidad } km/h"
35+
36+ def frenar (self , decremento ):
37+ self .velocidad = max (0 , self .velocidad - decremento )
38+ return f"Coche frenando. Velocidad actual: { self .velocidad } km/h"
39+
40+ class Motocicleta (Vehiculo ):
41+ def acelerar (self , incremento ):
42+ self .velocidad += incremento * 1.2 # Las motos aceleran un poco más rápido
43+ return f"Motocicleta acelerando. Velocidad actual: { self .velocidad } km/h"
44+
45+ def frenar (self , decremento ):
46+ self .velocidad = max (0 , self .velocidad - decremento * 1.1 ) # Las motos frenan un poco más rápido
47+ return f"Motocicleta frenando. Velocidad actual: { self .velocidad } km/h"
48+
49+ class Camion (Vehiculo ):
50+ def acelerar (self , incremento ):
51+ self .velocidad += incremento * 0.8 # Los camiones aceleran más lento
52+ return f"Camión acelerando. Velocidad actual: { self .velocidad } km/h"
53+
54+ def frenar (self , decremento ):
55+ self .velocidad = max (0 , self .velocidad - decremento * 0.9 ) # Los camiones frenan más lento
56+ return f"Camión frenando. Velocidad actual: { self .velocidad } km/h"
57+
58+ def probar_vehiculo (vehiculo ):
59+ print (vehiculo .acelerar (30 ))
60+ print (vehiculo .acelerar (20 ))
61+ print (vehiculo .frenar (10 ))
62+ print (vehiculo .frenar (15 ))
63+ print (f"Velocidad final: { vehiculo .obtener_velocidad ()} km/h" )
64+ print ("-" * 50 )
65+
66+ # Comprobación del LSP
67+ vehiculos = [Coche (), Motocicleta (), Camion ()]
68+
69+ for v in vehiculos :
70+ print (f"Probando { v .__class__ .__name__ } :" )
71+ probar_vehiculo (v )
0 commit comments