Índice
Polimorfismo é a capacidade de uma classe abstrata ou de um objeto específico de responder ao mesmo método com seu próprio comportamento. O polimorfismo especifica que um parâmetro ou objetos passados ou esperados podem assumir várias formas e ter comportamentos diferentes com os mesmos métodos.Quando realizamos programação orientada a objetos com polimorfismos, devemos ter em mente que uma instância de uma classe ou de um objeto pode ser invocada e funcionará e se comportará da mesma forma, independentemente da classe à qual o objeto pertence. Se temos muitas classes e objetos, devemos estruturar bem as hierarquias de classes e classes abstratas. Outra vantagem é poder declarar ou programar métodos com o mesmo nome, embora sua funcionalidade seja completamente diferente, já que nos referimos à instância da classe.
Como exemplo, suponha uma classe abstrata que representa o número de veículos, que compartilham como alguns dados em comum o nível de combustível, a marca e o modelo do veículo.
As propriedades da classe Veículos serão então o combustível que conterá o número de litros que são carregados no veículo e marca e modelo veículo.
A seguir definimos os métodos comuns para todos os veículos que irão abastecer e mostrar quanto resta como é usado, além disso, devemos ser capazes de atribuir a cada veículo uma marca e modelo e também poder consultar sua marca e modelo . A seguir, definimos os métodos para a classe Veículos.
combustível = $ combustível; } public function show fuel () {return $ this-> fuel; } public function assignvehicle ($ brand, $ model) {$ this-> brandymodel = $ brand. ' '. $ model; } public function showbrandmodel () {return $ this-> markandmodel; }}?> var13 ->Então começaremos a criar as classes que herdam de veículos e elas terão seus métodos particulares, por exemplo criamos a classe Carros, ela terá a propriedade de avançar o carro e cada vez que avançar consumirá um litro de combustível (para que o exercício seja facilmente compreendido)
class Cars extends Vehicle {public function advance () {// a cada 10 quilômetros consome um litro $ this-> fuel - = 1; }} // Fim da aulaAgora vamos implementar uma classe geral para o motorista do veículo, aqui levamos em consideração que um ou vários motoristas podem dirigir veículos diferentes.
Nesta aula iremos definir um construtor de tipo genérico ou abstrato
function __construct ($ object_parameter) {$ this-> myobject = $ object_parameter}Então podemos então manipular qualquer objeto que seja passado como parâmetro do construtor, para que nossa classe tenha a capacidade de receber um objeto como parâmetro, isso é polimorfismo, ou seja, pode usar objetos completos, por exemplo podemos enviar a classe autos como parâmetro e usa todos os seus métodos.
Vamos implementar os exemplos no php 5, por isso é importante lembrar o escopo de um método e as variáveis, na maioria das linguagens é muito semelhante. Para atribuir ou alterar o escopo de uma variável ou propriedade, devemos usar a palavra reservada correspondente quando declaramos a variável ou método de acordo com o acesso ou escopo que queremos ter:
- privado: indica que a variável ou método só pode ser acessado pelos métodos da classe à qual o objeto pertence e não de qualquer outra.
- protegido: indica que a variável ou método é acessível pelos métodos de e também de qualquer uma de suas subclasses que pertençam a esta classe.
- público: indica que as variáveis ou métodos são acessíveis a partir de qualquer outro método ou independentemente de onde pertençam ou a quem pertençam. Tenha cuidado com os atributos públicos, pois eles podem modificar um valor que também é usado por outra classe ou outro método.
A seguir, criamos a classe Driver, que terá os seguintes métodos: carregar combustível, atribuir veículo, visualizar marca e modelo, avançar o veículo e verificar o combustível restante à medida que avança.
veículo = $ objeto; } função pública carga de combustível ($ combustível) {$ this-> veículo-> carga de combustível ($ combustível); } public function assignvehicle ($ make, $ model) {$ this-> vehicle-> assignvehicle ($ make, $ model); } função pública brandymodel () {return $ this-> veículo-> showbrandmodel (); } public function advancevehicle () {$ this-> vehicle-> advance (); } função pública combustível restante () {retornar $ este-> veículo-> mostrar combustível (); }}?> var13 ->Podemos ver como em cada função da classe Carros estamos instanciando os métodos comuns da classe Super Veículos para atribuir propriedades ou métodos que são particulares e não comuns a todos os veículos.
Vamos ver a seguir como usar essas classes e o próprio polimorfismo.
atribuir veículo ('Ferrari', '550 MARANELLO'). 'Vamos ver a seguir as verdadeiras vantagens do polimorfismo e herança de classe, vamos adicionar a classe
'; // Mostramos o veículo atribuído echo $ ferrari-> brandymodel (). '
'; // Colocamos combustível no veículo indicando a quantidade em litros eco 'Carga de combustível'. $ Ferrari-> carga de combustível (50). '
'; // Mostramos a quantidade de combustível atual echo 'Combustível atual'. $ Ferrari-> combustível restante (). ' litros
'; echo 'Veículo avançado
'; $ ferrari-> advanceVehicle (); echo $ ferrari-> brandymodel (). ' você tem '. $ ferrari-> combustível restante ().' litros de combustível
'; // Criamos outra instância com outro veículo, por exemplo podemos criar uma variável que é a marca e patente $ hondaHB0071 = novo Motorista (novos Autos); echo $ hondaHB0071-> assignvehicle ('Honda', 'ACCORD'). '
'; echo $ hondaHB0071-> makeandmodel (). '
'; echo 'Carga de combustível'. $ hondaHB0071-> carga de combustível (50). '
'; eco 'Combustível atual'. $ hondaHB0071-> combustível restante (). ' litros
'; echo 'Advance Honda Vehicle
'; $ hondaHB0071-> advanceVehicle (); echo $ hondaHB0071-> makeandmodel (). ' você tem '. $ hondaHB0071-> combustível restante ().' litros de combustível
'; ?> var13 ->
// Classe de motocicletas Motocicletas extends Vehicle {public function advance () {// a cada 10 quilômetros consome um litro $ this-> fuel - = 1; }} $ moto = novo piloto (novas motocicletas); echo $ moto-> assign vehicle ('Yamaha', 'YBR 125'). 'Aqui podemos ver como fomos capazes de implementar uma extensão da mesma classe por meio de polimorfismo reutilizando a classe pai Vehicles e os métodos e propriedades que um carro e uma motocicleta têm em comum, embora se comportem de forma diferente, neste caso podemos ver que a capacidade de combustível é diferente.
'; echo $ moto-> makeymodel (). '
'; eco 'Carga de combustível'. $ motocicleta-> carga de combustível (10). '
'; eco 'Combustível atual'. $ moto-> combustível restante (). ' litros
'; echo 'Avança veículo de motocicleta
'; $ moto-> advanceVehicle (); echo $ moto-> makeymodel (). ' você deixou '. $ moto-> fuelremaining ().' litros de combustível
'; ?> var13 ->
Poderíamos incorporar os cálculos necessários para tornar o consumo de combustível mais real de acordo com o veículo.
A vantagem de usar polimorfismo é que podemos criar métodos semelhantes, mas com parâmetros diferentes, por exemplo.
Implementação de interfaces com pHp
Interfaces são declarações que definem quais métodos podem ser implementados por uma classe, escondendo como esses métodos são usados ou gerenciados. Os métodos que são declarados em uma interface devem ser públicos, para serem acessados pelas classes que implementamos. Eles permitem um encapsulamento de classes e polimorfismos.
Para implementar uma interface com php, a palavra-chave implements é usada. Se tivermos vários métodos declarados em uma interface, eles devem ser implementados em uma classe. As classes podem implementar mais de uma interface para poder acessar diferentes métodos para que possamos ter diferentes funcionalidades em diferentes classes.
Vemos um exemplo de interfaces
Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo