Skip to content

Latest commit

 

History

History
154 lines (110 loc) · 4.05 KB

srp.md

File metadata and controls

154 lines (110 loc) · 4.05 KB
description
Single Responsibility Principle ​

SRP

Princípio da Responsabilidade Única ​

Uma classe deve ter um, e somente um, motivo para mudar. ​ Deve ter apenas um objetivo, ou seja, ela deve possuir apenas uma função ou funções similares. Esse princípio não se aplica apenas a classes, mas também a métodos e funções. ​

Exemplo Show

Em um show, as responsabilidades são compartilhadas com um objetivo, nesse caso, produzir música de qualidade. ​ O princípio da responsabilidade única é justamente esse, fazer com que uma única classe execute funções que tem haver com aquela classe.

Exemplos de código
  • Exemplo de boa prática:
// Classe para representar um usuário
public class Usuario {
    private String nome;
    private String email;
    private String senha;

    public Usuario(String nome, String email, String senha) {
        this.nome = nome;
        this.email = email;
        this.senha = senha;
    }

    public String getNome() {
        return nome;
    }

    public String getEmail() {
        return email;
    }

    public String getSenha() {
        return senha;
    }
}

// Classe para mostrar detalhes do usuário
public class UsuarioDetalhes {
    public void mostrarDetalhes(Usuario usuario) {
        System.out.println("Nome: " + usuario.getNome());
        System.out.println("Email: " + usuario.getEmail());
    }
}

// Classe para validar o usuário
public class UsuarioValidador {
    public boolean validarUsuario(Usuario usuario) {
        // Lógica de validação, por exemplo, verificar se o email é válido
        return usuario.getEmail().contains("@");
    }
}

public class Main {
    public static void main(String[] args) {
        // Cria um novo usuário
        Usuario novoUsuario = new Usuario("Alice", "[email protected]", "senha123");

        // Exibe os detalhes do usuário usando UsuarioDetalhes
        UsuarioDetalhes usuarioDetalhes = new UsuarioDetalhes();
        usuarioDetalhes.mostrarDetalhes(novoUsuario);

        // Valida o usuário usando UsuarioValidador
        UsuarioValidador usuarioValidador = new UsuarioValidador();
        boolean valido = usuarioValidador.validarUsuario(novoUsuario);

        if (valido) {
            System.out.println("Usuário válido.");
        } else {
            System.out.println("Usuário inválido.");
        }
    }
}
  • Cada classe tem uma única responsabilidade claramente definida.

  • Exemplo de má prática:

public class Usuario {
    private String nome;
    private String email;
    private String senha;

    public Usuario(String nome, String email, String senha) {
        this.nome = nome;
        this.email = email;
        this.senha = senha;
    }

    public String getNome() {
        return nome;
    }

    public String getEmail() {
        return email;
    }

    public String getSenha() {
        return senha;
    }

    public void mostrarDetalhes() {
        System.out.println("Nome: " + nome);
        System.out.println("Email: " + email);
    }

    public boolean validarUsuario() {
        // Lógica de validação, por exemplo, verificar se o email é válido
        return email.contains("@");
    }

    public static void main(String[] args) {
        // Cria um novo usuário
        Usuario novoUsuario = new Usuario("Alice", "[email protected]", "senha123");

        // Exibe os detalhes do usuário
        novoUsuario.mostrarDetalhes();

        // Valida o usuário
        boolean valido = novoUsuario.validarUsuario();

        if (valido) {
            System.out.println("Usuário válido.");
        } else {
            System.out.println("Usuário inválido.");
        }
    }
}
  • A classe Usuario tem mais de uma responsabilidade, caso ocorra um problema com algum método, pode dificultar na manutenção e funcionalidade do código, além de que segundo o SRP, uma classe deve ter apenas uma única razão para mudar.