Ruby/Klasy: 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:
==Klasy==
The real world is filled by objects, and we can classify them. For example, a very small child is likely to say "bow-wow" when seeing a dog, regardless of the breed; we naturally see the world in terms of these categories.
 
Ś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.
In OO programming terminology, a category of objects like "dog" is called a class, and some specific object belonging to a class is called an instance of that class.
 
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.
Generally, to make an object in ruby or any other OO language, first one defines the characteristics of a class, then creates an instance. To illustrate the process, let's first define a simple Dog class.
 
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.
In ruby, a class definition is a region of code between the keywords class and end. A def inside this region begins the definition of a method of the class, which as we discussed in the previous chapter, corresponds to some specific behavior for objects of that class.
 
Teraz, jak już zdefiniowaliśmy klasę <tt>Dog</tt> możemy użyć jej do utworzenia psa:
Now that we have defined a Dog class, we can use it to make a dog:
 
<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>.
We have made a new instance of the class Dog, and have given it the name pochi. The new method of any class makes a new instance. Because pochi is a Dog according to our class definition, it has whatever properties we decided a Dog should have. Since our idea of Dog-ness was very simple, there is just one trick we can ask pochi to do.
 
<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.
Making a new instance of a class is sometimes called instantiating that class. We need to have a dog before we can experience the pleasure of its conversation; we can't merely ask the Dog class to bark for us.
 
<pre>
ruby> Dog.speak
ERR: (eval):1: undefined method `speak' for Dog:class
</pre>
 
Ma to tyle sensu co ''próba zjedzenia koncepcji kanapki''.
It makes no more sense than trying to eat the concept of a sandwich.
 
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.
On the other hand, if we want to hear the sound of a dog without getting emotionally attached, we can create (instantiate) an ephemeral, temporary dog, and coax a little noise out of it before it disappears.
 
<pre>
ruby> (Dog.new).speak # orlub morebardziej commonly,powszechnie: 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.
"Wait," you say, "what's all this about the poor fellow disappearing afterwards?" It's true: if we don't bother to give it a name (as we did for pochi), ruby's automatic garbage collection decides it is an unwanted stray dog, and mercilessly disposes of it. Really it's okay, you know, because we can make all the dogs we want.
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Metody|poprz=Metody|nastart=Ruby/Dziedziczenie|nast=Dziedziczenie}}