|
| 1 | +' ╔══════════════════════════════════════╗ |
| 2 | +' ║ Autor: Kenys Alvarado ║ |
| 3 | +' ║ GitHub: https://github.com/Kenysdev ║ |
| 4 | +' ║ 2024 - VB.NET ║ |
| 5 | +' ╚══════════════════════════════════════╝ |
| 6 | +'------------------------------------------------- |
| 7 | +'* SOLID: PRINCIPIO DE SUSTITUCIÓN DE LISKOV (LSP) |
| 8 | +'------------------------------------------------- |
| 9 | +' - Cualquier objeto de una subclase debe comportarse de manera consistente con los objetos de |
| 10 | +' la clase base, cumpliendo con los contratos definidos por la interfaz de la clase base. |
| 11 | + |
| 12 | + |
| 13 | +Public MustInherit Class ClassBase |
| 14 | + Public MustOverride Sub MethodBase() |
| 15 | +End Class |
| 16 | + |
| 17 | +Public Class SubClass1 |
| 18 | + Inherits ClassBase |
| 19 | + |
| 20 | + Public Overrides Sub MethodBase() |
| 21 | + Console.WriteLine("SubClass1") |
| 22 | + End Sub |
| 23 | +End Class |
| 24 | + |
| 25 | +Public Class SubClass2 |
| 26 | + Inherits ClassBase |
| 27 | + |
| 28 | + Public Overrides Sub MethodBase() |
| 29 | + Console.WriteLine("SubClass2") |
| 30 | + End Sub |
| 31 | +End Class |
| 32 | + |
| 33 | +'__________________________ |
| 34 | +'* EJERCICIO |
| 35 | +'* Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como |
| 36 | +'* cumplir el LSP. |
| 37 | +'* Instrucciones: |
| 38 | +'* 1. Crea la clase Vehículo. |
| 39 | +'* 2. Añade tres subclases de Vehículo. |
| 40 | +'* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda. |
| 41 | +'* 4. Desarrolla un código que compruebe que se cumple el LSP. |
| 42 | + |
| 43 | +' ____________________________________________________ |
| 44 | +' Clase Base |
| 45 | +Public MustInherit Class Vehicle |
| 46 | + ' Propiedades |
| 47 | + Public ReadOnly Property Brand As String |
| 48 | + Public ReadOnly Property Model As String |
| 49 | + |
| 50 | + ' Constructor |
| 51 | + Public Sub New(brand As String, model As String) |
| 52 | + Me.Brand = brand |
| 53 | + Me.Model = model |
| 54 | + End Sub |
| 55 | + |
| 56 | + ' Métodos abstractos |
| 57 | + Public MustOverride Function Accelerate() As String |
| 58 | + Public MustOverride Function Brake() As String |
| 59 | +End Class |
| 60 | + |
| 61 | +' ____________________________________________________ |
| 62 | +' Clase derivadas |
| 63 | +Public Class Car |
| 64 | + Inherits Vehicle |
| 65 | + |
| 66 | + Public Sub New(brand As String, model As String) |
| 67 | + MyBase.New(brand, model) |
| 68 | + End Sub |
| 69 | + |
| 70 | + Public Overrides Function Accelerate() As String |
| 71 | + Dim properties As String = $"{Brand} - {Model}" |
| 72 | + Return $"Acelerando auto: {properties}" |
| 73 | + End Function |
| 74 | + |
| 75 | + Public Overrides Function Brake() As String |
| 76 | + Dim properties As String = $"{Brand} - {Model}" |
| 77 | + Return $"Frenando auto: {properties}" |
| 78 | + End Function |
| 79 | +End Class |
| 80 | + |
| 81 | +' ____________________________________________________ |
| 82 | +Class Motorcycle |
| 83 | + Inherits Vehicle |
| 84 | + |
| 85 | + Public Sub New(brand As String, model As String) |
| 86 | + MyBase.New(brand, model) |
| 87 | + End Sub |
| 88 | + |
| 89 | + Public Overrides Function Accelerate() As String |
| 90 | + Dim properties As String = $"{Brand} - {Model}" |
| 91 | + Return $"Acelerando Motocicleta: {properties}" |
| 92 | + End Function |
| 93 | + |
| 94 | + Public Overrides Function Brake() As String |
| 95 | + Dim properties As String = $"{Brand} - {Model}" |
| 96 | + Return $"Frenando Motocicleta: {properties}" |
| 97 | + End Function |
| 98 | +End Class |
| 99 | + |
| 100 | +' ____________________________________________________ |
| 101 | +Public Class Truck |
| 102 | + Inherits Vehicle |
| 103 | + |
| 104 | + Public Sub New(brand As String, model As String) |
| 105 | + MyBase.New(brand, model) |
| 106 | + End Sub |
| 107 | + |
| 108 | + Public Overrides Function Accelerate() As String |
| 109 | + Dim properties As String = $"{Brand} - {Model}" |
| 110 | + Return $"Acelerando Camión: {properties}" |
| 111 | + End Function |
| 112 | + |
| 113 | + Public Overrides Function Brake() As String |
| 114 | + Dim properties As String = $"{Brand} - {Model}" |
| 115 | + Return $"Frenando Camión: {properties}" |
| 116 | + End Function |
| 117 | +End Class |
| 118 | + |
| 119 | +' ____________________________________________________ |
| 120 | +Public Module Program |
| 121 | + Public Sub Main() |
| 122 | + ' Exs 1 |
| 123 | + |
| 124 | + Dim TrySubClass1 As ClassBase = New SubClass1 |
| 125 | + Dim TrySubClass2 As ClassBase = New SubClass2 |
| 126 | + |
| 127 | + TrySubClass1.MethodBase() |
| 128 | + TrySubClass2.MethodBase() |
| 129 | + |
| 130 | + '_____________________________________________ |
| 131 | + ' Exs 2 |
| 132 | + |
| 133 | + Dim Car As Vehicle = New Car("Honda", "Civic") |
| 134 | + TestSubClass(Car) |
| 135 | + |
| 136 | + Dim Motorcycle As Vehicle = New Motorcycle("Kawasaki", "Ninja") |
| 137 | + TestSubClass(Motorcycle) |
| 138 | + |
| 139 | + Dim Truck As Vehicle = New Truck("Ford", "Raptor") |
| 140 | + TestSubClass(Truck) |
| 141 | + |
| 142 | + End Sub |
| 143 | + |
| 144 | + Public Sub TestSubClass(SubClass As Vehicle) |
| 145 | + Console.WriteLine(vbCrLf + "Propiedades:") |
| 146 | + Console.WriteLine($"{SubClass.Brand} - {SubClass.Model}") |
| 147 | + |
| 148 | + Console.WriteLine(vbCrLf + "Métodos:") |
| 149 | + Console.WriteLine(SubClass.Accelerate()) |
| 150 | + Console.WriteLine(SubClass.Brake()) |
| 151 | + End Sub |
| 152 | +End Module |
0 commit comments