2.1. Single Responsibility Principle#
“… Tenías un trabajo” - Loki a Skurge en Thor: Ragnarok.
El Principio de Responsabilidad Única (Single Responsibility Principle - SRP) es uno de los cinco principios SOLID del diseño de software. Fue introducido por Robert C. Martin en su libro “Diseño Ágil: Principios, Patrones y Prácticas en C#”. El SRP establece que una clase debe tener una sola razón para cambiar, es decir, debe tener una sola responsabilidad.
2.1.1. Definición del SRP:#
Una clase debe tener solo una razón para cambiar, es decir, una sola responsabilidad. Esto significa que una clase debe estar diseñada para hacer una cosa y hacerla bien. Si una clase tiene más de una responsabilidad, debería dividirse en clases más pequeñas, cada una con una única responsabilidad. El objetivo del SRP es lograr la cohesión y reducir el acoplamiento en el diseño de software.
2.1.2. Ejemplo del SRP:#
Supongamos que tenemos una clase Employee
que representa a un empleado en una empresa. Esta clase puede tener múltiples responsabilidades, como almacenar los datos del empleado, calcular el salario, generar reportes, etc. Sin embargo, estas responsabilidades pueden dividirse en clases separadas siguiendo el SRP.
class Employee:
def __init__(self, name, id, salary):
self.name = name
self.id = id
self.salary = salary
def calculate_salary(self):
# Cálculo del salario
pass
def generate_report(self):
# Generación de reporte
pass
# Versión refactorizada siguiendo el SRP
class Employee:
def __init__(self, name, id, salary):
self.name = name
self.id = id
self.salary = salary
class SalaryCalculator:
@staticmethod
def calculate_salary(employee):
# Cálculo del salario
pass
class ReportGenerator:
@staticmethod
def generate_report(employee):
# Generación de reporte
pass
En este ejemplo, la clase Employee
inicialmente tiene dos responsabilidades: calcular el salario y generar reportes. Sin embargo, siguiendo el SRP, estas responsabilidades se han dividido en clases separadas: SalaryCalculator
y ReportGenerator
. Ahora, la clase Employee
tiene una única responsabilidad: almacenar los datos del empleado. Esto hace que el código sea más modular, mantenible y fácil de entender.