Página Inicial > PHP > Classes abstratas e interfaces

Classes abstratas e interfaces

A Programação Orientada a Objetos nasceu da necessidade de organização dos códigos-fonte das aplicações. Muitas pessoas se assustam com a POO, acredito que é devido o nível de abstração, porém é a mesma linguagem mas com o código organizado, tudo depende de disciplina.

Provavelmente o que confunde a cabeça de muita gente, na hora de programar em POO, são as classes abstratas e as interfaces. O conceito delas é muito simples: organização, principalmente definir padrões.

Em uma classe abstrata você pode declarar atributos e métodos que serão usados em uma classe final ou um grupo de classes final, nunca é uma outra classe abstrata ou interface. Na pratica isso ajuda a não repetir código, e se precisar alterar algo não será preciso ir em cada classe modificando a mesma coisa. Aplicações tipo ADO utilizam desse recurso para padronizar a comunicação com bancos de dados diferentes.

A interface só virtualizará métodos, e obrigatoriamente terão que declará-los na classe em que for implementada. A função da interface não difere da classe abstrata, porém a interface tem uma estrutura mais limpa que pode deixar sua aplicação mais leve.

O uso de interfaces e classes abstratas não é mandatório, porém se você tem um grupo de desenvolvimento é interessante que se crie certas abstrações para que sua aplicação fique bem estruturada e modulada. A modularização da aplicação também ajuda no trabalho do grupo separando-o por área de especialidade.

Categories: PHP Tags:
  1. 13, maio, 2009 em 15:56 | #1

    Olá Victor,

    Gostaria de fazer algumas observações sobre este post.

    Quando você diz:
    – “Em uma classe abstrata você pode declarar atributos e métodos que serão usados em uma classe final ou um grupo de classes final, nunca é uma outra classe abstrata”
    Isso está errado, uma classe abstrata pode sim ser filha de outra classe abstrata, logo, herdará comportamento e atributos da classe pai.

    Outros dois pontos gravíssimos:
    – “A interface só virtualizará métodos,”
    – “A função da interface não difere da classe abstrata, porém a interface tem uma estrutura mais limpa que pode deixar sua aplicação mais leve.”

    A maior dificuldade para a aprendizagem correta da POO é exatamente conseguir distinguir a diferença entre uma classe abstrata e uma interface e, quem ler os trechos acima ficará ainda mais confuso e irá aprender errado.

    Uma interface não “virtualiza” nada. A interface é o contrato da implementação, ou seja, se uma classe implementa uma interface ela obedece aquele contrato. A interface também não pode conter implementação, diferente de uma classe abstrata. Enfim, **a interface difere-se muito de uma classe abstrata.**

    E não tem nada de estrutura mais ou menos limpa e nem ficar mais leve ou mais pesado.

  2. Victor
    28, maio, 2009 em 12:13 | #2

    Obrigado Javeaux pelas observações. Reconheço que esse artigo esta mal redigido, deveria ter guardado ele por mais tempo como rascunho e o aperfeiçoado.

    Permita-me então esclarecer sobre alguns equivocos:

    1) multi-herança de classes abstratas: “Em uma classe abstrata você pode declarar atributos e métodos que serão usados em uma classe final ou um grupo de classes final, nunca é uma outra classe abstrata” — afirmei isso com base no livro “PHP – Programando com Orientação a Objeto” do Pablo Dall’Oglio, que apesar de não afirmar a multi-herança induz o leitor, menos experiente, a acreditar que ela não existe.

    2) interfaces: “A interface só virtualizará métodos, e obrigatoriamente terão que declará-los na classe em que for implementada” — Posso não ter me expressado bem nessa afirmação para alguns, mas não esta totalmente errada, em uma interface você declara os métodos, virtualiza, porém não os implementa, isso é feito na classe que implementar a interface.

    Peço desculpa a todos e prometo escrever um artigo decente da proxima vez.

  1. Nenhum trackback ainda.