Recursos-LCC

Um arquivo de todo material que consegui reunir, pertinente ao curso de LCC da UM.

View on GitHub

The stuff nestor doesn’t tell you

Neste “resumo” vou esclarecer umas coisas importantes sobre Programação Orientada a Objectos.



Getters and Setters

O lixo dos getters/setters devem ser evitados ao máximo.
Alias se a tua classe for:

class Foo {
    private String bar;
    String getBar() { return bar; }
    void setBar(String bar) { this.bar = bar; }
}

O quão menos encapsulado ficava se bar fosse simplesmente public? É a mesma coisa!
Ha duas principais razões para encapsulamento:

Efectivamente este código é equivalente a public String bar. Mas deu mais trabalho e não se conseguiu nada.

Mas as solução e fazer tudo public? Não, é fazer coisas que fazem sentido e mais nada.

Por exemplo, pegando no clássico Ponto.

class Ponto {
    private int x;
    private int y;
    public Ponto(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

Qual parece ser o mais intuitivo de usar?

public move(int x, int y) {
    this.x += x;
    this.y += y;
}

Ou

public setX(int x) {
    this.x = x;
}
public setY(int y) {
    this.y = y;
}

?

Agora podias dizer qualquer coisa como: “Mas e se eu quiser que o ponto passe a ter (x,y) coordenadas e não quero fazer as contas para o mover ate ao sitio”.
E para isso relembro te que tens um construtor: ponto = new Ponto(x, y);.
Setters não servem para nada em 99% dos casos.

Claro que há situações em que um setter faz sentido mas são muito raras e normalmente dá para fazer uma API melhor.
Olhem para os métodos do ArrayList por exemplo? Quantos setters é que aquilo tem?

Artigo


Herança

“Prefer composition over inheritance whenever possible” – Some smart person probably.

Herança é considerado um dos maiores erros de programação orientada a objectos.
Eu podia falar aqui de todas as maneiras em que herança é má ideia, mas há gente mais inteligente que eu que já falou sobre isso.

Artigos



Clones

boy oh boy



retroceder