Métodos e classes abstratos em PHP 5

Uma classe abstrata é que tem métodos abstratos. Os métodos abstratos são os que estão declarados em uma classe, porém não foi definido na classe o código desses métodos.

Essa pode ser uma boa definição de classes e métodos abstratos, mas vejamos com calma uma explicação um pouco mais detalhada e compreensível para todos.

Em algumas ocasiões, em um sistema de herança como o da programação orientada a objetos (POO), temos entidades que declarar embora ainda não se possa dar sua definição, simplesmente desejamos defini-las por alto para começar uma hierarquia de classes.

Pensemos nos produtos lácteos (os derivados do leite). Não há dúvida de que os produtos lácteos são uma grande família. Incluem os iogurtes, manteigas, queijos, sorvetes e inclusive o próprio leite. Entretanto, os produtos lácteos em si não são encontrados na vida real. No supermercado não te vendem um produto lácteo em geral. Por exemplo, ninguém compra um quilo de produto lácteo… mas sim um litro de leite, uma caixa de sorvete o um pote de iogurtes.

Todos os produtos lácteos têm algumas características comuns, como a porcentagem em leite ou a data de validade. Também têm algumas funcionalidades comuns como serem conservados ou consumidos. No entanto, a maneira de serem conservados é distinta dependendo do produto lácteo. O leite se conserva fora da geladeira, enquanto não esteja aberta a embalagem, e os iogurtes devem ser conservados na geladeira todo o tempo. Os queijos se conservam na geladeira, mas dentro de um recipiente caso desprendam olores fortes. Com relação aos sorvetes, devem ser conservados no congelador, sempre que desejemos que não se convertam em líquido. Ao consumir um produto lácteo a coisa também muda, posto que o queijo costuma ser acompanhado de pão ou torradas, o leite se bebe e o sorvete se toma com colher.

Resumndo, queremos demonstrar que podemos ter um conjunto de objetos que têm características comuns e funcionalidades, também comuns, mas que diferem na maneira de realizá-las. Para isto está a abstração.

A classe dos produtos lácteos terá uma série de propriedades e alguns métodos abstratos. Os métodos abstratos, como havíamos adiantado, são aqueles que não incluem uma codificação, senão que simplesmente se declaram, deixando para as classes que herdem a tarefa de codificá-los.

Neste caso, a classe produto lácteo terá os métodos abstratos conservar-se() e consumir-se(), mas não se especificará o código fonte destes métodos (por isso são abstratos). As classes que herdem de produto lácteo serão as encarregadas de definir um código para os métodos definidos como abstratos na classe pai. Assim, cada classe que herde de produto lácteo, deverá especificar o mecanismo concreto e específico pelo qual vão ser conservados ou consumidos.

As classes que incorporam métodos abstratos devem ser declaradas como abstratas. É uma condição indispensável. As classes abstratas na podem ser instanciadas. Ou seja, não podemos criar objetos a partir de elas. É algo lógico. Pensemos nos produtos lácteos, estes não existem a não ser como uma ideia geral. Só poderemos encontrar produtos lácteos de um tipo em concreto, como leite ou iogurte, mas não a ideia de produto lácteo em geral.

Uma classe que herde de um produto lácteo deve definir os métodos abstratos declarados na classe abstrata. Do contrário, a classe que herda seria obrigada a declarar-se como abstrata.

No nosso exemplo de vídeoclub, tratado ao longo dos diferentes capítulos do manual de PHP 5, temos uma classe que também seria um bom exemplo de classe abstrata. Trata-se da classe suporte. Desta classe herdavam os distintos produtos do vídeoclub, como filmes em DVD, fitas de vídeo ou jogos. Não teria sido má a ideia declarar como abstrata a classe suporte, dado que não vão ser utilizados, nem existem, suportes em geral, o que sim existem são os distintos suportes concretos.

A sintaxe da abstração

Para declarar classes e métodos abstratos se utiliza a seguinte sintaxe.

