Polimorfismo
Uma característica das linguagens de programação orietadas a objeto é o polimorfismo. O polimorfismo permite “programar no geral” em vez de “programar no específico”. Em particular, o polimorfismo permite escrever programas que processam objetos que compartilham a mesma superclasse em um hierarquia de classes como se todas fossem objetos da superclasse.
Com o polimorfismo, podemos projetar e implementar sistemas que são facilmente extensíveis – novas classes podem ser adicionadas a partes gerais do programa com pouca ou nenhuma modificação, contanto que as novas classes façam parte da hierarquia de herança que o programa processa genericamente. As únicas partes de um programa que devem ser alteradas para acomodar as novas classes são aquelas que exigem conhecimento direto das novas classes que o programador adiciona à hierarquia.
Em muitos casos, o projeto de uma hierarquia de heranças resulta em uma ou em mais classes que estão tão altas na hierarquia que uma instanciação delas não faz sentido. Ou seja, se temos um método implementado em todas as classes-filhas de uma determinada classe-pai, o protocolo (mas não o corpo) desse método é incluído na classe-pai.
Esse método abstrato, muitas vezes, é chamado de método virtual. Além disso, qualquer classe que inclua pelo menos um método virtual é chamada de classe virtual. Esta última não pode ser instanciada, porque nem todos os seus métodos têm corpos. Qualquer subclasse de uma classe virtual que deva ser instanciada deverá oferecer implementações de todos os métodos virtuais herdados.
Com relação ao polimorfismo, podemos tirar as seguintes conclusões em ruby:
1) Sobrecarga:
Não existe em Ruby:
Exemplo:
def bah (a)
puts “apenas um parametro”
end
def bah (a,b)
puts “2 parametros”
end
bah 2,3 # Imprime “2 parametros”
bah “Olá” # Erro! Falta um argumento
2) Coerção
Ruby possui coerção:
a = 57
puts a.class #Imprime FixNum
a = a + 300000000000000
puts a.class #Imprime BigNum
a = a + 1.3
puts a.class #Imprime Float
3) Herança
Em ruby só tem herança simples, isto é, não tem herança múltipla
Exemplo:
Class Animal
@num_de_patas
end
class Cachorro < Animal
@latidos_por_minuto
end
Deixe um comentário