Ruby/Dziedziczenie: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
zamiana ProstaNawigacja->Subst:Naw
Nie podano opisu zmian
 
Linia 5:
Możemy wyrazić tę koncepcję w Rubim:
 
<sourcesyntaxhighlight lang="ruby">
class Ssak
def oddychaj
Linia 17:
end
end
</syntaxhighlight>
</source>
 
Chociaż nie określamy jak <tt>Kot</tt> powinien oddychać, to każdy kot będzie dziedziczył to zachowanie z klasy <tt>Ssak</tt> ponieważ <tt>Kot</tt> został zdefiniowany jako podklasa klasy <tt>Ssak</tt>. (W terminologii obiektowej, mniejsza klasa jest ''podklasą'', natomiast większa klasa jest ''nadklasą''.) Odtąd, z punktu widzenia programisty, koty uzyskują zdolność oddychania "za darmo". Jak dodamy metodę <tt>daj_glos</tt> nasze koty będą mogły zarówno oddychać oraz mówić.
 
<sourcesyntaxhighlight lang="ruby">
mruczek = Kot.new
mruczek.oddychaj #=> wdech i wydech
mruczek.daj_glos #=> Miau
</syntaxhighlight>
</source>
 
Na pewno wystąpią również takie sytuacje, że niektóre własności nadklasy nie powinny być dziedziczone przez jakąś konkretną podklasę. Chociaż ptaki generalnie potrafią latać, pingwiny są podklasą ptaków nielotnych ([[w:Nielot|nielotów]]).
 
<sourcesyntaxhighlight lang="ruby">
class Ptak
def czysc
Linia 45:
end
end
</syntaxhighlight>
</source>
 
Zamiast kompletnie definiować każdą cechę każdej nowej klasy, potrzebujemy jedynie dołączyć, a raczej przedefiniować różnice pomiędzy każdą podklasą a jej nadklasą. Takie użycie dziedziczenia jest czasem nazywane ''programowaniem różnicowym''. Jest to jedna z zalet programowania zorientowanego obiektowo.