Skip to content

Commit 91ea887

Browse files
authored
Merge pull request #4884 from Kenysdev/28.cs
#28 - c#
2 parents dd24bdb + 479c911 commit 91ea887

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

Roadmap/28 - SOLID LSP/c#/kenysdev.cs

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
namespace exs28;
2+
/*
3+
╔══════════════════════════════════════╗
4+
║ Autor: Kenys Alvarado ║
5+
║ GitHub: https://github.com/Kenysdev ║
6+
║ 2024 - C# ║
7+
╚══════════════════════════════════════╝
8+
-------------------------------------------------
9+
* SOLID: PRINCIPIO DE SUSTITUCIÓN DE LISKOV (LSP)
10+
-------------------------------------------------
11+
*/
12+
13+
// clase base
14+
public abstract class Animal(string name)
15+
{
16+
protected string name = name;
17+
18+
public abstract string MakeSound();
19+
}
20+
21+
// Clases derivadas
22+
public class Dog(string name) : Animal(name)
23+
{
24+
public override string MakeSound()
25+
{
26+
return $"{name} hace Woof";
27+
}
28+
}
29+
30+
public class Cat(string name) : Animal(name)
31+
{
32+
public override string MakeSound()
33+
{
34+
return $"{name} hace Meow";
35+
}
36+
}
37+
38+
/*
39+
_______________
40+
* EJERCICIO:
41+
* Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
42+
* cumplir el LSP.
43+
* Instrucciones:
44+
* 1. Crea la clase Vehículo.
45+
* 2. Añade tres subclases de Vehículo.
46+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
47+
* 4. Desarrolla un código que compruebe que se cumple el LSP.
48+
*/
49+
50+
// Clase base abstracta
51+
public abstract class Vehicle(string brand, string model)
52+
{
53+
// Propiedades
54+
public string Brand { get; } = brand;
55+
public string Model { get; } = model;
56+
57+
// Métodos abstractos
58+
public abstract string Accelerate();
59+
public abstract string Brake();
60+
}
61+
62+
// Clases derivadas
63+
public class Car(string brand, string model) : Vehicle(brand, model)
64+
{
65+
public override string Accelerate()
66+
{
67+
string properties = $"{Brand} - {Model}";
68+
return $"Acelerando auto: {properties}";
69+
}
70+
71+
public override string Brake()
72+
{
73+
string properties = $"{Brand} - {Model}";
74+
return $"Frenando auto: {properties}";
75+
}
76+
}
77+
78+
public class Motorcycle(string brand, string model) : Vehicle(brand, model)
79+
{
80+
public override string Accelerate()
81+
{
82+
string properties = $"{Brand} - {Model}";
83+
return $"Acelerando Motocicleta: {properties}";
84+
}
85+
86+
public override string Brake()
87+
{
88+
string properties = $"{Brand} - {Model}";
89+
return $"Frenando Motocicleta: {properties}";
90+
}
91+
}
92+
93+
public class Truck(string brand, string model) : Vehicle(brand, model)
94+
{
95+
public override string Accelerate()
96+
{
97+
string properties = $"{Brand} - {Model}";
98+
return $"Acelerando Camión: {properties}";
99+
}
100+
101+
public override string Brake()
102+
{
103+
string properties = $"{Brand} - {Model}";
104+
return $"Frenando Camión: {properties}";
105+
}
106+
}
107+
108+
//__________________
109+
public class Program
110+
{
111+
static void Main()
112+
{
113+
Dog perro = new("Max");
114+
Cat gato = new("Milo");
115+
Animal Ncat = new Cat("Dex");
116+
117+
Console.WriteLine(perro.MakeSound());
118+
Console.WriteLine(gato.MakeSound());
119+
Console.WriteLine(Ncat.MakeSound());
120+
121+
//___________________________
122+
// exs 2
123+
124+
Car car = new("Honda", "Civic");
125+
TestSubClass(car);
126+
127+
Vehicle motorcycle = new Motorcycle("Kawasaki", "Ninja");
128+
TestSubClass(motorcycle);
129+
130+
Vehicle truck = new Truck("Ford", "Raptor");
131+
TestSubClass(truck);
132+
133+
}
134+
135+
static void TestSubClass(Vehicle subClass)
136+
{
137+
Console.WriteLine("\nPropiedades:");
138+
Console.WriteLine($"{subClass.Brand} - {subClass.Model}");
139+
140+
Console.WriteLine("\nMétodos:");
141+
Console.WriteLine(subClass.Accelerate());
142+
Console.WriteLine(subClass.Brake());
143+
}
144+
}

0 commit comments

Comments
 (0)