Ruby/Klasy
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
edytujZ 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.