Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Interface ou classe abstrata?

Quando cheguei nessa parte do curso, fiquei em dúvida se podia criar uma interface ao invés de uma classe abstrata, pois, pela lógica que aprendi, a interface serve como um contrato, ou seja, a classe que implementará ela deve cumprir todos os requisitos exigidos pela interface. E como só criamos métodos, pensei que poderíamos usar a interface ao invés da classe abstrata.

Visando boas práticas no código, qual seria o mais adequado para essa situação? Uma classe abstrata ou uma interface?

Desde já, agradeço pela reposta

2 respostas
solução!

Hiago, bom dia.

Sobre a escolha entre uma interface e uma classe abstrata. Ambas têm seus usos específicos, e a escolha depende do que você precisa alcançar no seu projeto.

  1. Interface: Como você mencionou, uma interface é como um contrato. Ela define métodos que uma classe deve implementar, mas não fornece nenhuma implementação. Isso é útil quando você quer garantir que diferentes classes implementem os mesmos métodos, mas cada uma com sua própria lógica. No seu caso, se você só precisa garantir que certas operações (como Listar, Adicionar, etc.) existam, uma interface poderia ser suficiente.

  2. Classe Abstrata: Por outro lado, uma classe abstrata pode conter tanto métodos abstratos (sem implementação) quanto métodos concretos (com implementação). Isso é útil quando você quer fornecer uma implementação padrão que pode ser compartilhada entre várias classes, mas ainda permitir que as classes derivadas sobrescrevam esses métodos se necessário.

No contexto do seu curso, onde você está criando um DAL genérico, a escolha por uma classe abstrata faz sentido. Isso porque você pode ter métodos que compartilham uma implementação padrão, mas que ainda precisam ser personalizados para diferentes tipos, como Artista e Música. A classe abstrata permite que você defina essa lógica compartilhada e ainda exija que as subclasses implementem métodos específicos, como Listar, Adicionar, etc.

Por exemplo, no seu DAL, você pode ter um método abstrato Listar() que precisa ser implementado por cada classe derivada, mas também pode ter um método concreto que lida com a conexão ao banco de dados, que é compartilhado entre todas as classes.

Espero ter ajudado e bons estudos!

Muito obrigado André, você é um ótimo professor com um ótima didática. Me ajudou sim, mais uma vez, muito obrigado.