Skip to content

Commit 147bb29

Browse files
authored
Merge pull request mouredev#5692 from nlarrea/js-28
#28 - javascript
2 parents c0ddec0 + fa09991 commit 147bb29

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
/**
2+
* EJERCICIO:
3+
* Explora el "Principio SOLID de Sustitución de Liskov (Liskov Substitution Principle, LSP)"
4+
* y crea un ejemplo simple donde se muestre su funcionamiento
5+
* de forma correcta e incorrecta.
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
9+
* cumplir el LSP.
10+
* Instrucciones:
11+
* 1. Crea la clase Vehículo.
12+
* 2. Añade tres subclases de Vehículo.
13+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
14+
* 4. Desarrolla un código que compruebe que se cumple el LSP.
15+
*/
16+
17+
18+
// Incorrect
19+
20+
21+
class BirdWrong {
22+
fly() {
23+
return 'Flying';
24+
}
25+
};
26+
27+
28+
class OstrichWrong extends BirdWrong {
29+
fly() {
30+
throw new Error('Ostriches can\'t fly');
31+
}
32+
};
33+
34+
35+
// let bird = new BirdWrong();
36+
// console.log(bird.fly()); // Flying
37+
// let ostrich = new OstrichWrong();
38+
// console.log(ostrich.fly()); // Error
39+
40+
41+
// Correct
42+
43+
44+
class Bird {
45+
move() {
46+
return 'FLying';
47+
}
48+
};
49+
50+
51+
class Ostrich extends Bird {
52+
move() {
53+
return 'Walking';
54+
}
55+
};
56+
57+
58+
const bird = new Bird();
59+
console.log(bird.move()); // Flying
60+
const ostrich = new Ostrich();
61+
console.log(ostrich.move()); // Walking
62+
63+
64+
/*
65+
* DIFICULTAD EXTRA (opcional):
66+
* Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
67+
* cumplir el LSP.
68+
* Instrucciones:
69+
* 1. Crea la clase Vehículo.
70+
* 2. Añade tres subclases de Vehículo.
71+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
72+
* 4. Desarrolla un código que compruebe que se cumple el LSP.
73+
*/
74+
75+
76+
class Vehicle {
77+
constructor(speed=0) {
78+
this.speed = speed;
79+
}
80+
81+
accelerate(increment) {
82+
this.speed += increment;
83+
console.log(`Speed: ${this.speed} km/h`);
84+
}
85+
86+
brake(decrement) {
87+
this.speed -= decrement;
88+
console.log(`Speed: ${this.speed} km/h`);
89+
}
90+
};
91+
92+
93+
class Motorbike extends Vehicle {
94+
constructor(speed=0) {
95+
super(speed);
96+
}
97+
98+
accelerate(increment) {
99+
console.log('Motorbike is accelerating...');
100+
super.accelerate(increment);
101+
}
102+
103+
brake(decrement) {
104+
console.log('Motorbike is braking...');
105+
super.brake(decrement);
106+
}
107+
};
108+
109+
110+
class Car extends Vehicle {
111+
constructor(speed=0) {
112+
super(speed);
113+
}
114+
115+
accelerate(increment) {
116+
console.log('Car is accelerating...');
117+
super.accelerate(increment);
118+
}
119+
120+
brake(decrement) {
121+
console.log('Car is braking...');
122+
super.brake(decrement);
123+
}
124+
};
125+
126+
127+
class Bicycle extends Vehicle {
128+
constructor(speed=0) {
129+
super(speed);
130+
}
131+
132+
accelerate(increment) {
133+
console.log('Bicycle is accelerating...');
134+
super.accelerate(increment);
135+
}
136+
137+
brake(decrement) {
138+
console.log('Bicycle is braking...');
139+
super.brake(decrement);
140+
}
141+
};
142+
143+
144+
function testVehicle(vehicle) {
145+
vehicle.accelerate(10);
146+
vehicle.brake(2);
147+
console.log('');
148+
};
149+
150+
151+
const motorbike = new Motorbike();
152+
const car = new Car();
153+
const bicycle = new Bicycle();
154+
155+
testVehicle(motorbike);
156+
testVehicle(car);
157+
testVehicle(bicycle);

0 commit comments

Comments
 (0)