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