Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Alterar atributos protected, estaria ferindo "Tell don't ask" ?

Esta sentença, de permitir alterar os atributos de classes no mesmo pacote, definindo o modificador como protected ainda parece estranho - mesmo estando tratando de State Pattern.

Está ferindo o princípio "tell don't ask" ?

No código abaixo, copiado do exemplo dado no exercício, a quebra deste princípio parece notória, quando se está verificando um atributo da classe para alterar outro:

    class Positivo implements EstadoDaConta {
      public void saca(Conta conta, double valor) {
        conta.saldo -= valor;

        // -> Na linha abaixo, está ferindo o "Tell don't ask" !?
        if(conta.saldo < 0) conta.estado = new Negativo();
      }
}

Acessei o fórum do exercício anterior a este tópico, onde vi uma dúvida bem semelhante e com uma proposta de solução para manter os métodos originais de "Conta.depositar()" e "Conta.sacar()", utilizando o estado para calcular o valor de cada operação.

Estou ciente de que irei encontrar este tipo de programação nos fontes de projetos de empresas, no entanto, gostaria de saber se a afirmação deste tópico ainda é recomendável ou está desatualizada ?

Obrigado

1 resposta
solução!

Fala Marcos, tudo bem?

Seguindo o princípio Tell-Don't-Ask, em vez de solicitar dados a um objeto e agir com base nesses dados, devemos dizer ao objeto o que fazer. Ou seja, a lógica da linha que você mencionou deveria estar dentro da própria Conta.