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", "manuel@example.com")
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 = "manuel@correo.es" )
131+ user2 = User (name = "Pedro" , id = 2 , email = "pedro@correo.es" )
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