Modüller

Ruby'de modüller sınıflara benzer özellikler gösterirler:

  • Modülün örneği yoktur.
  • Modülün alt sınıfı yoktur.
  • Modül module ... end şeklinde tanımlanır.

Aslında modülün Module sınıfı, sınıfın Class sınıfının bir süper sınıfıdır. Anladınız mı? Hayır? O zaman devam edelim.

İki tip modül kullanımı bulunur. Bir tanesi ilişkili yöntemleri ve sabitleri merkezi bir yerde toplar. Ruby'nin standart kitaplığındaki Math modülü böyle bir rol oynar:

ruby>   Math.sqrt(2)
   1.41421
ruby>   Math::PI
   3.14159

:: işleci Ruby yorumlayıcısına bir sabit için hangi modülü yükleyeceğini söyler. (örneğin Math için bir anlam ihtiva eden birşey PI için başka bir anlama gelebilir). Eğer bir yöntem ya da sabitin, :: kullanmadan doğrudan modüle başvurmasını istiyorsak bu modülü include ile ekleyebiliriz.

ruby>   include Math
   Object
ruby>   sqrt(2)
   1.41421
ruby>   PI
   3.14159

Diğer bir kullanım da karışım (mixin) olarak adlandırılır. Bazı nesneye yönelik yazılım geliştirme dili, C++ da dahil, birden fazla süper sınıftan miras almamızı sağlayan çoklu miras kavramına izin verir. Bunun gerçek dünyadaki örneği çalar saatler olabilir. Çalar saatleri hem saat sınıfına hem de alarm sınıfına sokabilirsiniz.

Ruby direkt olarak gerçek çoklu mirası desteklemez ancak karışım tekniği iyi bir alternatiftir. Modüllerin örneklenemeyeceğini ve alt sınıflanamayacağını hatırlayın, ancak bir modülü bir sınıf tanımlamasının içine include ile eklersek bu yöntemi sınıfa 'karıştırmış' ya da eklemiş oluruz.

Karışım stratejisi, ek olarak sınıfımıza hangi özellikleri istediğimizi belirtmenin başka bir yoludur. Örneğin eğer bir sınıfın çalışan bir each yöntemi varsa- bunu Enumerable standart kütüphanesine eklemek size sort ve find yöntemlerini bedava verir.

Modüllerin bu kullanımı işlevel bir çoklu miras kullanımı sağlarken- aynı zamanda basit bir ağaç yapısıyla sınıf akrabalıklarını temsil eder, böylece dil gerçekleştirimini basitleştirir (benzer bir dil gerçekleştirimi Java tasarımcıları tarafından da yapılmıştı).