SOLID é um conjunto de 5 princípios de programação criados por Robert C. Martin para garantir a qualidade de projetos Orientados a Objetos. Eu apresento neste Talk o conceito, explicação e a prática dos cincos princípios com exemplos em código.
private long preco; // ... getters/setters } public class Pedido { private int numeroDoPedido; private List<Produto> produtos = new ArrayList<>(); // ... getters/setters }
OrderRecyclerAdapter(List<Pedido> pedidos) { this.pedidos = pedidos; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.item_pedidos, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, int position) { // TODO: Faz o vínculo entre o modelo e a view } @Override public int getItemCount() { return pedidos.size(); } // ... ViewHolder e métodos }
= new ArrayList<>(); // ... getters/setters public long getValorTotalDoPedido() { long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } return total; } public String getValorTotalDoPedidoFormatado() { long total = getValorTotalDoPedido(); NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US); String valorTotal = formatter.format(total); return valorTotal; } }
= new ArrayList<>(); // ... getters/setters public long getValorTotalDoPedido() { long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } return total; } public String getValorTotalDoPedidoFormatado() { long total = getValorTotalDoPedido(); NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US); String valorTotal = formatter.format(total); return valorTotal; } }
int DESCONTO_10_POR_CENTO = 1; private static final int DESCONTO_15_POR_CENTO = 2; private int tipoDeDesconto; public long getValorTotalDoPedido() { long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } if (tipoDeDesconto == DESCONTO_10_POR_CENTO) { long descontoDe10PorCento = total * 0.1; total += descontoDe10PorCento; } else if (tipoDeDesconto == DESCONTO_15_POR_CENTO ) { long descontoDe15PorCento = total * 0.15; total += descontoDe15PorCento; } return total; }
0; private static final int DESCONTO_10_POR_CENTO = 1; private static final int DESCONTO_15_POR_CENTO = 2; private int numeroDoPedido; private List<Produto> produtos = new ArrayList<>(); private int tipoDeDesconto; // ... getters/setters public long getValorTotalDoPedido() { long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } if (tipoDeDesconto == DESCONTO_10_POR_CENTO) { long descontoDe10PorCento = total * 0.1; total += descontoDe10PorCento; } else if (tipoDeDesconto == DESCONTO_15_POR_CENTO ) { long descontoDe15PorCento = total * 0.15; total += descontoDe15PorCento; } return total; } public String getValorTotalDoPedidoFormatado() { long total = getValorTotalDoPedido(); NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US); String valorTotal = formatter.format(total); return valorTotal; } }
int DESCONTO_10_POR_CENTO = 1; private static final int DESCONTO_15_POR_CENTO = 2; private static final int DESCONTO_20_POR_CENTO = 3; private static final int DESCONTO_25_POR_CENTO = 4; private int tipoDeDesconto; public long getValorTotalDoPedido() { long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } if (tipoDeDesconto == DESCONTO_10_POR_CENTO) { long descontoDe10PorCento = total * 0.1; total += descontoDe10PorCento; } else if (tipoDeDesconto == DESCONTO_15_POR_CENTO) { long descontoDe15PorCento = total * 0.15; total += descontoDe15PorCento; } else if (tipoDeDesconto == DESCONTO_20_POR_CENTO) { long descontoDe20PorCento = total * 0.20; total += descontoDe20PorCento; } else if (tipoDeDesconto == DESCONTO_25_POR_CENTO) { long descontoDe25PorCento = total * 0.25; total += descontoDe25PorCento; } return total; }
de Projeto: Objeto Nulo. public class SemDesconto implements Desconto { public long calculaDesconto(long valor) { return 0; } } public class DescontoDe10PorCento implements Desconto { public long calculaDesconto(long valor) { return valor * 0.1; } } public class DescontoDe15PorCento implements Desconto { public long calculaDesconto(long valor) { return valor * 0.15; } } // Outros descontos.
long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } // Não é necessário verificar se o desconto é null, pois // sempre existirá um desconto vazio: SemDesconto. desconto = desconto.calculaDesconto(total); return total + desconto; }
= new ArrayList<>(); private Desconto desconto = new SemDesconto(); // ... getters/setters public long getValorTotalDoPedido() { long total = 0; for (Produto produto : pedido.getProdutos()) { total += produto.getPreco(); } desconto = desconto.calculaDesconto(total); return total + desconto; } public String getValorTotalDoPedidoFormatado() { long total = getValorTotalDoPedido(); NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US); String valorTotal = formatter.format(total); return valorTotal; } }
public void partidaNoMotor(); } public class Ferrari implements Carro { @Override public double partidaNoMotor() { // TODO: Lógica. } } public class Tesla implements Carro { @Override public void ligaCarro() { // TODO: Lógica. } @Override public double partidaNoMotor() { // TODO: Lógica. } } // Iniciar Carro. public void iniciarPartidaDeCarro(Carro carro) { carro.partidaNoMotor(); }
public void partidaNoMotor(); } public class Ferrari implements Carro { @Override public double partidaNoMotor() { // TODO: Implementação. } } public class Tesla implements Carro { // Implementação do ligaCarro(); @Override public double partidaNoMotor() { if (!estaDescarregado) { ligaCarro(); } // TODO: Implementação. } } // Iniciar Carro. public void iniciarPartidaDeCarro(Carro carro) { carro.partidaNoMotor(); }