Skip to content

Commit e102c8f

Browse files
authored
Merge pull request mouredev#5899 from Javierfiestasbotella/main
#26 python
2 parents 72cb9a8 + f689661 commit e102c8f

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
'''/*
2+
* EJERCICIO:
3+
* Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility
4+
* Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento
5+
* de forma correcta e incorrecta.
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* Desarrolla un sistema de gestión para una biblioteca. El sistema necesita
9+
* manejar diferentes aspectos como el registro de libros, la gestión de usuarios
10+
* y el procesamiento de préstamos de libros.
11+
* Requisitos:
12+
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
13+
* información básica como título, autor y número de copias disponibles.
14+
* 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con
15+
* información básica como nombre, número de identificación y correo electrónico.
16+
* 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios
17+
* tomar prestados y devolver libros.
18+
* Instrucciones:
19+
* 1. Diseña una clase que no cumple el SRP: Crea una clase Library que maneje
20+
* los tres aspectos mencionados anteriormente (registro de libros, registro de
21+
* usuarios y procesamiento de préstamos).
22+
* 2. Refactoriza el código: Separa las responsabilidades en diferentes clases
23+
* siguiendo el Principio de Responsabilidad Única.
24+
*/'''
25+
26+
#Ejemplo de SOLID Creamos 3 clases cada una con una funcion
27+
class Factura:
28+
def __init__(self, items):
29+
self.items = items
30+
def calcular_total(self):
31+
return sum(item['precio'] for item in self.items)
32+
33+
class ImpresoraDeFacturas:
34+
def imprimir_factura(self, factura):
35+
print("Factura:")
36+
for item in factura.items:
37+
print(f"{item['nombre']}: {item['precio']}")
38+
print(f"Total: {factura.calcular_total()}")
39+
40+
class GuardarFactura:
41+
def guardar_en_bd(self, factura):
42+
print("Guardando la factura en la base de datos...")
43+
44+
#Ahora creamos lo que no se debería hacer una sola clase con las trés funciones
45+
class Factura:
46+
def __init__(self, items):
47+
self.items = items
48+
49+
def calcular_total(self):
50+
return sum(item['precio'] for item in self.items)
51+
52+
def imprimir_factura(self):
53+
print("Factura:")
54+
for item in self.items:
55+
print(f"{item['nombre']}: {item['precio']}")
56+
print(f"Total: {self.calcular_total()}")
57+
58+
def guardar_en_bd(self):
59+
print("Guardando la factura en la base de datos...")
60+
61+
62+
#EJEMPLO DE LA BIBLIOTECA
63+
64+
'''* 1. Diseña una clase que no cumple el SRP: Crea una clase Library que maneje
65+
* los tres aspectos mencionados anteriormente (registro de libros, registro de
66+
* usuarios y procesamiento de préstamos).'''
67+
68+
class Biblioteca:
69+
def __init__(self, items):
70+
self.items = items
71+
72+
def registrar_libro(self):
73+
registro=[]
74+
for item in self.items:
75+
registro.append(item['numero_libro']+item['titulo_libro']+item['autor_libro'])
76+
def registrar_usuario(self):
77+
bbdd=[]
78+
for item in self.items:
79+
bbdd.append(item['dni']+item['nombre'])
80+
def prestamos(self):
81+
prestamos_note=[]
82+
for item in self.items:
83+
prestamos_note.append(item['dni']+item['titulo_libro'])
84+
85+
'''* 2. Refactoriza el código: Separa las responsabilidades en diferentes clases
86+
* siguiendo el Principio de Responsabilidad Única.'''
87+
88+
class RegistroLibros:
89+
def __init__(self):
90+
self.libros = []
91+
92+
def registrar_libro(self, numero_libro, titulo_libro, autor_libro):
93+
libro = {
94+
'numero_libro': numero_libro,
95+
'titulo_libro': titulo_libro,
96+
'autor_libro': autor_libro,
97+
'copias_disponibles': 1
98+
}
99+
self.libros.append(libro)
100+
101+
def listar_libros(self):
102+
return self.libros
103+
104+
class RegistroUsuarios:
105+
def __init__(self):
106+
self.usuarios = []
107+
108+
def registrar_usuario(self, dni, nombre, correo):
109+
usuario = {
110+
'dni': dni,
111+
'nombre': nombre,
112+
'correo': correo
113+
}
114+
self.usuarios.append(usuario)
115+
116+
def listar_usuarios(self):
117+
return self.usuarios
118+
119+
120+
class GestionPrestamos:
121+
def __init__(self, registro_libros, registro_usuarios):
122+
self.prestamos = []
123+
self.registro_libros = registro_libros
124+
self.registro_usuarios = registro_usuarios
125+
126+
def prestar_libro(self, dni, numero_libro):
127+
usuario = next((u for u in self.registro_usuarios.listar_usuarios() if u['dni'] == dni), None)
128+
libro = next((l for l in self.registro_libros.listar_libros() if l['numero_libro'] == numero_libro), None)
129+
130+
if usuario and libro and libro['copias_disponibles'] > 0:
131+
self.prestamos.append({'dni': dni, 'numero_libro': numero_libro})
132+
libro['copias_disponibles'] -= 1
133+
print(f"Libro {numero_libro} prestado a {usuario['nombre']}")
134+
else:
135+
print("Préstamo no disponible")
136+
137+
def devolver_libro(self, dni, numero_libro):
138+
prestamo = next((p for p in self.prestamos if p['dni'] == dni and p['numero_libro'] == numero_libro), None)
139+
if prestamo:
140+
self.prestamos.remove(prestamo)
141+
libro = next((l for l in self.registro_libros.listar_libros() if l['numero_libro'] == numero_libro), None)
142+
libro['copias_disponibles'] += 1
143+
print(f"Libro {numero_libro} devuelto por {dni}")
144+
else:
145+
print("No se encontró el préstamo")

0 commit comments

Comments
 (0)