Ruby/Moduły: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Szymon wro (dyskusja | edycje)
Linia 6:
* Moduł jest definiowany przez słowa kluczowe <tt>module</tt> i <tt>end</tt>.
 
Właściwie to... to klasa <tt>Module</tt> modułu jest nadklasą klasy <tt>Class</tt> klasy<ref>To ma sens :). W Rubim obiektami są nawet klasy lub moduły i posiadają one swoje klasy (Module i Class).</ref>. Rozumiesz? Nie? Idźmy dalej.
 
Istnieją dwa typowe zastosowania modułów. Jedno to zebranie powiązanych metod i stałych w jednym centralnym miejscu. Moduł <tt>Math</tt> z standardowej biblioteki Rubiego odgrywa taką rolę:
Linia 17:
</pre>
 
Operator <tt>::</tt> mówi interpreterowi Rubiego, który moduł powinien on sprawdzić by pobrać wartość zmiennej (możliwe, że jakiś moduł oprócz <tt>Math</tt> może oznaczać coś innego przezużyć <tt>PI</tt> do oznaczenia czegoś innego). Jeżeli chcemy odnieść się do metod lub stałych modułu bezpośrednio, bez używania <tt>::</tt>, możemy "zawrzeć" ten moduł używając słowa kluczowego <tt>include</tt>:
 
<pre>
Linia 28:
</pre>
 
Inne użycie modułu nazywane jest domieszkowaniem klas (''mixin''). Niektóre języki obiektowe, włączając C++ lub Eiffel, pozwalają na wielokrotne dziedziczenie, to znaczy, dziedziczenie po więcej niż jednej nadklasie. Przykładem wielokrotnego dziedziczenia zez codziennej rzeczywistości jest budzik. Możesz zarówno zaliczyć budziki do klasy zegarków jak i do klasy przedmiotów z brzęczykami.
 
Ruby celowo nie implementuje prawdziwego wielokrotnego dziedziczenia, ale domieszkowanie klas jest dobrą alternatywą. Pamiętaj, że moduły nie mogą posiadać instancji ani podklas. Ale jeśli włączymy (<tt>include</tt>) moduł w definicję klasy, jego metody będą efektywnie dodane czy też "wmieszane" w klasę.
 
Domieszkowanie klas może być rozważane jako sposóbodpowiedź pytaniana pytanie o wszelkie partykularne własności, które chcemy mieć. Na przykład, jeżeli klasa ma działającą metodę <tt>each</tt>, zmieszanie jej ze standardowym modułem <tt>Enumerable</tt> da nam dodatkowo metody <tt>sort</tt> oraz <tt>find</tt> za darmo.
 
Takie użycie modułów dostarcza podstawowej funkcjonalności wielokrotnego dziedziczenia, alepozwalając pozwala namjednocześnie, reprezentowaćby relacje pomiędzy klasami nadal były reprezentowane za pomocą prostych struktur drzewiastych, i. wW ten sposób upraszcza tosię znacząco implementacjęimplementacja języka (podobny punkt widzenia został przyjęty przez projektantów Javy).
<noinclude>
{{Przypisy}}