Module ve Mixin Module nedir? 17.2 Neden Module?

Benzer belgeler
Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Mantıksal İşlemler. 7.1 true, false, nil

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

(Sözlük, dictionary, birleşik array, map)

Java Programlamada Paket Yapısı Ve Import

BİL-142 Bilgisayar Programlama II

Döngüler. Tablo 15.1: Ruby de Başlıca Döngü Yapıları

Ruby Sınıfları. 3.1 Ruby Yorumlayıcı Bir Dildir

Sunum İçeriği. Programlamaya Giriş

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Bölüm 10 Statik ve Anlık Öğeler

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

NESNEYE YÖNELİK PROGRAMLAMA

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

public static int Toplam int x, int y

HSancak Nesne Tabanlı Programlama I Ders Notları

Karmaşık Sayılar Karmaşık Sayı Yaratma

=~ Metodu 92 Karakter Sınıfları 94 sub ve gsub metotları 101 Hızlı Tekrar 102 Kontrol Noktası 103 Düello 106 Sonraki Bölümde 109

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Nesne Yönelimli Programlama

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

BİL-141 Bilgisayar Programlama I (Java)

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

YZM 2105 Nesneye Yönelik Programlama

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Göstericiler (Pointers)

Öğr. Gör. Serkan AKSU 1

NESNE TABANLI PROGRAMLAMA

BTEP243 Ders 3. class Yazım Kuralı:

Kalıtım (Inheritance)

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Nesne Tabanlı Programlama. Ders Notları

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

PROGRAMLAMAYA GİRİŞ DERS 2

C++ Dersi: Nesne Tabanlı Programlama

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

KOD PARÇACIKLARI 1 / 5

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Bölüm 9. Altprogramlar ISBN

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

HSancak Nesne Tabanlı Programlama I Ders Notları

Ruby Nedir? 1.1 Amaçlar. 1.2 Ruby nin Yapısal Sıradüzeni

Bölüm 12. Nesne yönelimli programlama desteği

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Integer Sınıfı. 9.1 Integer Sınıfına Uygulanan Başlıca Metotlar. Ruby de tamsayılar için kullanılan Fixnum ve Bignum sınıflarını üreten sınıftır.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Nesne Yönelimli Programlama

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

C++ Dersi: Nesne Tabanlı Programlama

// hataları işaret eden referans

Top level widget. 1 Kaynak kodları yazarken widgetlerin özgün (original) adlarını kullanmak zorundayız.

Fonksiyonlar -Genel Test- A

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

19 Şubat 2016 Cuma

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

C# Metotlar ve Metot Tanımlama

ALGORİTMA VE PROGRAMLAMA I

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

YZM 2105 Nesneye Yönelik Programlama

ALGORİTMA VE PROGRAMLAMA I

Pointer Kavramı. Veri Yapıları

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Java Nitelemleri. Bölüm 1

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

C#(Sharp) Programlama Dili

Fonksiyonlar (Altprogram)

C++ Dersi: Nesne Tabanlı Programlama

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Aşağıdaki programı inceleyip ekrana ne yazacağını söyleyebilir misiniz?

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Erişim konusunda iki taraf vardır:

Programlama Dillerinde Kullanılan Veri Tipleri

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Lambda İfadeleri (Lambda Expressions)

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

1 PROGRAMLAMAYA GİRİŞ

Ders Tanıtım Sunumu. Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr. Gör. Murat KEÇECİOĞLU 1

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA I

MATLAB İLE PROGRAMLAMAYA GİRİŞ. Nedim TUTKUN Elektrik Elektronik Mühendisliği Bölümü

Burada dikkat edilmesi gereken nokta, bilinmeyen veya değişkeninizi yazarken diğer bilinmeyenler ile arasına boşluk koymanız gerektiğidir.

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

BİLİNİRLİK ALANI ve ÖMÜR, KONTROL DEYİMLERİ

PASCAL PROGRAMLAMA DİLİ YAPISI

Excel Formuller ve Kullanımı

C++ Dersi: Nesne Tabanlı Programlama

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Genel Programlama II

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Transkript:

