Skip to content

Commit 6e09741

Browse files
authored
Merge pull request mouredev#4560 from bytecodesky/main
#26 - Python
2 parents b7a0a60 + 76a7bc0 commit 6e09741

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
'''
2+
/*
3+
* EJERCICIO:
4+
* Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility
5+
* Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento
6+
* de forma correcta e incorrecta.
7+
*
8+
* DIFICULTAD EXTRA (opcional):
9+
* Desarrolla un sistema de gestión para una biblioteca. El sistema necesita
10+
* manejar diferentes aspectos como el registro de libros, la gestión de usuarios
11+
* y el procesamiento de préstamos de libros.
12+
* Requisitos:
13+
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
14+
* información básica como título, autor y número de copias disponibles.
15+
* 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con
16+
* información básica como nombre, número de identificación y correo electrónico.
17+
* 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios
18+
* tomar prestados y devolver libros.
19+
* Instrucciones:
20+
* 1. Diseña una clase que no cumple el SRP: Crea una clase Library que maneje
21+
* los tres aspectos mencionados anteriormente (registro de libros, registro de
22+
* usuarios y procesamiento de préstamos).
23+
* 2. Refactoriza el código: Separa las responsabilidades en diferentes clases
24+
* siguiendo el Principio de Responsabilidad Única.
25+
*/
26+
'''
27+
28+
#El principio de SRP consiste en que una clase debe tener una única responsabilidad, es decir, una clase debe tener una única razón para cambiar. Si una clase tiene más de una responsabilidad, entonces la clase debe ser dividida en clases más pequeñas, cada una con una única responsabilidad.
29+
30+
#Ejemplo incorrecto
31+
class Rectangulo:
32+
def __init__(self, ancho, alto):
33+
self.ancho = ancho
34+
self.alto = alto
35+
36+
def calcular_area(self):
37+
return self.ancho * self.alto
38+
39+
def dibujar(self):
40+
for i in range(self.alto):
41+
print('*' * self.ancho)
42+
#Es incorrecto porque la clase Rectangulo tiene dos responsabilidades: calcular el área y dibujar el rectángulo, por lo que no cumple con el principio SRP.
43+
44+
#Ejemplo correcto
45+
46+
class Rectangulo:
47+
def __init__(self, ancho, alto):
48+
self.ancho = ancho
49+
self.alto = alto
50+
51+
def calcular_area(self):
52+
return self.ancho * self.alto
53+
54+
class DibujarRectangulo:
55+
def __init__(self, rectangulo):
56+
self.rectangulo = rectangulo
57+
58+
def dibujar(self):
59+
for i in range(self.rectangulo.alto):
60+
print('*' * self.rectangulo.ancho)
61+
62+
#En este ejemplo, la clase Rectangulo tiene la responsabilidad de calcular el área, mientras que la clase DibujarRectangulo tiene la responsabilidad de dibujar el rectángulo. Cada clase tiene una única responsabilidad, por lo que cumple con el principio SRP.
63+
64+
#Ejemplo de sistema de gestión de biblioteca incorrecto
65+
66+
class Library:
67+
def __init__(self):
68+
self.libros = []
69+
self.usuarios = []
70+
self.prestamos = []
71+
72+
def agregar_libro(self, libro):
73+
self.libros.append(libro)
74+
75+
def agregar_usuario(self, usuario):
76+
self.usuarios.append(usuario)
77+
78+
def prestar_libro(self, libro, usuario, fecha_prestamo, fecha_devolucion):
79+
prestamo = (libro, usuario, fecha_prestamo, fecha_devolucion)
80+
self.prestamos.append(prestamo)
81+
82+
def devolver_libro(self, prestamo):
83+
self.prestamos.remove(prestamo)
84+
85+
#Es incorrecto porque la clase Library tiene tres responsabilidades: registrar libros, registrar usuarios y procesar préstamos de libros, por lo que no cumple con el principio SRP.
86+
87+
#Ejemplo de sistema de gestión de biblioteca corecto
88+
89+
class Library:
90+
def __init__(self, titulo, autor, copias_disponibles):
91+
self.titulo = titulo
92+
self.autor = autor
93+
self.copias_disponibles = copias_disponibles
94+
95+
class Usuario:
96+
def __init__(self, nombre, identificacion, correo):
97+
self.nombre = nombre
98+
self.identificacion = identificacion
99+
self.correo = correo
100+
101+
class Prestamo:
102+
def __init__(self, libro, usuario, fecha_prestamo, fecha_devolucion):
103+
self.libro = libro
104+
self.usuario = usuario
105+
self.fecha_prestamo = fecha_prestamo
106+
self.fecha_devolucion = fecha_devolucion
107+
108+
class RegistroLibros:
109+
def __init__(self):
110+
self.libros = []
111+
112+
def agregar_libro(self, libro):
113+
self.libros.append(libro)
114+
115+
class RegistroUsuarios:
116+
def __init__(self):
117+
self.usuarios = []
118+
119+
def agregar_usuario(self, usuario):
120+
self.usuarios.append(usuario)
121+
122+
class ProcesarPrestamos:
123+
def __init__(self):
124+
self.prestamos = []
125+
126+
def prestar_libro(self, libro, usuario, fecha_prestamo, fecha_devolucion):
127+
prestamo = Prestamo(libro, usuario, fecha_prestamo, fecha_devolucion)
128+
self.prestamos.append(prestamo)
129+
130+
def devolver_libro(self, prestamo):
131+
self.prestamos.remove(prestamo)
132+
133+
#En este ejemplo, se han creado diferentes clases para manejar las responsabilidades de registrar libros, registrar usuarios y procesar préstamos de libros. Cada clase tiene una única responsabilidad, por lo que cumple con el principio SRP.

0 commit comments

Comments
 (0)