Ruby/Klasy

Z Wikibooks, biblioteki wolnych podręczników.

Klasy[edytuj]

Ś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. To zupełnie naturalne, że postrzegamy świat w oparciu o 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 w 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ę Pies.

class Pies
  def szczekaj
    puts "Hau hau"
  end
end

W Rubim, definicja klasy jest regionem kodu pomiędzy słowami kluczowymi class i end. Słowo kluczowe def 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ę Pies możemy użyć jej do utworzenia psa:

burek = Pies.new

Utworzyliśmy nową instancję klasy Pies i nazwaliśmy ją burek. Metoda new jakiejkolwiek klasy tworzy nową instancję. Ponieważ burek jest psem (Pies) zgodnie z definicją naszej klasy, ma on wszelkie własności, które (jak zdecydowaliśmy) pies powinien posiadać. Ale ponieważ nasza idea "pieskości" była bardzo prosta, jest tylko jedna sztuczka, o którą możemy poprosić naszego psa burek.

burek.szczekaj #=> Hau hau

Tworzenie nowej instancji jest czasem zwane instancjonowaniem klasy. Potrzebujemy mieć jakiegoś psa nim będziemy mogli doświadczyć przyjemności rozmowy z nim. Nie możemy po prostu poprosić klasy Pies by dla nas szczekała.

Pies.szczekaj
ERR: (eval):1: undefined method `szczekaj' for Pies:class

Ma to tyle sensu, co próba zjedzenia koncepcji kanapki.

Obiekty anonimowe[edytuj]

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.

(Pies.new).szczekaj   # lub bardziej powszechnie: Pies.new.szczekaj
#=> Hau hau

"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 burek), automatyczne odśmiecanie Rubiego zdecyduje, że jest to niechciany, bezpański pies, i bezlitośnie się go pozbędzie. Tak naprawdę to nic strasznego, ponieważ, jak wiesz, możemy utworzyć wszystkie psy, które tylko chcemy.