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