17 Module ve Mixin 17.1 Module nedir? En genel anlamıyla, modül (module), programın iyi düzenlenmesini sağlayan yapı taşlarıdır. modül, fiziksel olarak düzenlenmiş ve farklı dosyalara yazılmış Ruby kodlarının lojik olarak biraraya getirilmesini sağlar. Bir modül değişkenler, yürütülebilir kodlar, fonksiyonlar, sınıflar içerebilir. İçerdiği öğeler farklı dosyalarda, farklı fiziksel ortamlarda olabilir. Bir modül bir programa çağrılınca, o modülün içindekiler, sanki o programa yazılmış gibi davranırlar. 17.2 Neden Module? Belli bir işi yapmak için metot tanımlamayı öğrik. Belli nitelikleri ve davranışları olan nesneler yaratmak için de sınıf (class) tanımlamayı biliyoruz. Bunlar programımızın istediğimiz eylemleri yapması için yararlı öğelerdir. Ama, bir programda yazdığımız metodu ya da sınıfı başka bir programda kullanmak istersek, şu ana kadar, kes-yapıştır yöntemi dışında bir yol bilmiyoruz. Çok sayıda metot ve sınıf kullanan büyük programlarda kes-yapıştır yöntemi ideal bir yöntem değildir. Onun yerine, önceden yaratılan metotları ve sınıfları kullanmanın daha iyi bir yolu olmalıdır. Modül (module) bu kolaylığı sağlar. Sınıfları incelerken, Bir Ruby sınıfının en çok bir tane üst sınıfı olabileceğini, ama istenildiği kadar alt sınıfları olabileceğini söylemiştik. Tabii, alt sınıfların da başka alt sınıfları olabilir. Böylece atadan oğula giden sa-

216 BÖLÜM 17. MODULE VE MIXIN çaklar oluşur. Ancak, uygulamada bir sınıfta, daha önce başka yerde tanımlanmış olan metotları çağırıp kullanmak gerekir. Tabii, kullanılacak metotların tekrar sözkonusu sınıfta yeniden tanımlanması mümkündür. Ama bu yol çok sayıda tekrarı getirir ve nesne tabanlı programlamanın özüne aykırı düşer. Dolayısıyla, daha önce tanımlanmış metotları ve sabitleri tekrar tekrar tanımlamadan kullanmanın bir yolu bulunmalıdır. C++ dilinde bu sorun, bir sınıfın birden çok üst sınıfı olmasına izin verilerek aşıldı. Ancak, bir sınıfın üst sınıflarından ve alt sınıflarından oluşan atalar ve oğullar, karmaşık bir düğümler kümesi yarattı. Bu yapı, C++ programcısına yeni zorluklar getirdi. Java dili, bu sorunu aşmak için arayüzleri (interface) kullandı. Java nın bulduğu yöntem C++ dilinde karşılaşılan zorlukları kolayca aştığı için geniş kabul gördü. Ondan sonra ortaya çıkan nesne tabanlı diller, sorunu benzer yöntemlerle çözme yoluna gittiler. Ruby nin getirdiği çözüm yolu, düşünce olarak Java ve Python un izlediği yola benzer. Ama teknik ayrıntılarda büyük ayrılıklar vardır. 17.3 Module Ruby nin yukarıda açıkalanan probleme çözümü module yapısı ile verildi. Modül (module) sınıflar, metotlar ve sabitler içeren bir birimdir. Tanımı sınıf tanımına benzer. Aslında her sınıf bir module dir. Modül içinde anlık metotlar (instance methods) ve module metotları olabilir. Anlık metotlar, sınıf içindeki anlık metotlar gibi davranırlar. Onlara ancak bir nesne içinden erişilebilir. Dolayısıyla modülün bir nesne içine konulması gerekir. mixin denilen bu eylemi biraz sonra ele alacağız. Oysa module metotlarını çağırmak için modülü içeren bir nesne üretilmesi gerekmez. Modüllerin iki önemli yararı vardır: 1. Her modülün ki aduzayı vardır. Aduzaylarını bilgisayarımızın kayıt ortamında yarattığımız dizinlere benzetebiliriz. Modüller, büyük programlarda aynı adlı nesnelerin çakışmasını önler. Örneğin aynı adı alan iki metot farklı modüller içine konulursa, her biri ki modülü içindeki rolünü oynar; sonra yazılan öncekinin yerini almaz. Bir modül içindeki öğelere (sabit, metot, sınıf) ancak o modül içinden erişilebilir. [Bir Dizin içindeki dosyalar imiş gibi düşününüz] 2. Modüller başka sınıfların nesneleri içine konulabilir; yani modüller

