Bom, a partir de hoje irei abordar a OOP(Object-Oriented Programming) do Python.
Polimorfismo consiste em classes mais abstratas que representam o comportamento das classes concretas que referenciam. Um exemplo em Java:
public abstract class OperacaoMatematica {
public abstract double calcular(double x, double y);
}
public class Soma extends OperacaoMatematica {
public double calcular(double x, double y) {
return x+y;
}
}
public class Subtracao extends OperacaoMatematica {
public double calcular(double x, double y) {
return x-y;
}
}
public class Contas {
public static void mostrarCalculo(OperacaoMatematica operacao, double x, double y) {
System.out.println("O resultado é: " + operacao.calcular(x, y));
}
public static void main(String args[]) {
//Primeiro calculamos uma soma
Contas.mostrarCalculo(new Soma(), 5, 5); //Imprime o resultado é: 10
//Depois uma subtração
Contas.mostrarCalculo(new Subtracao(), 5, 5); //Imprime o resultado é: 0
}
}
Como podem ver, existe duas implementações do metodo calcular e uma classe que as encara de forma abstrata. Na classe “Contas” o metodo “mostrarCalculo” recebe como parâmetro um objeto da classe “OperacaoMatematica”. "Nossa! Mas espera aí! Não se instância classes abstratas". É verdade, mas aí que está o trunfo, veja que as classes que implementam o método “calcular” extendem a classe abstrata. Com isso, é possível que “um objeto do tipo OperacaoMatematica seja criado” a partir da classe Subtracao/Soma. Acho que podemos dizer que, o método calcular pode se transformar de acordo com o contexto.
No Python a grande sacada é o tipo do dado, graças a tipagem dinâmica. Polimorfismo no Python rola a solta, pense bem quantas funções admitem diversos tipos de dados diferentes. Vou dar um exemplo aqui:
#Metodo extraido do livro Learning Python
def intersect(seq1, seq2):
res = []
for x in seq1:
if x in seq2:
res.append(x)
return res
Isso mesmo, só isso. Sem aquela porrada de classes: classe abstrata, duas classes para implementar o método e, finalmente, uma classe para usar essa abstração. No Python, como dito antes, a abstração é feita no tipo de dado. Teste essa classe passando diversas coisas, por exemplo, strings, tuples, list e etc. Vou colocar alguns exemplos de chamadas e retorno:
>>> intersect("SPAM", "SCAM")
['S', 'A', 'M']
>>> intersect([1,6,3,9], (1,4,5,9))
[1, 9]
Se você ainda não sabia como o polimorfismo funcionava, com certeza agora você pode confirmar um boato que tem por aí. Dizem que o entendimento do polimorfismo através do Python é mais rápido. Bom, comigo foi assim =].
Espero que tenham gostado do post, espero por comentários/dúvidas/sugestões enfim.
Abraços!!!



Nenhum comentário:
Postar um comentário