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 (" \n Prueba de Impresora a Color:" )
93
+ gestorImpresoras.imprimirDocumento(impresoraColor, " Documento en blanco y negro" )
94
+ gestorImpresoras.imprimirDocumentoColor(impresoraColor, " Documento en color" )
95
+
96
+ println (" \n Prueba 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