17.3. MODULE 217 mixin uygulamasına izin verirler (Bunu biraz sonra açıklayacağımızı söylemiştik). Liste 17.1. Her metot bir modüldür. Her sınıf bir modüldür. Modüller sabitler ve metotlar içerir. Modüller aduzayı olarak kullanılır. Modül bildirimi için sözdizimi şöyledir: module Ad deyim1 deyim2.... 5 17.3.1 Module Tanımı Liste 17.2. module Kurum d e f selam puts " Merhaba " 5 Modül sabitleri sınıf sabitleri gibidir; adları büyük harfle başlar. Modül metotları da sınıf metotları gibi tanımlanır. Ama modüller iki tür metot içerebilir: Anlık metot, module metodu. Program 17.1. module RuhHali IYIMSER = " iyimserim " KOTUMSER = " kötümserim " 5 d e f selam r e t u r n " Ben #{IYIMSER}. Sen n a s ı l s ı n? " d e f RuhHali. selam 10 r e t u r n " Ben #{KOTUMSER}. Sen n a s ı l s ı n? "

218 BÖLÜM 17. MODULE VE MIXIN 15 puts ( " Sabit çağırma : RuhHali : : IYIMSER" ) puts ( RuhHali : : IYIMSER) puts ( " Module Metodu çağırma : RuhHali. g r e e t " ) puts ( RuhHali. selam ) Açıklamalar: Program 17.1, RuhHali adlı bir modül tanımlıyor. Bu modül IYIMSER ve KOTUMSER adlı iki sabit ile selam adlı anlık bir metot ve RuhHali.selam adlı bir module metodu içeriyor. Öntakısız yazılan selam metodu anlık (instance) bir metottur. Modül adını öntakı olarak alan RuhHali.selam metodu ise bir module metodudur. Bu modülü bir sınıfa dönüştürmek için ilk satırındaki module yerine class yazmak yeterlidir. Tanımları benzer olmasına karşılık, sınıf ile module arasında önemli bir fark vardır: Sınıflardan nesne üretilebilir. Alt sınıfları tanımlanabilir. Üst sınıftaki özelikler oğullara kalıtsal olarak geçer (inheritance). Oysa, modüllerin nesnesi ve alt modülleri olmaz. Son söylediklerimize bakarak, modüllerin ne işe yaradığı sorusu akla gelebilir. Sınıf gibi tanımlanıyor ama sınıfın nitelikleine bile sahip değilse, neden modül ile uğraşıyoruz? Bu sorunun yanıtını, aslında bu bölümün girişinde verdik. Ruby nin Class sınıfının önemli modülleri vardır. Math modülüne hepimiz aşinayız. Math modülünün sabitlerini ve metotlarını izinsiz kulanırız. Örneğin, PI sabiti, sqrt metodu, trigonometrik ve loharitmik fonksiyonlar bunlardandır. Ruby de Class sınıfının verdiği ikinci önemli modül Kernel adını alır. Kernel modülü şimdiye dek kullandığımız print, puts, gets gibi metotları bize sunan modüldür. Bunların metotlarını listelemek için methods metodunu kullanabilirsiniz: Kernel.methods irb etkileşimli kabuğunda yazacağınız bu komut size Kernel modülünün bütün metotlarını verecektir. Sabitler Aslında sabitler birer değişkir; tek farkları değerlerinin değişmiyor oluşudur. Çok istiyorsanız sabitin değerini elbette değiştirebilirsiniz; ama o zaman Ruby sizi uyaracaktır.

17.3. MODULE 219 Modül den Sabit Çağırma Modül den sabit çağıran sözdizimi örneği: aaa modül, ccc çağrılacak sabit ise aaa::ccc yazılır. Modül_adından sonra ard arda iki tane üst üste iki nokta (::) yı izleyen sabit_adı. Örnek 17.1 de RuhHali::IYIMSER deyimi, modülden IYIMSER adlı sabiti çağırır. Modül den Metot Çağırma Modül den module metodu çağıran sözdizimi şöyledir: aaa modül, mmm çağrılacak metot ise, aaa.mmm yazılır. Modül_adı, nokta bağlacı (.), metot_adı. Örnek 17.1 deki RuhHali.selam modül metodunu çağırmak için RuhHali.selam deyimi yeterlidir. Ama, anlık metot için, puts (selam) deyimi iş yapmayacaktır. O metodu ancak RuhHali modülünü içeren bir nesne içinden çağırabiliriz. include Bir sınıftan üretilen nesne içine bir modülü çağırmak için include (module_adı) deyimi yeterlidir. Bu deyimden sonra modül içindeki her şey nesne içine girecektir. Örnek 17.1 deki selam anlık metodunu çağırmak için puts (selam) deyimi yeterlidir.

