14 Şubat 2017 Salı

Ruby'de Modüller


#Ruby'de bir class birden fazla class'tan kalıtım alamaz. Yani şöyle bir kullanım yoktur:

class ucabilirHayvanlar < hayvanlar
end

class ucabilirHayvanlar < canlilar
end

#Böylesi bir işlemi ancak -modüller- ile başarabiliriz. Ruby'de modüllerin bu şekilde kullanımına "mixins" denir. Örneğin şöyle bir kullanım mümkündür:

class Laptop < makine
    include klavye
    include mouse
    include monitor
end

#Bu örnekteki:
#"include" ettiğimiz öğelerin herbiri "class" tır.
#Kalıtım işlemindeki "makine" bir "class" tır.
#Bir örnek daha yapalım.

class insan
end

class hayvan
end

class bocek
end

class canli

#Yukarıda görüldüğü üzere insan, hayvan ve bocek class'larını tanımladık. Şimdi modüllerin kullanımını görelim.
#Bu örnekte, tüm class'larımızı "canli" class'ına dahil etmemiz mümkündür. Çünkü insan, hayvan ve böcek'ten her biri birer canlıdır.
# Fakat insanları "memeli hayvanlar" gibi bir gruba dahil edebilirken, böcekleri bu gruba dahil etmemeliyiz. Bu gibi durumlarda modülleri kullanabiliriz.

module Memeli
    def memeli
        puts "memeliyim"
    end
end

module Penceli
    def pence
        puts "penceliyim"
    end
end

module AnalitikZeka
    def analitik
        puts "analitik zekaya sahibim"
    end
end

#pençeliler modülünü hayvanlar için kullanabiliriz.
# Şimdi class'lara modülleri enjekte edelim.

class Insan
    include Memeli
    include AnalitikZeka
end

class Hayvan
    include Penceli
end

class Bocek
end
   
obje = Insan.new
obje.analitik

#Modüllerden yeni objeler oluşturulamaz. Yeni objeler class'lardan oluşturulabilir. Modüller sadece gruplama işlemleri için kullanılır.
Yeni bir obje Instantiate etmeye çalışmak hata verecektir.

Hiç yorum yok:

Yorum Gönder