abstract class nome_classe{

//propriedades
public x;
private y;

Uma classe abstrata é que tem métodos abstratos. Os métodos abstratos são os que estão declarados em uma classe, porém não foi definido na classe o código desses métodos.

Essa pode ser uma boa definição de classes e métodos abstratos, mas vejamos com calma uma explicação um pouco mais detalhada e compreensível para todos.

Em algumas ocasiões, em um sistema de herança como o da programação orientada a objetos (POO), temos entidades que declarar embora ainda não se possa dar sua definição, simplesmente desejamos defini-las por alto para começar uma hierarquia de classes.

Pensemos nos produtos lácteos (os derivados do leite). Não há dúvida de que os produtos lácteos são uma grande família. Incluem os iogurtes, manteigas, queijos, sorvetes e inclusive o próprio leite. Entretanto, os produtos lácteos em si não são encontrados na vida real. No supermercado não te vendem um produto lácteo em geral. Por exemplo, ninguém compra um quilo de produto lácteo… mas sim um litro de leite, uma caixa de sorvete o um pote de iogurtes.

Todos os produtos lácteos têm algumas características comuns, como a porcentagem em leite ou a data de validade. Também têm algumas funcionalidades comuns como serem conservados ou consumidos. No entanto, a maneira de serem conservados é distinta dependendo do produto lácteo. O leite se conserva fora da geladeira, enquanto não esteja aberta a embalagem, e os iogurtes devem ser conservados na geladeira todo o tempo. Os queijos se conservam na geladeira, mas dentro de um recipiente caso desprendam olores fortes. Com relação aos sorvetes, devem ser conservados no congelador, sempre que desejemos que não se convertam em líquido. Ao consumir um produto lácteo a coisa também muda, posto que o queijo costuma ser acompanhado de pão ou torradas, o leite se bebe e o sorvete se toma com colher.

Resumndo, queremos demonstrar que podemos ter um conjunto de objetos que têm características comuns e funcionalidades, também comuns, mas que diferem na maneira de realizá-las. Para isto está a abstração.

A classe dos produtos lácteos terá uma série de propriedades e alguns métodos abstratos. Os métodos abstratos, como havíamos adiantado, são aqueles que não incluem uma codificação, senão que simplesmente se declaram, deixando para as classes que herdem a tarefa de codificá-los.

Neste caso, a classe produto lácteo terá os métodos abstratos conservar-se() e consumir-se(), mas não se especificará o código fonte destes métodos (por isso são abstratos). As classes que herdem de produto lácteo serão as encarregadas de definir um código para os métodos definidos como abstratos na classe pai. Assim, cada classe que herde de produto lácteo, deverá especificar o mecanismo concreto e específico pelo qual vão ser conservados ou consumidos.

As classes que incorporam métodos abstratos devem ser declaradas como abstratas. É uma condição indispensável. As classes abstratas na podem ser instanciadas. Ou seja, não podemos criar objetos a partir de elas. É algo lógico. Pensemos nos produtos lácteos, estes não existem a não ser como uma ideia geral. Só poderemos encontrar produtos lácteos de um tipo em concreto, como leite ou iogurte, mas não a ideia de produto lácteo em geral.

Uma classe que herde de um produto lácteo deve definir os métodos abstratos declarados na classe abstrata. Do contrário, a classe que herda seria obrigada a declarar-se como abstrata.

No nosso exemplo de vídeoclub, tratado ao longo dos diferentes capítulos do manual de PHP 5, temos uma classe que também seria um bom exemplo de classe abstrata. Trata-se da classe suporte. Desta classe herdavam os distintos produtos do vídeoclub, como filmes em DVD, fitas de vídeo ou jogos. Não teria sido má a ideia declarar como abstrata a classe suporte, dado que não vão ser utilizados, nem existem, suportes em geral, o que sim existem são os distintos suportes concretos.

A sintaxe da abstração

Para declarar classes e métodos abstratos se utiliza a seguinte sintaxe.

abstract class nome_classe{

//propriedades
public x;
private y;

//métodos

public function __construct(){

}

public abstract function nome_metodo();

}

Observemos que se utiliza a palavra chave “abstract” para definir as classes ou métodos abstratos. Ademais, os métodos abstratos não levam nenhum código associado, nem mesmo as chaves para abrir e fechar o método.   //métodos

public function __construct(){

}

public abstract function nome_metodo();

}

Observemos que se utiliza a palavra chave “abstract” para definir as classes ou métodos abstratos. Ademais, os métodos abstratos não levam nenhum código associado, nem mesmo as chaves para abrir e fechar o método.

Fonte: http://www.criarweb.com/artigos/metodos-casses-abstratos-php5.html

Deixe um comentário