Sobes.tech
Junior — Middle

Pode dar um exemplo de uma situação em que o sistema dependa da abstração e não de implementações específicas de objetos?

sobes.tech IA

Resposta da IA

Em Java, costuma-se usar o princípio de depender de abstrações, e não de implementações concretas, para aumentar a flexibilidade e extensibilidade do código. Por exemplo, se você tem uma interface PaymentProcessor com o método processPayment(), o sistema pode trabalhar com qualquer implementação dessa interface — CreditCardProcessor, PayPalProcessor, etc. O código que usa PaymentProcessor não depende de uma classe concreta, mas apenas da abstração:

public interface PaymentProcessor {
    void processPayment(double amount);
}

public class CreditCardProcessor implements PaymentProcessor {
    public void processPayment(double amount) {
        // implementação do pagamento com cartão de crédito
    }
}

public class OrderService {
    private PaymentProcessor paymentProcessor;

    public OrderService(PaymentProcessor paymentProcessor) {
        this.paymentProcessor = paymentProcessor;
    }

    public void checkout(double amount) {
        paymentProcessor.processPayment(amount);
    }
}

Dessa forma, OrderService depende da abstração PaymentProcessor, e não de uma implementação concreta, permitindo trocar facilmente o método de pagamento sem alterar o código do serviço.