![]() Önceki |
![]() İçindekiler |
![]() Sonraki |
| Ruby Kullanıcı Kılavuzu | Modüller |
Ruby'de modüller, sınıflarla benzer özellikler gösterirler:
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 metotları ve sabitleri merkezi bi yerde toplamaktır. Ruby'nin standart kitaplığındaki Math modülü böyle bir rol oynar:
ruby> Math.sqrt(2) 1.41421 ruby> Math::PI 3.14159 |
:: operatörü 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 metoda ya da sabite, :: kullanmadan direkt modülü referans etmek 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 mixin olarak adlandırılır. Bazı nesneye yönelik programlama dili , C++ da dahil, birden fazla süper sınıftan miras almamızı sağlayan çoklu miras (multiple inheritance) 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, gerçek çoklu mirası gerçekleştirmez, ancak mixin tekniği iyi bir alternatiftir. Modülleri örnekleyemeyeceğimizi ya da
alt sınıflayamayacağımızı unutmayın, ancak; eğer bir modülü, bir sınıf tanımlamasına include edersek
sınıfa, metotlarını efektif olarak eklemiş ya da "karıştırmış" oluruz.
Mixin, ek olarak başka nelere ihtiyaç duyduğumuzu sormanın başka bir yolu olarak düşünülebilir. Örneğin
bir çalışan bir each metodu olan bir sınıfa, standart kütüphanenin Enumerable modülünü karıştırmak
bize sort ve find metotlarını bedavadan verecektir.
Modüllerin bu kullanımı bize çoklu mirasın fonksiyonalitesini verirken, aynı zamanda basit bir ağaç yapısıyla sınıf akrabalıklarını da temsil etmemize izin verir; böylece dil gerçekleştirimini de basitleştirmiş olur (benzer bir seçim Java tasarımcıları tarafından da yapılmıştı).
![]() Önceki |
![]() İçindekiler |
![]() Sonraki |