1
resposta

ProcessadorDeInvestimentos nem compila mais

Queria criar uma resposta ao tópico: "Não entedi como ficaria o ProcessadorDeInvestimentos" https://cursos.alura.com.br/forum/topico-nao-entedi-como-ficaria-o-processadordeinvestimentos-57887

Mas o fórum acabou criando um tópico novo.

Com relação ao ProcessadorDeInvestimentos sugerido pela resposta do Rafael, depois da utilização da composição ao invés da herança.

O código nem compila. Uma vez que ContaDeEstudante deixou de ser uma ContaComum, pois a herança deixou de existir.

Essa é uma das desvantagens da Composição, agora não dá mais pra utilizar os objetos de maneira uniforme (não dá pra usar o polimorfismo).

Acho que o código ficaria assim:

public class ProcessadorDeInvestimentos {

    public static void main(String[] args) {

        //Batch pra render todas as contas comuns
        for (ContaComum conta : contasDoBanco()) {
            conta.rende();

            System.out.println("Novo Saldo:");
            System.out.println(conta.getSaldo());
        }

        //Render contas de estudantes
        contaDeEstudanteCom(200).rende(); //Não funciona, pois esse método foi retirado

    }

    private static List<ContaComum> contasDoBanco() {

        return Arrays.asList(umaContaCom(100), umaContaCom(150));
        //retirei contaDeEstudanteCom(200) da chamada acima
    }

    private static ContaDeEstudante contaDeEstudanteCom(double amount) { //mudei o tipo de retorno
        ContaDeEstudante c = new ContaDeEstudante();
        c.deposita(amount);
        return c;
    }

    private static ContaComum umaContaCom(double valor) {
        ContaComum c = new ContaComum();
        c.deposita(valor);
        return c;
    }
}
1 resposta

Oi Renan, e se você usar o conceito de interfaces do java e mantiver a composição? Acho que pode funcionar. Você ganha a composição e mantém o polimorfismo.