✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Classes Abstratas, Parte 2 – Classes Abstratas e Interfaces

14

No post anterior desta série, passei por:

  • o básico de classes abstratas,
  • como implementá-los,
  • e forneceu exemplos de código de trabalho.

E embora eu ache que entender as classes abstratas é fundamental para estabelecer uma base sólida para a programação orientada a objetos, muitas vezes vejo que pode ser confuso quando se trata de compará-las com interfaces e saber quando usá-las.

Classes abstratas e interfaces

Então, neste post, vou compartilhar:

  • uma rápida atualização sobre o que são interfaces,
  • o que são classes abstratas,
  • e então como saber quando usar um sobre o outro.

Este não deve ser um artigo intensivo de codificação, mas deve ajudar a saber quando escrever código de um determinado tipo para ajudar a organizar melhor seus projetos.

1 Interfaces

Lembre-se que quando se trata de interfaces, também usamos o termo “programação para uma interface" com a ideia de que a interface define os métodos que uma classe deve implementar para cumprir o “contrato” com essa interface.

O código usado para demonstrar uma interface básica foi:

<?php

interface iCache 
{
  public function set($key, $value);
  public function get($key);
  public function has($key);
}

Mas lembre-se, o propósito da interface não é definir depois que o código foi escrito. Em vez disso, é uma ferramenta usada para projetar quais classes devem implementar se seguirem um determinado paradigma ou se exigirem um determinado conjunto de funções.

Ou seja, se você for projetar um conjunto de classes que funcionem com armazenamento em cache, não escreva as classes primeiro. Você escreve a interface primeiro e, em seguida, as classes implementam essa interface.

A ideia é que qualquer classe que implemente a interface tenha a garantia de ter essas funções.

2 Aulas de Resumo

As classes abstratas, por outro lado, nos permitem fazer duas coisas:

  1. implementar funcionalidades que podem ser usadas por subclasses,
  2. implementar assinaturas de método que as subclasses devem implementar.

Isso pode parecer um pouco incongruente no início, mas considere o seguinte:

Quando você tem uma classe de um certo tipo que terá uma funcionalidade consistente, não importa a subclasse, a funcionalidade vai para a classe abstrata. Quando outros métodos precisam ter sua implementação de um método, basta fornecer a assinatura do método e marcá-la como abstract.

Veja um exemplo de um post anterior:

Agora, isso nos leva a todos os exemplos anteriores e as coisas anteriores em que precisamos nos concentrar em relação a interfaces e classes abstratas, mas para alguns, isso ainda não fornece muita clareza.

Especificamente, isso ainda não responde à pergunta: como decidimos quando usar uma classe abstrata e quando usar uma interface?

À primeira vista, pode parecer um pouco confuso, mas há algumas coisas que você pode usar para ajudar a tomar a decisão.

Quando usamos cada um?

Lembre-se que quando se trata de programação orientada a objetos, podemos dividi-la em três formas distintas:

  • As aulas representam uma coisa. Você pode considerar estes um substantivo.
  • Atributos ou propriedades são como adjetivos. Eles descrevem o objeto ou algo que o objeto pode conter.
  • Métodos ou funções são como verbos. Eles descrevem o que eles podem fazer.

Agora, quando se trata de uma interface, pense no que a interface faz: ela descreve, sem implementação, o que um objeto pode fazer. E quando se trata de uma classe abstrata, ela descreve o que é um objeto durante o tempo de execução.

Em outras palavras, uma boa regra geral é que, se você precisar fornecer um conjunto de comportamentos para um objeto, uma interface é o caminho a percorrer. Se você precisar descrever o que é um objeto, use uma classe abstrata.

Para classes abstratas, eu também levaria isso um passo adiante e diria que ajuda a descrever um nível básico de dados que descreve um objeto ou o que ele pode armazenar além de um nível básico de funcionalidade.

Tem Um Exemplo?

Tal como acontece com a maior parte do conteúdo em cada um desses posts, tento dar exemplos mesmo que não seja feito especificamente em código. Talvez isso ajude a explicar ainda mais:

  • As interfaces não têm implementação. Eles apenas garantem o que uma classe fará.
  • As classes abstratas devem ter um nível básico de implementação. Isso deve representar o que uma classe pode conter e fazer, mas não está completa. Eles exigem um pouco mais de implementação da subclasse.

Quando você estiver trabalhando com código orientado a objetos, espero que isso ajude a fornecer algumas diretrizes sobre quando usar o quê. Se não, não hesite em deixar um comentário (algo que os membros têm permissão para fazer :)).

Além disso, veremos isso na prática quando escrevermos código orientado a objetos (principalmente para WordPress, mas nem sempre).

Fonte de gravação: tommcfarlin.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação