Ruby/Klasy: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m nav |
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
||
Linia 1:
==Klasy==
Świat rzeczywisty wypełniony jest obiektami, które możemy poklasyfikować. Dla przykładu, bardzo małe dziecko mówi "hau-hau" gdy widzi psa, niezależnie od jego rasy. Zupełnie naturalnie postrzegamy świat w oparciu takie kategorie.
W terminologii programowania obiektowego kategoria obiektów takich jak "pies" nazywana jest klasą, natomiast pewien specyficzny obiekt należący do klasy nazywany jest instancją tej klasy.
Zazwyczaj, by utworzyć jakiś obiekt w Rubim lub każdym innym języku obiektowym, najpierw należy zdefiniować pewne cechy charakterystyczne klasy, a następnie utworzyć jej instancję. By zilustrować ten przykład, zdefiniujmy prostą klasę <tt>Dog</tt> (pies).
<pre>
ruby> class Dog
| def speak
Linia 11 ⟶ 14:
| end
nil
</pre>
W Rubim, definicja klasy jest regionem kodu pomiędzy słowami kluczowymi <tt>class</tt> i <tt>end</tt>. Słowo kluczowe <tt>def</tt> wewnątrz tego regionu rozpoczyna definicję ''metody'' danej klasy, która, jak omówiliśmy w poprzednim rozdziale, odpowiada pewnemu specyficznemu zachowaniu obiektów tej klasy.
Teraz, jak już zdefiniowaliśmy klasę <tt>Dog</tt> możemy użyć jej do utworzenia psa:
<pre>
ruby> pochi = Dog.new
#<Dog:0xbcb90>
</pre>
Utworzyliśmy nową instancję klasy <tt>Dog</tt> i nazwaliśmy ją <tt>pochi</tt>. Metoda <tt>new</tt> jakiejkolwiek klasy tworzy nową instancję. Ponieważ <tt>pochi</tt> jest psem (<tt>Dog</tt>) zgodnie z definicją naszej klasy, ma on wszelkie własności, o których zdecydowaliśmy, że pies powinien je posiadać. Ale ponieważ nasza idea "pieskości" była bardzo prosta, jest tylko jedna sztuczka, o którą możemy poprosić naszego naszego <tt>pochi</tt>.
<pre>
ruby> pochi.speak
Bow Wow
nil
</pre>
Tworzenie nowej instancji klasy jest czasem zwane ''instancjonowaniem'' tej klasy. Potrzebujemy mieć jakiegoś psa nim będziemy mogli doświadczyć przyjemności rozmowy z nim. Nie możemy po prostu poprosić klasy <tt>Dog</tt> by dla nas szczekała.
<pre>
ruby> Dog.speak
ERR: (eval):1: undefined method `speak' for Dog:class
</pre>
Ma to tyle sensu co ''próba zjedzenia koncepcji kanapki''.
Z drugiej strony, jeśli chcemy usłyszeć dźwięk psa bez większego zaangażowania emocjonalnego, możemy utworzyć (instancjonować) efemerycznego, tymczasowego psa, i namówić go do wydania małego odgłosu nim zniknie.
<pre>
ruby> (Dog.new).speak #
Bow Wow
nil
</pre>
"Zaraz", powiesz, "o co chodzi z tym biednym kolegą, co zniknie za chwilę?" To prawda. Jeżeli nie dbasz o to, by dać mu imię (tak jak daliśmy imię psu <tt>pochi</tt>), automatyczne odśmiecanie Rubiego zdecyduje, że jest to niechciany, bezpański pies, i bezlitośnie pozbędzie się go. Tak naprawdę to nic strasznego, ponieważ, jak wiesz, możemy utworzyć wszystkie psy, które tylko chcemy.
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Metody|poprz=Metody|nastart=Ruby/Dziedziczenie|nast=Dziedziczenie}}
|