http://esiyo.net - uordek.essiyoo.each { |yazi| esiyo.net << yazi }

Ruby Modülleri (Ruby Modules)

25.12.2006, yazan Tankut ŞENTÜRK

Merhabalar,

Bugün Ruby'nin çok güçlü olduğu bir konuya değineceğim, modüller. Özellikle çok büyük uygulamalar yazarken, bazı durumlarda 'Object Oriented' tasarım yaklaşımının sınırlarını zorlamak gerekir. Günümüzdeki pek çok programlama dilinde olduğu gibi Ruby'nin tasarımcıları da 'multiple inheritance' kavramını desteklememiştir. Fakat bu özelliğin bulunmaması elbetteki bazı kısıtlamaları beraberinde getirmiştir. Bu engelleri ortandan kaldırmak için modüllerin kullanımı ve özellikleri arttırmış ve sonuçta ortaya çok güzel bir yapı ortaya çıkmıştır.

Aslında 'module' kavramı Ruby dili içerisinde pek çok alanda kullanılabilir. Bir modül 'static' bir sınıf gibi davranabileceği gibi, bir 'namespace' gibi de kullanılabilir. Tüm bu kullanım alanlarına ek olarak sınıfların genişletilmesi için kullanılır ki, bu gerçekten çok güzel bir özelliktir.

Hemen birkaç kullanım örneği verelim;
İlk kullanım örneği olarak durağan (static) bir sınıf gibi davranmasını inceleyelim;

module LogHelper
    NAME = "Default Logger"
   
    def LogHelper.create
        printf "%s LogHelper.create\n", NAME
    end
   
    def LogHelper.info
        printf "%s LogHelper.info\n", NAME
    end

    def LogHelper.error
        printf "%s LogHelper.error\n", NAME
    end
end

İkinci kullanım örneği olarak 'namespace';

module UordekWs

    ROProp = 0 # Read-only property
    RWProp = 1 # Read-write property
    WOProp = 2 # Write-only property
    class BaseGenerator
        # ...
    end
   
    class ExtendedGenerator
        # ...
    end
end

Ve son olarak 'module mixin' :) ; Bu adreste çok daha güzel bir örnek mevcut, bakmanızı tavsiye ederim. Umarım sizlere yardımcı olur. Bir sonraki yazımıza 'module mixin' başlığı ile devam edeceğiz. Şimdilik, kolay gelsin :)

Bağlı olduğu kategoriler; Bilgisayar, Ruby (Ruby on Rails)

Yaz aklındakini, çekinme :)

Lütfen: Yorumunuzun değerlendirilmesi ve yayınlanması uzun sürebilir. Yorumunuzu tekrar göndermeniz için bir neden yoktur, inanın tüm yorumları yayınlıyorum. Bazıları hariç :).