220 BÖLÜM 17. MODULE VE MIXIN 17.4 mixin Aslında, yukarıda yaptıklarımız mixin işlemini gerçekleştirmiştir. Özetlersek, include metodu ile bir modülü bir nesne içine koymuş oluruz. O andan itibaren, modülün bütün öğeleri nesnenin olur; onlara nesne içinden adlarıyla erişilebilir. Program 17.1 ye puts (selam) deyimini ekleyiniz. irb nin 1 undefined l o c a l v a r i a b l e or method selam f o r main : Object ( NameError ) hata uyarısını verdiğini göreceksiniz. Bunun nedeni, modül içindeki anlık metoda doğrudan erişmek istememizdir. Anlık metotlara ancak bir nesne içinden erişilebilir. Öyleyse, önce bir sınıf tanımlayalım, o sınıfın bir nesnesi içine include metodu ile modülü çağıralım. Ondan sonra modülün selam adlı anlık modülüne erişebiliriz. 17.5 Aduzayları 17.6 index Aduzayı kavramı başka dillerde de kullanılır. Birbirleriyle ilgili program öğelerinin adlarını mantıksal (logic) olarak bir araya getiren bir yapıdır. Ruby de her module bir aduzayı belirler. Module öğeleri ki aralarında iletişim kurabilirler; ama yapı dışarıya kapalıdır. Sanki çevresi kalın duvarlarla çevrilidir. Dışarıdan modülün öğelerine erişim için özel yöntemler gerekir. Onları biraz sonra ele alacağız. Örnek 17.1 ile 17.2 ile tanımlanan Daire ve Kare modüllerinin içerdiği anlık alan_bul metodu ile cevre_bul module metotlarının adları aynıdır. Ama bunlar farklı aduzaylarında yer aldığı için çakışmazlar. Öncekiler dairenin alanı ve çevresini bulurken, sonrakiler karenin alan ve çevresini bulur. Aşağıda iki modül bildirimi yapılmıştır. Her iki modülde yer alan aynı adlı metotlar, birbirleriyle çakışmaz, ki modülleri içinde varlıklarını ve işlevlerini sürdürürler Örnek 17.1. #! / usr / bin /ruby

17.6. INDEX 221 module Daire 4 PI = 3. 141592654 R = 3 d e f alan_bul alan = PI (R 2) 9 d e f Daire. cevre_bul cevre = 2 PI R 14 puts ( " Dairenin y a r ı ç a p ı n ı ç a ğ ı r : Daire : : R" ) puts ( Daire : : R) puts ( " Dairenin ç e v r e s i n i bulan module metodunu ç a ğ ı r : Daire. cevre \ _bul " ) 19 puts Daire. cevre_bul 1 / 3 18. 849555924 / Örnek 17.2. 1 #! / usr / bin /ruby module Kare KENAR = 3 6 d e f alan_bul alan = KENAR KENAR d e f Kare. cevre_bul 11 cevre = 4 KENAR puts ( " Karenin b i r kenarı : Kare : :KENAR" ) 16 puts ( Kare : :KENAR) puts ( " Karenin ç e v r e s i n i bulan module metodunu ç a ğ ı r : Kare. cevre \ _bul " ) puts Kare. cevre_bul 1 / 3 12 /

222 BÖLÜM 17. MODULE VE MIXIN Module Çağırma : include 17.7 include Bir modülü bir sınıf içine çağırmak için include anahtar sözcüğünü kullanırız. Çağrılan modülün her şeyi sınıfın öğesi olur. Liste 17.3. 1 c l a s s Personel i n c l u d e Kurum selma = Personel. new 6 selma. selam 17.7.1 Modül den Nesne Üretilemez Program 17.2 ile tanımlanan Kurum modülünden new operatörü ile bir nesne yaratmayı deneyelim. Derleyici aşağıdaki uyarıyı vererektir. uyarı, modulün new metodunun olmadığını; dolayısıyla onun bir nesnesinin yaratılamayacağını söylüyor. Kurum.new #=> undefined method new for Kurum:Module 17.8 Sınıf ile Modül Karşılaştırması 17.9 Çağrı Yöntemleri load, require, include, ext 17.10 load 17.11 require 17.12 include 17.13 ext Hepsi aynı işleve sahipmiş gibi görünüyor.

