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

Usunięta treść Dodana treść
Kj (dyskusja | edycje)
m +nav
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Linia 1:
==Dziedziczenie==
Our classification of objects in everyday life is naturally hierarchical. We know that all cats are mammals, and all mammals are animals. Smaller classes inherit characteristics from the larger classes to which they belong. If all mammals breathe, then all cats breathe.
 
Klasyfikacja obiektów w codziennym życiu jest ze swojej natury hierarchiczna. Wiemy, że ''wszystkie koty są ssakami'', a ''wszystkie ssaki są zwierzętami''. Mniejsze klasy ''dziedziczą'' cechy charakterystyczne po większych, do których należą. Jeżeli wszystkie ssaki oddychają, to wszystkie koty również oddychają.
We can express this concept in ruby:
 
Możemy wyrazić tę koncepcję w Rubim:
 
<pre>
ruby> class Mammal
| def breathe
Linia 15 ⟶ 18:
| end
nil
</pre>
 
Chociaż nie określamy jak <tt>Cat</tt>(kot) powinien oddychać, to każdy kot będzie dziedziczył to zachowanie z klasy <tt>Mammal</tt>(ssak) ponieważ <tt>Cat</tt> został zdefiniowany jako podklasa klasy <tt>Mammal</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>speak</tt> nasze koty będą mogły zarówno oddychać oraz mówić.
Though we didn't specify how a Cat should breathe, every cat will inherit that behavior from the Mammal class since Cat was defined as a subclass of Mammal. (In OO terminology, the smaller class is a subclass and the larger class is a superclass.) Hence from a programmer's standpoint, cats get the ability to breathe for free; after we add a speak method, our cats can both breathe and speak.
 
<pre>
ruby> tama = Cat.new
#<Cat:0xbd80e8>
Linia 26 ⟶ 31:
Meow
nil
</pre>
 
Wystąpią takie sytuacje, że pewne 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]]).
There will be situations where certain properties of the superclass should not be inherited by a particular subclass. Though birds generally know how to fly, penguins are a flightless subclass of birds.
 
<pre>
ruby> class Bird
| def preen
Linia 44 ⟶ 51:
| end
nil
</pre>
 
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.
Rather than exhaustively define every characteristic of every new class, we need only to append or to redefine the differences between each subclass and its superclass. This use of inheritance is sometimes called differential programming. It is one of the benefits of object-oriented programming.
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Klasy|poprz=Klasy|nastart=Ruby/Redefinicja metod|nast=Redefinicja metod}}