5
respostas

Necessidade da interface

Qual é de fato a necessidade da interface? Pela explicação, ficou mais parecendo que ela é algo meio que perigoso de se ter no projeto, pois qualquer alteração implicaria em todas as classes que a implementam. Como realmente funciona e para que serve afinal?

5 respostas

Oi Matheus, tudo bom?

Sem a interface AcaoAposGerarNota, no exemplo do video, seria impossivel receber esse tipo no método addAcao:

public function addAcao(AcaoAposGerarNota $acao) {
    $this->acoes[] = $acao;
}

Sem isso, seria necessário criar um método para cada tipo de Ação ou utilizar herança.

Criar uma classe pra cada seria espalhar diversos pontos de manutenção e a herança, se comparada a interface, gera um acoplamento muito maior.

Normalmente, interfaces não mudam muito ao longo do tempo. Tanto nos frameworks quanto nas linguagens as interfaces quase não são alteradas. Isso porque, com a interface o acoplamento é menor mas não é nenhum =)

Ou seja, quando você altera uma interface, sim, vai gerar pontos de manutenção. Mas, a ideia é justamente que não haja essa necessidade (e projetos grandes comprovam que normalmente não há mesmo).

Abraço

A interface então força a execução das funções citadas dentro dela ou é apenas regra para as classes que a implementam?

Apenas regra para as classes que a implementam. A vantagem o uso do polimorfismo em cima.

Certo. Sendo apenas uma regra, em qual momento no código é forçada a execução das ações? Porque na função está sendo apenas listado e na interface está sendo apenas uma regra de negócio, correto?

Desculpe a ignorância, é que esta parte realmente me deixou um tanto confuso.

Oi Matheus, perdão a demora.

Em nenhum momento o objetivo é forçar a execução. Mas, sim, a implementação dos métodos.

A interface é como um contrato que você assina prometendo que tudo que está lá dentro será implementado na classe =)

Por assinar esse contrato você tem certeza de que o método existe e, assim, podemos nos referenciar sempre a interface pois sabemos que quem implementar ela terá os métodos para serem executados.