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