Saltar al contenido principal

Single Responsibility

El Principio de Responsabilidad 脷nica (SRP) es uno de los cinco principios SOLID de dise帽o orientado a objetos, introducido por Robert C. Martin. SRP defiende que una clase deber铆a tener solo una raz贸n para cambiar, lo que significa que deber铆a tener solo una responsabilidad o encapsular una 煤nica funcionalidad.

Principios clave del Principio de Responsabilidad 脷nica (SRP):

  1. Una Responsabilidad:

    • Una clase deber铆a encapsular una y solo una responsabilidad o funcionalidad.
    • Este principio tiene como objetivo promover un dise帽o claro y conciso donde cada clase tiene un prop贸sito enfocado.
  2. Raz贸n para Cambiar:

    • La "raz贸n para cambiar" se refiere a la motivaci贸n detr谩s de modificar una clase.
    • Si una clase tiene m煤ltiples responsabilidades y un aspecto del sistema cambia, puede requerir modificaciones en esa clase, afectando potencialmente otras responsabilidades no relacionadas.
  3. Mantenibilidad Mejorada:

    • Al adherirse a SRP, el c贸digo se vuelve m谩s mantenible ya que cada clase se enfoca en una tarea espec铆fica.
    • Los cambios relacionados con una funcionalidad particular est谩n aislados en la clase responsable de esa funcionalidad, reduciendo la probabilidad de efectos secundarios no deseados.
  4. Mejora de la Legibilidad y Comprensi贸n:

    • El c贸digo es m谩s f谩cil de leer y entender cuando cada clase tiene un prop贸sito claro y singular.
    • SRP anima a los desarrolladores a crear clases m谩s peque帽as y enfocadas, haciendo que la base de c贸digo sea m谩s comprensible.
  5. Dise帽o Flexible:

    • SRP facilita un dise帽o m谩s flexible y adaptable.
    • Cuando un sistema evoluciona o los requisitos cambian, las clases que siguen SRP son menos propensas a ser afectadas por modificaciones, ya que sus responsabilidades est谩n bien definidas y aisladas.

Ejemplo:

Considera una clase que gestiona tanto la entrada/salida de archivos como la autenticaci贸n de usuarios. Aplicando SRP, estas responsabilidades deber铆an separarse en clases distintas. Una clase podr铆a manejar las operaciones de archivo, y otra podr铆a ser responsable de la autenticaci贸n de usuarios. Esta separaci贸n se adhiere al principio, asegurando que los cambios en un aspecto del sistema no afecten al otro.

# Sin SRP
class FileManagerAndAuthenticator:
def read_file(self, filename):
# Implementaci贸n de lectura de archivo

def write_file(self, filename, content):
# Implementaci贸n de escritura de archivo

def authenticate_user(self, username, password):
# Implementaci贸n de autenticaci贸n de usuario

# Con SRP
class FileManager:
def read_file(self, filename):
# Implementaci贸n de lectura de archivo

def write_file(self, filename, content):
# Implementaci贸n de escritura de archivo

class Authenticator:
def authenticate_user(self, username, password):
# Implementaci贸n de autenticaci贸n de usuario

Al adherirse a SRP, las responsabilidades de la gesti贸n de archivos y la autenticaci贸n de usuarios est谩n claramente separadas, lo que conduce a un dise帽o m谩s mantenible y modular.