Polimorfisme és el concepte de programació orientada a objectes en el qual múltiples objectes responguen de maneres distintes al mateix missatge.
Si diguerem que talleu
:
- Un cuiner tellaria menjar
- Un perruquer tallaria cavell
- Un actor deixaria d’actuar
La manera de respondre és distinta.
Dos conceptes que estan relacionat amb el polimorfisme són l’herència i les interfaces.
class Video
def play
end
end
class Vimeo < Video
def play
p "Inserta el reproductor Vimeo"
end
end
class YouTube < Video
def play
p "Inserta el reproductor de YouTube"
end
end
videos = [YouTube.new, Vimeo.new, Vimeo.new, YouTube.new, YouTube.new]
videos.each do |video|
video.play
end
Output
"Inserta el reproductor de YouTube"
"Inserta el reproductor Vimeo"
"Inserta el reproductor Vimeo"
"Inserta el reproductor de YouTube"
"Inserta el reproductor de YouTube"
Tots els mètodes reponen al mètode play
perquè tots estan heretant del mètode Video.
El cas és que no ens importa on estiguen els videos, el que importa és que s’han de reproduir.
En la iteració no hi ha ninguna referència a Vimeo o Youtube. En alguns llenguatges existeixen les interfaces, en Ruby no, s’utilitza un concepte anomenat do type, es diu així perquè el concepte fa referència a la idea de que si alguna cosa és paregut el tractarà com el que necessitem, si té els elements que necessita el tractarà d’aquesta manera.
Així, si pot fer play és un video.
No importa el tipus de dades sinó els mètodes i atributs que té. Si el tipus de dada no importa no necessitem interfaces per al polimorfisme.
En aquest cas no hauria necessitat d’utilitzar herència per tal d’utilitzar polimorfisme. Així funcionaria igualment d’aquesta manera:
class Vimeo
def play
p "Inserta el reproductor Vimeo"
end
end
class YouTube
def play
p "Inserta el reproductor de YouTube"
end
end
videos = [YouTube.new, Vimeo.new, Vimeo.new, YouTube.new, YouTube.new]
videos.each do |video|
video.play
end