Baixe: Apostila de PHP para download
Polimorfismo em Orientação a objetos
Não se preocupe com a quantidade de teoria dada neste início, vamos aprender tudo depois na prática.Poli quer dizer várias, morfos maneira. Ou seja, polimorfismos quer dizer várias maneiras de fazer a mesma coisa, e essa é uma característica da orientação a objetos.
Imagine que a classe Automóvel tenha a função ligar().
Ora, a maneira de ligar um carro é diferente da maneira de ligar uma moto, que é diferente da maneira de ligar um triciclo e é diferente da maneira de ligar uma mobilete. Mas todos são automóveis, e todos ligam, e todos tem a função (que em orientação a objetos chamamos de métodos) ligar().
Então, ao executar o método ligar() de um carro ou de uma moto, ele vai ligar, pode ser de uma maneira ou outra, mas vai ligar.
Isso é polimorfismo, é a capacidade de fazer algo de maneiras diferentes.
Se você tem um objeto chamado "moto", para ligar ela, vai acionar o método: moto.ligar()
Se tem uma "BWM", vai chamar o mesmo método: BMW.ligar()
Porém, cada um deles funciona de uma maneira diferente, internamente, embora todos sejam automóveis.
Isso é a ideia básica por trás do polimorfismo. O importante é ligar o automóvel.
Herança em Orientação a objetos
Uma das características mais interessantes da orientação a objetos, é a da herança, que é a capacidade que uma classe tem de herdar informações de outras classes.Vamos supor a classe Funcionario.
Ela define todos os funcionários de uma empresa.
O que todos funcionários tem em comum?
Ué, salário, horário de trabalho, tarefas a fazer...
Porém, cada funcionário, de cada setor, tem coisas especificas a fazer.
Os funcionários de TI, herdam as características da classe Funcionário: tem salário, horários a cumprir e tarefas a fazer dentro da empresa.
Os funcionários de entrega, também herdam algumas características, como salário, horários a cumprir, mas não ficam dentro da empresa, ficam fazendo entregas fora dela.
O presidente da empresa também é um funcionário, também vai herdar características gerais da classe Funcionário, como salário, mas vai viajar, vai passar dias fora, nem sempre vai estar na empresa.
O que queremos dizer com isso, é que algumas classes podem herdar informações e métodos de outras classes ditas superiores, assim evitamos escrever muito código.
Dizemos que a classe Funcionario é uma superclasse.
A classe TI é uma subclasse, assim como a Entregador é uma subclasse, pois herdam características da classe Funcionario.
Uma subclasse herda atributos e métodos de uma superclasse.
Com o uso da herança, você poupa escrever código ao escrever uma classe que difere de outra apenas em algumas detalhes menores e mais específicos.
Encapsulamento em Programação orientada a objetos
Até o momento, todo nosso código são ‘pedaços’ soltos, uma função aqui, um formulário ali, e as coisas meio que vão se encaixando.Uma função, por exemplo, ela é do script inteiro, qualquer um pode ter acesso a ela e usar como bem entender, isso pode ser bom ou ruim.
Pode ser bom por facilitar a vida, já que ela deveria ser usada mesmo
Pode ser ruim porque algumas funções não deveriam ser usadas por algumas pessoas.
Por exemplo, a galera da TI não deveria ter acesso as funções da galera do setor da Tesouraria da empresa, concorda?
E é aí que vem o encapsulamento.
Quando criamos uma classe, definimos basicamente duas coisas dentro dela: informações (atributos) e ações (métodos) e estes são próprios. Somente os próprios objetos tem acesso a seus próprios atributos e métodos.
Se quiser que um objeto do setor de RH converse com um objeto do setor de TI, você vai ter que fazer um método específico em ambos os lados para que ocorra essa conversa.
Um objeto não faz ideia do que ocorre dentro de outro. É um mundo a parte. É o encapsulamento.
Por exemplo, os atributos e métodos do motor de um carro não são acessíveis pelo objeto ar-condicionado, assim esse não pode se meter naquele e ocasionar problema. É cada um no seu quadrado, entendeu?