1
+ ### SOLID PRINCPIO DE RESPONSABILIDAD ÚNICA (SRP)
2
+
3
+ '''
4
+ El Principio de Responsabilidad Única (SRP) es uno de los cinco principios SOLID en la programación orientada a objetos.
5
+ Este principio establece que una clase debe tener una única razón para cambiar, es decir, una sola responsabilidad o
6
+ propósito.
7
+ En términos simples, cada clase debe encargarse de una sola tarea y hacerlo bien.
8
+ '''
9
+
10
+ '''
11
+ VENTAJAS:
12
+ - Facilita la comprensión y el mantenimiento del código.
13
+ - Reduce la complejidad del código.
14
+ - Mejora la reutilización del código.
15
+ '''
16
+
17
+ # Ejemplo que viola este principio
18
+ #class User():
19
+ #
20
+ # def __init__(self, name, email):
21
+ # self.name = name
22
+ # self.email = email
23
+ #
24
+ # def save_to_file(self):
25
+ # with open('users.txt', 'w') as file:
26
+ # file.write(f"Name: {self.name}, Email: {self.email}")
27
+
28
+ # El ejemplo anterior viola el SRP, ya que gestiona tanto los datos del usuario como su almacenamiento en un registro.
29
+
30
+ # Vamos a reestructuar el diseño para cumplir con SRP con dos clases separadas
31
+ #class User():
32
+ #
33
+ # def __init__(self, name, email):
34
+ # self.name = name
35
+ # self.email = email
36
+ #
37
+ #class UserFileHandler():
38
+ # @staticmethod
39
+ # def save_to_file(user, filename):
40
+ # with open(filename, 'w') as file:
41
+ # file.write(f"Name: {user.name}, Email: {user.email}")
42
+
43
+
44
+ # Prueba de funcionamiento
45
+ #user = User("Manuel", "[email protected] ")
46
+ #UserFileHandler.save_to_file(user, "user_data.txt")
47
+
48
+
49
+ ## EJERCICIO EXTRA
50
+
51
+ # Clase que incumple el principio SRP
52
+ #class Library():
53
+ #
54
+ # users = []
55
+ # loans = []
56
+ #
57
+ # def __init__(self, title, author, copies):
58
+ #
59
+ # self.books.append({'title': title, 'author':author, 'copies': copies})
60
+ #
61
+ # def register_book(self, title, author, copies):
62
+ # self.books.append({'title': title, 'author': author, 'copies': copies})
63
+ # print(f"Registro de libro realizado con éxito")
64
+ #
65
+ # def register_user(self, name, id, email):
66
+ # self.users.append({'name': name, 'id': id, 'email': email})
67
+ # print(f"Registro de usuario realizado con éxito")
68
+ #
69
+ # def loan_book(self, user, book):
70
+ # if book['copies'] > 0:
71
+ # self.loans.append({'user': user, 'book': book})
72
+ # book['copies'] -= 1
73
+ # print(f"Préstamo de libro realizado con éxito")
74
+ # else:
75
+ # print(f"No hay copias disponibles del libro {book['title']}")
76
+ #
77
+ # def return_book(self, user, book):
78
+ # if user in [loan['user'] for loan in self.loans] and book in [book['name'] for book in self.books]:
79
+ # self.loans.remove({'user': user, 'book': book})
80
+ # book['copies'] += 1
81
+ # print(f"Devolución de libro realizada con éxito")
82
+ # else:
83
+ # print(f"No hay préstamos activos del libro {book['title']}")
84
+
85
+ # Aplicando SRP
86
+ class User ():
87
+
88
+ def __init__ (self , name , id , email ):
89
+ self .name = name
90
+ self .id = id
91
+ self .email = email
92
+
93
+ class Book ():
94
+
95
+ def __init__ (self , name , author , copies ):
96
+ self .name = name
97
+ self .author = author
98
+ self .copies = copies
99
+
100
+ class Library ():
101
+
102
+ def __init__ (self , users = [], books = [], loans = []):
103
+ self .users = users
104
+ self .books = books
105
+ self .loans = loans
106
+
107
+ def register_user (self , user : User ):
108
+ self .users .append (user )
109
+ print (f"Registro de usuario realizado con éxito" )
110
+
111
+ def register_book (self , book : Book ):
112
+ self .books .append (book )
113
+ print (f"Registro de libro realizado con éxito" )
114
+
115
+ def register_loan (self , user : User , book : Book ):
116
+ if book .copies > 0 :
117
+ self .loans .append ({"user" : user , "book" : book })
118
+ book .copies -= 1
119
+ print (f"Préstamo de libro realizado con éxito" )
120
+ else :
121
+ print (f"No hay copias disponibles del libro { book .name } " )
122
+
123
+ def return_loan (self , user : User , book : Book ):
124
+ if user in [loan ['user' ] for loan in self .loans ] and book in [loan ['book' ] for loan in self .loans ]:
125
+ self .loans .remove ({'user' : user , 'book' : book })
126
+ book .copies += 1
127
+ print (f"Devolución de libro realizada con éxito" )
128
+
129
+ # Pruebas del programa
130
+ user1 = User (
name = "Manuel" ,
id = 1 ,
email = "[email protected] " )
131
+ user2 = User (
name = "Pedro" ,
id = 2 ,
email = "[email protected] " )
132
+ book1 = Book (name = "Libro 1" , author = "Autor 1" , copies = 2 )
133
+ book2 = Book (name = "Libro 2" , author = "Autor 2" , copies = 1 )
134
+ library = Library ()
135
+ library .register_user (user1 )
136
+ library .register_user (user2 )
137
+ library .register_book (book1 )
138
+ library .register_book (book2 )
139
+ library .register_loan (user1 , book1 )
140
+ library .register_loan (user2 , book2 )
141
+ library .register_loan (user1 , book2 )
142
+ library .return_loan (user2 , book2 )
143
+ library .register_loan (user1 , book2 )
144
+
145
+ # Fin Aplicando SRP
146
+
147
+ ## FIN EJERCICIO EXTRA
148
+
149
+ ### FIN SOLID PRINCPIO DE RESPONSABILIDAD ÚNICA (SRP)
0 commit comments