domingo, 24 de julho de 2011

Propondo Interfaces

Gustavo Crivelli
(17/07/2011)

Boa tarde!

Hoje gostaria de compartilhar com vocês os protótipos de interface que desenvolvi no bimestre passado. Depois de analisar diversos sites já existentes, e levando em consideração os seus pontos bons e ruins, eis o que desenvolvi:



Vocês podem notar uma certa semelhança do segundo design com a interface já postada pelo Henrique algum tempo atrás: este é o design escolhido como base para o site da nossa empresa. Já é possível vizualisá-lo aqui.

Isto dito, vamos para a programação!

Agora que todos já sabem o que são e pra que servem as propriedades de acesso básicas do PHP, está na hora de partir para algo ligeiramente mais avançado. Quebrando um pouco a promessa do meu último post, vou explicar aqui o funcionamento das propriedades interface e abstract. Static e final ficam para próxima.

Abstract: Este modificador pode ser utilizado em classes ou métodos, com algumas diferenças. Usando-o em um método, indicamos que este não será desenvolvido na classe em que foi criado; poderemos apenas declarar o seu cabeçalho, e nada mais, pois o resto terá de ser implementado em uma classe herdeira. Um exemplo para ajudar a visualização: em uma classe Animal, temos o método abstract function falar(); Esta classe é então herdada pelas classes Cachorro, Gato e Girafa. Cada uma dessas classes poderá (e precisará) desenvolver dentro de si mesma o método falar. Assim, com o mesmo comando, conseguiremos fazer o cachorro latir, o gato miar e a girafa... fazer seja lá qual for o som que uma girafa faz.

Quando usamos o abstract na declaração de uma classe, o resultado é que não podemos fazer uma instância direta da classe. Ainda podemos declarar métodos, abstratos ou não, e ainda podemos declarar variáveis (na verdade só variáveis do tipo constante), mas tudo isso só verá a luz do dia quando for herdado por outra classe. No exemplo acima, a classe Animal, independentemente dos métodos que contém, deveria ser abstrata: afinal, não é possível criar um "animal" sem que este seja de alguma espécie.

Interface: uma interface é basicamente uma classe que pode conter apenas constantes e cabeçalhos de funções, e nada mais. Desta maneira, uma classe que implemente uma interface terá que desenvolver todos os métodos nela declarados. Pode não parecer muito útil, mas imagine que seja preciso padronizar as chamadas dos métodos de diversas classes distintas, como ocorreu no exemplo acima. Como na classe Animal há apenas métodos abstratos e variáveis constantes, e a própria classe já é abstrata e não pode ser instanciada, podemos muito bem retirar os abstracts e transformá-la de uma vez em uma interface.

Para aqueles que realmente leram esta verdadeira parede de texto, espero que tenham compreendido o que são os atributos abstract e interface e entendido as suas semelhanças e diferenças. Se tudo der certo, na semana que vem terminarei este guia falando sobre as propriedades Final e Static. Não percam!


Gustavo Crivelli
(24/07/2011)

Nenhum comentário:

Postar um comentário