O básico sobre POO
POO o principal paradígma atual
Com certeza você já ouviu falar sobre o paradigma orientado a objetos. Realmente ele é o principal no mundo atual, e sem dúvidas você já ouviu falar dele, mas você realmente conhece sua teoria, sua base e história?
Alan Kay
Se eu pudesse apontar alguém como o fundador da programação atual ele seria Kay. Entre seus principais feitos são:
- Ter concebido o primeiro Laptop
- Criado da linguagem smaltak, segue abaixo um exemplo de código:
publish Transcript show: 'Hello, world!'
- E o que mais nos interessa, ele é o criador da POO(programação orientada a objetos)
Graduou-se em matemática e biologia molécular nos EUA. Sim ele não era formado em programador, impressionante não? Sua formação o ajudou a formular seus conceitos, ele dizia que cada pedaço de um código devia se comportar como um organismo, uma célula, ou seja funcionar de maneira autônoma, fim de comprir um objetivo. Assim surgiu o primeiro princípio da POO.
Princípios
Como vimos na fala de kay, cada classe deve funcionar de maneira isolada, podendo ou não se comunicar com outras classe. Começando pelo começo: imagine um controle remoto, ele tem seus atributos, como: marca, a tv com a qual está conectado, seu ano de fabricação, etc. Além disso ele também possui seus métodos como: ligar, desligar, mudar de canal, assim por diante.
Porém temos um problema neste modelo, e a tv? A tv deve ser uma classe separada do controle. Assim como ele, ela deve ter sua fabricante, seu sistema, etc. Deste modo, podemos passar como parâmetro do controle o objeto tv, que é uma instâncea da classe.
As principais vantagens da POO
- Escalabilidade: É fácil escalar seus projeto, e identificar os erros rapidamente, já que neste sistema os códigos ficam desaclopados, ou seja quando algo der errado é fácil identificar qual pedaço do seu projeto quebrou.
- Legibilidade: com este sistema, e o nível certo de desacoplamento fica fácil ler os códigos, além de que não será necessário reptir inúmeros comandos.
Herança
Imagine a seguinte situação: você está desenvolvendo seu jogo, então você cria uma classe para o seu player, uma classe para o inimigo do tipo 1, uma para o inimigo do tipo 2, etc. Mas pense comigo, há similaridades entre o inimigo 1 e o inimigo 2, então seria possível replicar uma parte do código de um para o outro. Assim surge o conceito de herança, vejemos o seguinte exemplo:
Uma pessoa possui os seguintes atributos:
- Idade
- Nome
- Sobrenome
- Sexo
Agora pensemos em algo mais específico, um professor. Um professor também tem os mesmos atributos, porém ele possui alguns adicionais como:
- Escola
- Matéria
- Turmas
Podemos dizer que professor herda de pessoa.
Polimorfismo
Agora chegamos provavelmente no conceito mais complexo de POO, o polimorfismo. Primeiramente vamos imaginar as seguintes classes:
abstract class Operação{
abstract public function Calcular(int $a, int $b) : int
}
class Soma extends Operação{
public function Calcular(int $a, int $b) : int{
return $a + $b;
}
}
class Subtração extends Operação{
public function Calcular(int $a, int $b) : int{
return $a - $b
}
}
Retirado da Wikipédia
Ambas as classes possuem a mesma assinatura, ou seja possuem os mesmos atributos e funções que pedem parâmetros de mesmos tipos e um mesmo tipo de retorno. Sendo assim, vamos criar uma quarta classe:
function MostrarSoma(Operação $o, int $a, int $b){
echo "O resultado é " . $o.Calcular($a,$b);
}
Deste modo a mesma função funciona para ambas as classes. Isso é polimorfismo.