Skip to content

Commit 19bc038

Browse files
committed
#26 - Java
1 parent 76c4740 commit 19bc038

File tree

1 file changed

+300
-0
lines changed

1 file changed

+300
-0
lines changed
+300
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
/*
2+
El Principio de Responsabilidad Única dice que, una clase debe hacer una sola cosa y, por lo tanto, debe tener una sola razón para cambiar.
3+
De esta manera, solo un cambio potencial en la especificación del software debería poder afectar la especificación de la clase.
4+
*/
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class Main {
10+
11+
public static void main(String[] args) {
12+
Revista revista = new Revista("Revista de Prueba", "Autor de Prueba", 10.0);
13+
Factura factura = new Factura(revista, 2, 0.1, 0.16);
14+
FacturaImpresion facturaImpresion = new FacturaImpresion(factura);
15+
FacturaPersistencia facturaPersistencia = new FacturaPersistencia(factura);
16+
}
17+
18+
/*
19+
* EJERCICIO:
20+
* Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility
21+
* Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento
22+
* de forma correcta e incorrecta.
23+
*/
24+
static class Revista {
25+
String nombre;
26+
String autor;
27+
double precio;
28+
29+
public Revista(String nombre, String autor, double precio) {
30+
this.nombre = nombre;
31+
this.autor = autor;
32+
this.precio = precio;
33+
}
34+
}
35+
36+
static class Factura {
37+
private Revista revista;
38+
private int cantidad;
39+
private double descuento;
40+
private double impuesto;
41+
private double total;
42+
43+
public Factura(Revista revista, int cantidad, double descuento, double impuesto) {
44+
this.revista = revista;
45+
this.cantidad = cantidad;
46+
this.descuento = descuento;
47+
this.impuesto = impuesto;
48+
this.total = this.calcularTotal();
49+
}
50+
51+
public double calcularTotal() {
52+
double precio = ((revista.precio - revista.precio - descuento) * this.cantidad);
53+
double precionConImpuesto = precio * (1 + this.impuesto);
54+
return precionConImpuesto;
55+
}
56+
57+
/*
58+
public void imprimirFactura() {
59+
System.out.println(cantidad + "x " + revista.nombre + " " + revista.precio + "$");
60+
System.out.println("Tasa de Descuento: " + descuento);
61+
System.out.println("Tasa de Impuesto: " + impuesto);
62+
System.out.println("Total: " + total);
63+
}*/
64+
65+
/*
66+
public void guardarArchivo() {
67+
// Crea un archivo con un nombre dado y guarda la factura
68+
}*/
69+
}
70+
71+
/*
72+
La clase Factura viola el principio de responsabilidad única, ya que tiene más de una razón para cambiar.
73+
La primera violación es el método imprimirFactura(), el cual contiene la lógica para imprimir la factura.
74+
La segunda violación es el método guardarArchivo(), el cual contiene la lógica para guardar la factura en un archivo, y mezcla lógica de persistencia con lógica de negocios.
75+
Para corregir esto, se puede crear una clase separada para imprimir la factura y otra para guardar la factura en un archivo.
76+
*/
77+
static class FacturaImpresion {
78+
private Factura factura;
79+
80+
public FacturaImpresion(Factura factura) {
81+
this.factura = factura;
82+
}
83+
84+
public void imprimir() {
85+
System.out.println(factura.cantidad + "x " + factura.revista.nombre + " " + factura.revista.precio + " $");
86+
System.out.println("Tasa de Descuento: " + factura.descuento);
87+
System.out.println("Tasa de Impuesto: " + factura.impuesto);
88+
System.out.println("Total: " + factura.total + " $");
89+
}
90+
}
91+
92+
static class FacturaPersistencia {
93+
Factura factura;
94+
95+
public FacturaPersistencia(Factura factura) {
96+
this.factura = factura;
97+
}
98+
99+
public void guardarArchivo(String nombreArchivo) {
100+
// Crea un archivo con un nombre dado y guarda la factura
101+
}
102+
}
103+
104+
/*
105+
* DIFICULTAD EXTRA (opcional):
106+
* Desarrolla un sistema de gestión para una biblioteca. El sistema necesita
107+
* manejar diferentes aspectos como el registro de libros, la gestión de usuarios
108+
* y el procesamiento de préstamos de libros.
109+
* Requisitos:
110+
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
111+
* información básica como título, autor y número de copias disponibles.
112+
* 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con
113+
* información básica como nombre, número de identificación y correo electrónico.
114+
* 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios
115+
* tomar prestados y devolver libros.
116+
* Instrucciones:
117+
* 1. Diseña una clase que no cumple el SRP: Crea una clase Library que maneje
118+
* los tres aspectos mencionados anteriormente (registro de libros, registro de
119+
* usuarios y procesamiento de préstamos).
120+
* 2. Refactoriza el código: Separa las responsabilidades en diferentes clases
121+
* siguiendo el Principio de Responsabilidad Única.
122+
*/
123+
124+
static class Libro {
125+
private String titulo;
126+
private String autor;
127+
private Integer copiasDisponibles;
128+
129+
public Libro(String titulo, String autor, Integer copiasDisponibles) {
130+
this.titulo = titulo;
131+
this.autor = autor;
132+
this.copiasDisponibles = copiasDisponibles;
133+
}
134+
135+
public String getTitulo() {
136+
return titulo;
137+
}
138+
139+
public void setTitulo(String titulo) {
140+
this.titulo = titulo;
141+
}
142+
143+
public String getAutor() {
144+
return autor;
145+
}
146+
147+
public void setAutor(String autor) {
148+
this.autor = autor;
149+
}
150+
151+
public Integer getCopiasDisponibles() {
152+
return copiasDisponibles;
153+
}
154+
155+
public void setCopiasDisponibles(Integer copiasDisponibles) {
156+
this.copiasDisponibles = copiasDisponibles;
157+
}
158+
}
159+
160+
static class Usuario {
161+
private String nombre;
162+
private int identificacion;
163+
private String email;
164+
165+
public Usuario(String nombre, int identificacion, String email) {
166+
this.nombre = nombre;
167+
this.identificacion = identificacion;
168+
this.email = email;
169+
}
170+
171+
public String getNombre() {
172+
return nombre;
173+
}
174+
175+
public void setNombre(String nombre) {
176+
this.nombre = nombre;
177+
}
178+
179+
public int getIdentificacion() {
180+
return identificacion;
181+
}
182+
183+
public void setIdentificacion(int identificacion) {
184+
this.identificacion = identificacion;
185+
}
186+
187+
public String getEmail() {
188+
return email;
189+
}
190+
191+
public void setEmail(String email) {
192+
this.email = email;
193+
}
194+
}
195+
196+
static class Library {
197+
private List<Libro> libros;
198+
private List<Usuario> usuarios;
199+
200+
public Library() {
201+
this.libros = new ArrayList<>();
202+
this.usuarios = new ArrayList<>();
203+
}
204+
205+
public void registrarLibro(String titulo, String autor, int copiasDisponibles) {
206+
this.libros.add(new Libro(titulo, autor, copiasDisponibles));
207+
}
208+
209+
public void registrarUsuario(String nombre, int identificacion, String email) {
210+
this.usuarios.add(new Usuario(nombre, identificacion, email));
211+
}
212+
213+
public void prestarLibro(String titulo, int identificacion) {
214+
Libro libro = this.libros.stream().filter(l -> l.getTitulo().equals(titulo)).findFirst().orElse(null);
215+
Usuario usuario = this.usuarios.stream().filter(u -> u.getIdentificacion() == identificacion).findFirst().orElse(null);
216+
217+
if (libro != null && usuario != null && libro.getCopiasDisponibles() > 0) {
218+
libro.setCopiasDisponibles(libro.getCopiasDisponibles() - 1);
219+
System.out.println("Libro prestado a " + usuario.getNombre());
220+
} else System.out.println("No se pudo realizar el préstamo");
221+
}
222+
223+
public void devolverLibro(String titulo, int identificacion) {
224+
Libro libro = this.libros.stream().filter(l -> l.getTitulo().equals(titulo)).findFirst().orElse(null);
225+
Usuario usuario = this.usuarios.stream().filter(u -> u.getIdentificacion() == identificacion).findFirst().orElse(null);
226+
227+
if (libro != null && usuario != null) {
228+
libro.setCopiasDisponibles(libro.getCopiasDisponibles() + 1);
229+
System.out.println("Libro devuelto por " + usuario.getNombre());
230+
} else System.out.println("No se pudo realizar la devolución");
231+
}
232+
}
233+
234+
static class LibroRegistro {
235+
private List<Libro> libros;
236+
237+
public LibroRegistro() {
238+
this.libros = new ArrayList<>();
239+
}
240+
241+
public void registrarLibro(Libro libro) {
242+
this.libros.add(libro);
243+
}
244+
245+
public Libro buscarLibro(String titulo) {
246+
return this.libros.stream().filter(l -> l.getTitulo().equals(titulo)).findFirst().orElse(null);
247+
}
248+
}
249+
250+
static class UsuarioRegistro {
251+
private List<Usuario> usuarios;
252+
253+
public UsuarioRegistro() {
254+
this.usuarios = new ArrayList<>();
255+
}
256+
257+
public void registrarUsuario(Usuario u) {
258+
this.usuarios.add(u);
259+
}
260+
261+
public Usuario buscarUsuario(int identificacion) {
262+
return this.usuarios.stream().filter(u -> u.getIdentificacion() == identificacion).findFirst().orElse(null);
263+
}
264+
}
265+
266+
static class PrestamoProcesador {
267+
private LibroRegistro libroRegistro;
268+
private UsuarioRegistro usuarioRegistro;
269+
270+
public PrestamoProcesador(LibroRegistro libroRegistro, UsuarioRegistro usuarioRegistro) {
271+
this.libroRegistro = libroRegistro;
272+
this.usuarioRegistro = usuarioRegistro;
273+
}
274+
275+
public void prestarLibro(String titulo, int identificacion) {
276+
Libro libro = libroRegistro.buscarLibro(titulo);
277+
Usuario usuario = usuarioRegistro.buscarUsuario(identificacion);
278+
279+
if (libro != null && usuario != null && libro.getCopiasDisponibles() > 0) {
280+
libro.setCopiasDisponibles(libro.getCopiasDisponibles() - 1);
281+
System.out.println("Libro prestado a " + usuario.getNombre());
282+
} else {
283+
System.out.println("No se pudo realizar el préstamo");
284+
}
285+
}
286+
287+
public void devolverLibro(String titulo, int identificacion) {
288+
Libro libro = libroRegistro.buscarLibro(titulo);
289+
Usuario usuario = usuarioRegistro.buscarUsuario(identificacion);
290+
291+
if (libro != null && usuario != null) {
292+
libro.setCopiasDisponibles(libro.getCopiasDisponibles() + 1);
293+
System.out.println("Libro devuelto por " + usuario.getNombre());
294+
} else {
295+
System.out.println("No se pudo realizar la devolución");
296+
}
297+
}
298+
}
299+
300+
}

0 commit comments

Comments
 (0)