Skip to main content

Object Calisthenics

  • Object Calisthenics

"Object Calisthenics" é um conjunto de boas práticas de programação orientada a objetos, criado por Jeff Bay. A ideia principal é melhorar a qualidade do código — especialmente sua manutenibilidade, leitura e testabilidade — através de restrições deliberadas no modo como o código é escrito.

O termo "calisthenics" (calistenia) vem da ideia de exercícios repetitivos para ganhar força e disciplina, e o mesmo se aplica ao código: você segue essas regras para treinar sua mente a escrever código limpo.

As 9 regras do Object Calisthenics

  1. Um nível de indentação por método

    • Evita estruturas de controle aninhadas. Use early return, por exemplo.
  2. Não use a palavra-chave else

    • Estimula código mais direto e claro. Use retornos antecipados ao invés de else.
  3. Envie apenas um objeto por vez para um método

    • Promove baixo acoplamento e alta coesão.
  4. Primeiras classes, tipos primitivos por último

    • Evite usar tipos primitivos diretamente. Crie classes de valor para representar conceitos (ex: Money em vez de usar double).
  5. Coleções primeiro, sem coleções nuas

    • Nunca passe ou retorne listas/arrays diretamente. Encapsule-as em objetos.
  6. Evite getters, setters e propriedades

    • Força o uso de encapsulamento real. Em vez de expor dados, dê comportamentos ao objeto.
  7. Use pequenos objetos e pequenos métodos

    • Métodos curtos são mais fáceis de entender, testar e manter.
  8. Não use mais de duas variáveis de instância por classe

    • Isso força a separação de responsabilidades e maior coesão.
  9. Sem métodos com mais de 5 linhas

    • Obriga a quebrar lógica em partes pequenas e reutilizáveis.

Exemplo prático (bem simples):

Antes (violando várias regras):

public double calculateTotal(Order order) {
double total = 0;
for (Item item : order.getItems()) {
if (item.isInStock()) {
total += item.getPrice();
} else {
total += item.getPrice() * 0.9; // desconto
}
}
return total;
}

Depois (com Object Calisthenics aplicado):

public class Order {
private Items items;

public Money totalPrice() {
return items.totalPrice();
}
}

Por que usar Object Calisthenics?

  • Treina seu "músculo" de design OO
  • Leva a um código mais limpo e legível
  • Te ajuda a encontrar melhores modelagens de domínio