17.13. EXTEND 223 Tablo 17.1: Sınıf ile Module Karşılaştırması sınıf (class) module üretim (instantiation) üretilebilir üretilemez kullanım nesne yaratılır mixin, aduzayı üst sınıf module object öğeleri metotlar, sabitler, değişkenler metotlar, sabitler, sınıflar metotlar sınıf metodu, anlık metot module metodu, anlık metot kalıtım eylemleri kalıtsal alır/verir kalıtım yok içerme içerilemez sınıfta ve başka modülde include metodu ile içerilebilir genişleme ext metodu ile genişleyemez; kalıtım ile genişleyebilir üretilen modül genişleyebilir: singleton load : Bir dosya içeriğini yükler. load deneme.rb Aynı dosya birden çok kez yüklenebilir (load). Sonuncu etkin olur. require : Bir dosyadan seçilenleri alır require deneme Birden çok kez seçim yapılabilir. İlk yapılan seçim etkindir. include : Modülü, çağıran sınıftan üretilen nesne içine alır ve nesnenin öğeleri gibi kullanılmasını sağlar. include deneme ext : Sınıfın metotlarını ekleyerek onu çağıran modülü genişletir. ext deneme Sınıf, modüldeki metoda sahipse, modül sonradan çağrılmış olsa bile sınıfın metodu etkin olur. Başka bir deyişle, sınıf daha baskındır. Çağrılan iki modülde aynı adlı metot varsa, son çağrılandaki etkin olur, önce çağrılan modüldeki ihmal edilir. Bir modül iki kez çağrılırsa, ilk çağrı etkin olur, sonraki çağrı yok sayılır.

224 BÖLÜM 17. MODULE VE MIXIN 17.14 Uygulamalar Liste 17.4. c l a s s Soyut i n c l u d e A i n c l u d e B 4 i n c l u d e A # => e t k i s i z d i r ; i l k ç a ğ r ı g e ç e r l i d i r Liste 17.5. module A d e f a1 puts a1 ç a ğ r ı l d ı 5 module B d e f b1 puts b1 ç a ğ r ı l d ı 10 module C d e f c1 15 puts c1 ç a ğ r ı l d ı c l a s s Test 20 i n c l u d e A i n c l u d e B i n c l u d e C d e f d i s p l a y 25 puts " Modüller included i l e ç a ğ r ı l d ı " o b j e c t=test. new 30 o b j e c t. d i s p l a y o b j e c t. a1 o b j e c t. b1 o b j e c t. c1 Liste 17.6. Array sınıfının local_variables metodu, yerel değişkenleri listeler: # encoding UTF 8 2 module ModuleM m1, m2 = 4

17.14. UYGULAMALAR 225 7 puts " module i ç i n d e " puts l o c a l _ v a r i a b l e s d e f method1 v, w = 3 12 puts " method i ç i n d e " puts l o c a l _ v a r i a b l e s 17 c l a s s Some x, y = 2 puts " c l a s s i ç i n d e " puts l o c a l _ v a r i a b l e s 22 method1 t1, t2 = 7 27 puts " I n s i d e t o p l e v e l " puts l o c a l _ v a r i a b l e s Program 17.2. module Meyveler 2 @@meyve = k i r a z d e f s e l f. s e t ( x ) @@meyve = x 7 d e f s e l f. get @@meyve 12 p T. get #=> k i r a z T. s e t ( elma ) p T : : get #=> elma Program 17.3, bir module içindeki anlık değişkene bir sınıf içinden erişimi gösteriyor. Program 17.3. module Kimlik a t t r _ a c c e s s o r : kimlik_no d e f i n i t i a l i z e 5 @kimlik_no = 123

226 BÖLÜM 17. MODULE VE MIXIN c l a s s Personel 10 i n c l u d e Kimlik d e f i n i t i a l i z e s u p e r d e f kimlik_no_yaz 15 puts @kimlik_no m = Personel. new 20 m. kimlik_no_yaz #=> 123 Program 17.4. # encoding UTF 8 3 module Kediler say = 2 c l a s s Kedi d e f ses_ver 8 puts " Miyauuu... " d e f yemek puts "... " 13 d e f kuyruk_oynat puts " s i n i r l e n i n c e kuyruğumu oynatırım! " 18 d e f pençe_at puts " Olmaz, canın yanar! " 23 x = 5 t e k i r = Kediler : : Kedi. new t e k i r. kuyruk_oynat i f x >= Kediler : : say Program 17.5. #encoding : utf 8 3 module Hafta ILK_GUN = " Pazar " d e f Hafta. ayda_hafta puts " Bir ayda dört hafta var "

17.14. UYGULAMALAR 227 8 d e f Hafta. senede_ hafta puts " Bir y ı l d a 52 hafta var " 13 c l a s s On_sene i n c l u d e Hafta s e n e _ s a y i s i =10 18 d e f ay_sayisi puts Hafta : : ILK_GUN s a y i =10 12 puts s a y i 23 d1=on_sene. new puts Hafta : : ILK_GUN Hafta. ayda_hafta Hafta. senede_hafta 28 d1. ay_sayisi