Skip to content

Commit 966458d

Browse files
authored
Merge pull request mouredev#4974 from Kenysdev/29.rs
#29 - rust
2 parents 4046d4c + 38f5522 commit 966458d

File tree

1 file changed

+178
-0
lines changed

1 file changed

+178
-0
lines changed
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
/*
2+
╔═══════════════════════════════════════╗
3+
║ Autor: Kenys Alvarado ║
4+
║ GitHub: https://github.com/Kenysdev ║
5+
║ 2024 - Rust ║
6+
╚═══════════════════════════════════════╝
7+
-----------------------------------------------------
8+
* SOLID: PRINCIPIO DE SEGREGACIÓN DE INTERFACES (ISP)
9+
-----------------------------------------------------
10+
- Una estructura no debería estar obligada a implementar interfaces que no utiliza.
11+
' Evitando crear grandes clases monolíticas.
12+
13+
_______________
14+
' NOTA: Este ejemplo muestra el uso CORRECTO. Para suponer un ejemplo que viole el principio, sería.
15+
'       Imaginar todos los métodos siguientes, en una sola interfaz, entonces algunos dispositivos
16+
'      implementarían una interfaz que no necesitan.
17+
*/
18+
19+
//____________________________________
20+
// Interfaces
21+
trait Playable {
22+
fn play(&self);
23+
}
24+
25+
trait Displayable {
26+
fn display(&self);
27+
}
28+
29+
//____________________________________
30+
// Implementación
31+
32+
struct Speaker;
33+
34+
impl Playable for Speaker {
35+
fn play(&self) {
36+
println!("El altavoz está reproduciendo música.");
37+
}
38+
}
39+
40+
//____________________________________
41+
struct Phone;
42+
43+
impl Playable for Phone {
44+
fn play(&self) {
45+
println!("El teléfono está reproduciendo una canción.");
46+
}
47+
}
48+
49+
impl Displayable for Phone {
50+
fn display(&self) {
51+
println!("El teléfono está mostrando la pantalla de reproducción.");
52+
}
53+
}
54+
55+
/*
56+
//____________________________________
57+
* EJERCICIO #2:
58+
'* Crea un gestor de impresoras.
59+
'* Requisitos:
60+
'* 1. Algunas impresoras sólo imprimen en blanco y negro.
61+
'* 2. Otras sólo a color.
62+
'* 3. Otras son multifunción, pueden imprimir, escanear y enviar fax.
63+
'* Instrucciones:
64+
'* 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones.
65+
'* 2. Aplica el ISP a la implementación.
66+
'* 3. Desarrolla un código que compruebe que se cumple el principio.
67+
*/
68+
69+
//____________________________________
70+
// Interfaces
71+
trait IPrinter {
72+
fn print_file(&self, file: &str);
73+
}
74+
75+
trait IScanner {
76+
fn to_scan(&self, path_save: &str);
77+
}
78+
79+
trait IFax {
80+
fn send_file(&self, file: &str, phone_number: i32);
81+
}
82+
83+
//____________________________________
84+
// Implementación
85+
86+
struct MonoPrinter;
87+
88+
impl IPrinter for MonoPrinter {
89+
fn print_file(&self, file: &str) {
90+
println!("\nImpresora blanco y negro:");
91+
println!("{} se imprimió.", file);
92+
}
93+
}
94+
95+
//____________________________________
96+
struct ColorPrinter;
97+
98+
impl IPrinter for ColorPrinter {
99+
fn print_file(&self, file: &str) {
100+
println!("\nImpresora a color:");
101+
println!("{} se imprimió.", file);
102+
}
103+
}
104+
105+
//____________________________________
106+
struct Scanner;
107+
108+
impl IScanner for Scanner {
109+
fn to_scan(&self, path_save: &str) {
110+
println!("\nEscaneo realizado, guardado en: {}", path_save);
111+
}
112+
}
113+
114+
//____________________________________
115+
struct Fax;
116+
117+
impl IFax for Fax {
118+
fn send_file(&self, file: &str, phone_number: i32) {
119+
println!("\n{} fue enviado a: {}", file, phone_number);
120+
}
121+
}
122+
123+
//____________________________________
124+
struct MultiFunctionPrinter {
125+
mono_printer: MonoPrinter,
126+
color_printer: ColorPrinter,
127+
scanner: Scanner,
128+
fax: Fax,
129+
}
130+
131+
impl MultiFunctionPrinter {
132+
fn new() -> Self {
133+
MultiFunctionPrinter {
134+
mono_printer: MonoPrinter,
135+
color_printer: ColorPrinter,
136+
scanner: Scanner,
137+
fax: Fax,
138+
}
139+
}
140+
}
141+
142+
//____________________________________
143+
fn main() {
144+
// exs 1
145+
let speaker = Speaker;
146+
speaker.play();
147+
148+
let phone = Phone;
149+
phone.play();
150+
phone.display();
151+
152+
//____________________________________
153+
// exs 2
154+
println!("\nExs #2");
155+
156+
// Individuales
157+
let mono_printer = MonoPrinter;
158+
mono_printer.print_file("filex.pdf");
159+
160+
let color_printer = ColorPrinter;
161+
color_printer.print_file("filex.pdf");
162+
163+
let scanner = Scanner;
164+
scanner.to_scan("c:\\docs");
165+
166+
let fax = Fax;
167+
fax.send_file("filex.pdf", 12345678);
168+
169+
//____________________________________
170+
println!("\n__________\nMultifunción");
171+
let mfp = MultiFunctionPrinter::new();
172+
173+
mfp.mono_printer.print_file("filex.pdf");
174+
mfp.color_printer.print_file("filex.pdf");
175+
mfp.scanner.to_scan("c:\\docs");
176+
mfp.fax.send_file("filex.pdF", 123456789);
177+
178+
}

0 commit comments

Comments
 (0)