Ruby jak każdy język obiektowy opiera się na dziedziczeniu. Ze względu na ograniczenie, w postaci dziedziczenia na raz tylko po jednej klasie twórcy języka zaproponowali mechanizm mixinów – dołączania modułów do klas. Pozwala to programistom na podążanie za dobrymi praktykami stosowania kompozycji zamiast dziedziczenia.
Jednym ze sposobów pozwalających na domieszkę modułu do klasy jest dyrektywa EXTEND.
Dyrektywa ta sprawia, że moduł zostaje włączony w łańcuch dziedziczenia obiektów jako singleton. Oznacza to, że metody zawarte w module dostępne są jako metody statyczne klasy.
Adapter Database
rozszerzając się o moduł DatabaseHelper
będzie mógł wyczyścić bazę danych bez konieczności tworzenia instancji adaptera używając clear_database
jako metody statycznej.