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
+ #EJERCICIO
27
+
28
+ #Forma incorrecta
29
+
30
+ class User :
31
+
32
+ def __init__ (self , name , email ):
33
+ self .name = name
34
+ self .email = email
35
+
36
+ def save_to_database (self ):
37
+ pass
38
+
39
+ def send_email (self ):
40
+ pass
41
+
42
+ #Forma correcta
43
+
44
+ class User :
45
+
46
+ def __init__ (self , name , email ):
47
+ self .name = name
48
+ self .email = email
49
+
50
+ class UserService :
51
+
52
+ def save_to_database (self , user ):
53
+ pass
54
+
55
+ class EmailService :
56
+
57
+ def send_email (self , email , message ):
58
+ pass
59
+
60
+ #DIFICULTAD EXTRA
61
+
62
+ class Book :
63
+
64
+ def __init__ (self , title , author , copies ):
65
+ self .title = title
66
+ self .author = author
67
+ self .copies = copies
68
+
69
+ class User :
70
+
71
+ def __init__ (self , name , id , email ):
72
+ self .name = name
73
+ self .id = id
74
+ self .email = email
75
+
76
+ class Loan :
77
+
78
+ def __init__ (self ):
79
+ self .loans = []
80
+
81
+ def loan_book (self , user , book ):
82
+ if book .copies > 0 :
83
+ book .copies -= 1
84
+ self .loans .append ({"user_id" : user .id , "book_title" : book .title })
85
+ return True
86
+ return False
87
+
88
+ def return_book (self , user , book ):
89
+ for loan in self .loans :
90
+ if loan ["user_id" ] == user .id and loan ["book_title" ] == book .title :
91
+ self .loans .remove (loan )
92
+ book .copies += 1
93
+ return True
94
+ return False
95
+
96
+ class library :
97
+
98
+ def __init__ (self ):
99
+ self .books = []
100
+ self .users = []
101
+ self .loans = Loan ()
102
+
103
+ def new_book (self , book ):
104
+ self .books .append (book )
105
+
106
+ def new_user (self , user ):
107
+ self .users .append (user )
108
+
109
+ def loan_book (self , user_id , book_title ):
110
+ user = next ((u for u in self .users if u .id == user_id ), None )
111
+ book = next ((b for b in self .books if b .title == book_title ), None )
112
+ if user in book :
113
+ return self .loan_book (user , book )
114
+ return False
115
+
116
+
117
+ def return_book (self , user_id , book_title ):
118
+ user = next ((u for u in self .users if u .id == user_id ), None )
119
+ book = next ((b for b in self .books if b .title == book_title ), None )
120
+ if user and book :
121
+ return self .return_book (user , book )
122
+ return False
0 commit comments