Skip to content

Commit dc184a8

Browse files
committed
#28 Kotlin y #29 Kotlin
1 parent eaacbda commit dc184a8

File tree

2 files changed

+192
-0
lines changed

2 files changed

+192
-0
lines changed
+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Principio de Sustitución de Liskov (LSP):
3+
*
4+
* El LSP establece que los objetos de una superclase deben poder ser reemplazados
5+
* por objetos de sus subclases sin afectar la corrección del programa. En otras palabras,
6+
* las subclases deben ser completamente sustituibles por sus clases base.
7+
*
8+
* Este principio asegura que una subclase puede asumir el lugar de su superclase
9+
* sin causar errores o comportamientos inesperados en el programa.
10+
*/
11+
12+
// Clase base Vehiculo
13+
abstract class Vehiculo {
14+
abstract fun acelerar(incrementoVelocidad: Int)
15+
abstract fun frenar(decrementoVelocidad: Int)
16+
abstract fun obtenerVelocidadActual(): Int
17+
}
18+
19+
// Subclase Coche
20+
class Coche : Vehiculo() {
21+
private var velocidad = 0
22+
23+
override fun acelerar(incrementoVelocidad: Int) {
24+
velocidad += incrementoVelocidad
25+
println("Coche acelerando. Velocidad actual: $velocidad km/h")
26+
}
27+
28+
override fun frenar(decrementoVelocidad: Int) {
29+
velocidad = maxOf(0, velocidad - decrementoVelocidad)
30+
println("Coche frenando. Velocidad actual: $velocidad km/h")
31+
}
32+
33+
override fun obtenerVelocidadActual(): Int = velocidad
34+
}
35+
36+
// Subclase Motocicleta
37+
class Motocicleta : Vehiculo() {
38+
private var velocidad = 0
39+
40+
override fun acelerar(incrementoVelocidad: Int) {
41+
velocidad += incrementoVelocidad
42+
println("Motocicleta acelerando. Velocidad actual: $velocidad km/h")
43+
}
44+
45+
override fun frenar(decrementoVelocidad: Int) {
46+
velocidad = maxOf(0, velocidad - decrementoVelocidad)
47+
println("Motocicleta frenando. Velocidad actual: $velocidad km/h")
48+
}
49+
50+
override fun obtenerVelocidadActual(): Int = velocidad
51+
}
52+
53+
// Subclase Bicicleta
54+
class Bicicleta : Vehiculo() {
55+
private var velocidad = 0
56+
57+
override fun acelerar(incrementoVelocidad: Int) {
58+
velocidad += incrementoVelocidad
59+
println("Bicicleta acelerando. Velocidad actual: $velocidad km/h")
60+
}
61+
62+
override fun frenar(decrementoVelocidad: Int) {
63+
velocidad = maxOf(0, velocidad - decrementoVelocidad)
64+
println("Bicicleta frenando. Velocidad actual: $velocidad km/h")
65+
}
66+
67+
override fun obtenerVelocidadActual(): Int = velocidad
68+
}
69+
70+
// Función para probar el LSP
71+
fun probarLSP(vehiculo: Vehiculo) {
72+
vehiculo.acelerar(20)
73+
vehiculo.frenar(10)
74+
println("Velocidad final: ${vehiculo.obtenerVelocidadActual()} km/h")
75+
println()
76+
}
77+
78+
fun main() {
79+
val coche = Coche()
80+
val motocicleta = Motocicleta()
81+
val bicicleta = Bicicleta()
82+
83+
println("Probando Coche:")
84+
probarLSP(coche)
85+
86+
println("Probando Motocicleta:")
87+
probarLSP(motocicleta)
88+
89+
println("Probando Bicicleta:")
90+
probarLSP(bicicleta)
91+
}
+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
* Principio de Segregación de Interfaces (ISP)
3+
*
4+
* El ISP establece que ningún cliente debe ser forzado a depender de métodos
5+
* que no utiliza. Sugiere dividir interfaces grandes en otras más pequeñas
6+
* y específicas para que los clientes solo tengan que conocer los métodos
7+
* que realmente necesitan.
8+
*/
9+
10+
// Interfaces segregadas
11+
interface Impresora {
12+
fun imprimir(documento: String)
13+
}
14+
15+
interface ImpresoraColor : Impresora {
16+
fun imprimirColor(documento: String)
17+
}
18+
19+
interface Escaner {
20+
fun escanear(documento: String): String
21+
}
22+
23+
interface Fax {
24+
fun enviarFax(documento: String)
25+
}
26+
27+
// Implementaciones
28+
class ImpresoraBasica : Impresora {
29+
override fun imprimir(documento: String) {
30+
println("Imprimiendo en blanco y negro: $documento")
31+
}
32+
}
33+
34+
class ImpresoraAColor : ImpresoraColor {
35+
override fun imprimir(documento: String) {
36+
println("Imprimiendo en blanco y negro: $documento")
37+
}
38+
39+
override fun imprimirColor(documento: String) {
40+
println("Imprimiendo en color: $documento")
41+
}
42+
}
43+
44+
class ImpresoraMultifuncion : ImpresoraColor, Escaner, Fax {
45+
override fun imprimir(documento: String) {
46+
println("Imprimiendo en blanco y negro: $documento")
47+
}
48+
49+
override fun imprimirColor(documento: String) {
50+
println("Imprimiendo en color: $documento")
51+
}
52+
53+
override fun escanear(documento: String): String {
54+
println("Escaneando: $documento")
55+
return "Documento escaneado: $documento"
56+
}
57+
58+
override fun enviarFax(documento: String) {
59+
println("Enviando fax: $documento")
60+
}
61+
}
62+
63+
// Gestor de impresoras
64+
class GestorImpresoras {
65+
fun imprimirDocumento(impresora: Impresora, documento: String) {
66+
impresora.imprimir(documento)
67+
}
68+
69+
fun imprimirDocumentoColor(impresora: ImpresoraColor, documento: String) {
70+
impresora.imprimirColor(documento)
71+
}
72+
73+
fun escanearDocumento(escaner: Escaner, documento: String): String {
74+
return escaner.escanear(documento)
75+
}
76+
77+
fun enviarFax(fax: Fax, documento: String) {
78+
fax.enviarFax(documento)
79+
}
80+
}
81+
82+
// Función principal para probar el sistema
83+
fun main() {
84+
val gestorImpresoras = GestorImpresoras()
85+
val impresoraBasica = ImpresoraBasica()
86+
val impresoraColor = ImpresoraAColor()
87+
val multifuncion = ImpresoraMultifuncion()
88+
89+
println("Prueba de Impresora Básica:")
90+
gestorImpresoras.imprimirDocumento(impresoraBasica, "Documento en blanco y negro")
91+
92+
println("\nPrueba de Impresora a Color:")
93+
gestorImpresoras.imprimirDocumento(impresoraColor, "Documento en blanco y negro")
94+
gestorImpresoras.imprimirDocumentoColor(impresoraColor, "Documento en color")
95+
96+
println("\nPrueba de Impresora Multifunción:")
97+
gestorImpresoras.imprimirDocumento(multifuncion, "Documento en blanco y negro")
98+
gestorImpresoras.imprimirDocumentoColor(multifuncion, "Documento en color")
99+
gestorImpresoras.escanearDocumento(multifuncion, "Documento para escanear")
100+
gestorImpresoras.enviarFax(multifuncion, "Documento para enviar por fax")
101+
}

0 commit comments

Comments
 (0)