ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER METOTLAR

Benzer belgeler
NESNEYE YÖNELİK PROGRAMLAMA

HSancak Nesne Tabanlı Programlama I Ders Notları

Sunum İçeriği. Programlamaya Giriş

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

Yrd. Doç. Dr. Caner ÖZCAN

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER SINIFLAR

C# Metotlar ve Metot Tanımlama

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

Yrd. Doç. Dr. Caner ÖZCAN

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

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

HSancak Nesne Tabanlı Programlama I Ders Notları

YZM 2105 Nesneye Yönelik Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Ders 8: Metotlar. barisgokce.com

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Pointer Kavramı. Veri Yapıları

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

4. Bölüm Programlamaya Giriş

Göstericiler (Pointers)

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

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

ÜNİTE İÇİNDEKİLER. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA HEDEFLER OPERATÖRLER

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

11- FONKSİYONLAR (FUNCTIONS)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Özyineleme (Recursion)

Lambda İfadeleri (Lambda Expressions)

Operator Aşırı Yükleme (Operator OverLoading)

public static int Toplam int x, int y

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

ELN1001 BİLGİSAYAR PROGRAMLAMA I

C#(Sharp) Programlama Dili

Bölüm 9. Altprogramlar ISBN

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

ÜNİTE İÇİNDEKİLER HEDEFLER MATEMATİKSEL METOTLAR. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA. (Math Sınıfı ve Metotları)

HSancak Nesne Tabanlı Programlama I Ders Notları

ÜNİTE NESNE TABANLI PROGRAMLAMA I İÇİNDEKİLER. Okt. Mustafa AKBUĞA HEDEFLER DOSYA VE KLASÖR İŞLEMLERİ

YZM 2105 Nesneye Yönelik Programlama

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

NESNEYE YÖNELİK PROGRAMLAMA

BTEP243 Ders 3. class Yazım Kuralı:

NESNEYE YÖNELİK PROGRAMLAMA

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA II

BİL-142 Bilgisayar Programlama II

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

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

BİL-141 Bilgisayar Programlama I (Java)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

C Programlama Dilininin Basit Yapıları

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

ALGORİTMA VE PROGRAMLAMA I

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

1 PROGRAMLAMAYA GİRİŞ

C++ Dersi: Nesne Tabanlı Programlama

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

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

Fonksiyonlar (Altprogram)

Nesneye Yönelik Programlama (OOP) 7.Hafta

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

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

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

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

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Sınav tarihi : Süre : 60 dak.

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER KARAR KONTROL DEYİMLERİ

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

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

Öğr. Gör. Serkan AKSU 1

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Nesneye Dayalı Programlama

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

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

7- Turbo Pascal Programlamada Alt Programlar (Procedure)

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

Diziler (Arrays) Çok Boyutlu Diziler

Nesne Yönelimli Programlama

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

Hafta 13 Fonksiyonlar

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

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Yazılım Kodlama ve İ simlendirme Standartları v1.0

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

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

C++ Dersi: Nesne Tabanlı Programlama

Nesneye Dayalı Programlama Laboratuvarı

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

8. İŞARETCİLER (POINTERS)

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi YAYIN ALICILARI. BLM401 Dr.Refik SAMET

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER DEĞİŞKENLER VE VERİ TİPLERİ

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Transkript:

METOTLAR İÇİNDEKİLER Metotlar Metot Oluşturma ve Kullanma Metot Parametresi Olarak Diziler Değer ve Referans Parametreleri Metotların Aşırı Yüklenmesi Kendini Çağırabilen Metotlar NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA HEDEFLER Bu üniteyi çalıştıktan sonra; Metot tanımlayıp programlar içerisinde kullanabilecek, Değer ve Referans Parametreleri arasındaki farkları öğrenip uygulayabilecek, Kendini çağırabilen metotları yazabileceksiniz. ÜNİTE 9

GİRİŞ Bilgisayar dillerinin öğretilmesinde, fonksiyonlar ve metotlar önemli bir ağırlığa sahiptir. Bunun sebebi ise sürekli tekrar edilmesi gereken kodların bir kod bloğuna yazılarak, her defasında aynı kodları yazmak yerine bu kod bloğunun çağrılarak çalıştırılmasıdır. Bu sayede hem hata yapma ihtimali en aza indirilir hem de zamandan kazanılarak program yapısı küçültülmüş olur. Şu ana kadar yapılan örneklerde genelde sistem tarafından hazırlanmış C # dilindeki ReadLine(), WriteLine() vb. gibi hazır metotlar kullanılmıştır.bu ünitede ise özel metodlar tanımlanarak, programların içerisinde nasıl kullanılacağı anlatılacaktır. METOTLAR Metotlar tek başlarına çalıştırılabilen yapılar değildir. Metot, sadece metodu çağıran ana program için faydalı işler yapar. Nesneye yönelik programlama dillerinde genellikle fonksiyonlar metot olarak isimlendirilir. Her çalışan C# programında bir ana metot (Main) mevcuttur. Program çalışmaya ilk olarak bu metotla başlar. Tüm kodların bu (Main) metodu içine yazılması da büyük programlar için iyi bir programcılık sayılmaz. Çünkü gerçek hayatta olduğu gibi programlarda bir bütün olarak ele alınmamalıdır. Küçük parçalara ayrılarak, her parça için uygun birer metot yazılmalıdır. Programın herhangi bir yerinde kullanmak için belirli bir işi yerine getirmek amacıyla tasarlanmış alt programlara metot denir. C# ta bildirilen bütün metotlar mutlaka bir sınıfın içinde olmalıdır. Bir sınıfın üyesi olmayan metotlar bildirilemez. Burada bahsedilen Sınıflarla ilgili bilgiler bir sonraki ünitede anlatılacaktır. Metot Oluşturma ve Kullanma: Metotları tanımlarken kullanılan bildirim şu şekildedir: [ erişim belirteçleri ] < dönüş değeri > metot ismi ( parametre listesi ) Metodun iş yapması için kendisini çağıran metottan aldığı bilgilere parametre (argüman), kendisini çağıran fonksiyona döndürdüğü bilgiye ise geri dönüş değeri (return value) denir. metot gövdesi; [erişim belirteçleri]: Erişim belirteçleri (Private, Public, Protected, Protected Internal),metoda nerelerden erişilebileceğini belirleyen ayarlardır. Belirtilmediği durumlarda private olarak kabul edilir. Yani sadece tanımlandığı sınıf içinde kullanılabilen bir metot hâline gelir. <Geri dönüş değeri>: Tanımlanan metodun, çağıran fonksiyona gönderdiği veririn (int, float, string, bool..vb.) türüdür. Atatürk Üniversitesi Açıköğretim Fakültesi 2

Metot ismi: Her bir metot tanımlanırken metota mutlaka bir isim verilir. Metot çağrılırken verilen bu isim kullanılarak çağırma işlemi yapılabilir. (Parametre listesi): Parametreler ise metodun çalışırken ihtiyaç duyduğu çağıran fonksiyondan gönderilen bilgileridir. Örnek tanım şekli: using System; class Program int MetotAdi(int a, int b) return a + b; Bu metot, iki int türünden girdi değerini alır ve bu girdilerin toplamını int türünden tutar. Ancak bu metot statik olmadığından programımız içinde kullanabilmemiz için bu metodun içinde bulunduğu sınıf türünden bir nesne yaratıp. operatörüyle bu nesne üzerinden metodumuza erişmeliyiz. Yukarıda verilen tanıma uygun kullanım Şekil 9.1 de örnek program_1 de içerisindeki kodla gösterilmiştir. Örnek program_1: Metotlar, statik ve dinamik olmak üzere iki faklı şekilde bellekte yer kaplar. Şekil 9.1. Dinamik olarak tanımlanmış metotların kullanımını gösteren C# kodu Atatürk Üniversitesi Açıköğretim Fakültesi 3

Şekil 9.2. Örnek program_1 in ekran görüntüsü Statik olarak tanımlanan metotlara erişmek için metodun içinde bulunduğu sınıf türünden bir nesne yaratmaya gerek yoktur. Statik olarak tanımlanan metotlara sadece metodun adını yazarak erişilebilir. Şekil 9.2 deki ekran görüntüsüyle aynı sonucu verecek şekilde metot tanımı Şekil 9.3 te örnek program_2 de gösterilmiştir. Örnek program_2: Bütün programlarda önce Main metodu çalışır. Diğer metotlar Main metodunun içinden çağrılmadıkça çalışmaz. Şekil 9.3. Statik olarak tanımlanmış metotların kullanımını gösteren C# kodu Şekil 9.4. Örnek program_2 nin ekran görüntüsü Şekil 9.3 içerisindeki kırmızı okla işaretlenen Topla metodu tanımında static anahtar kelimesi kullanılmıştır. Bu kelimenin kullanılması ile ikinci okla işaretlenen yerde metodun sadece ismi ve parametreleri verilerek toplama işlemi Atatürk Üniversitesi Açıköğretim Fakültesi 4

yaptırılmıştır. Şekil 9.2 ve Şekil 9.4 teki ekran çıktılarına dikkat edilirse tanımlanan metotların aynı sonuç ürettikleri görülecektir. Örnek program_3: Metodun oluşturulmasında tanım satırının başına public anahtar sözcüğü konmuş ise bu metoda, her sınıftan erişilmesinin önünü açacaktır. Bu durum Şekil 9.6 da kırmızı okla gösterilmiştir. Eğer public sözcüğü yazılmamış olsaydı bu metoda sadece Metotlar sınıfının dışından erişilemezdi. Erişim belirleyiciler Sınıflar ve Nesneler ünitesinde daha ayrıntılı olarak anlatılacaktır. Bütün değer tutan metotlar bir değermiş gibi kullanılabilir, ancak değişkenmiş gibi kullanılamaz. Şekil 9.6. Public olarak tanımlanmış metotların kullanımını gösteren C# kodu. Herhangi bir değer tutmayan (WriteLine gibi) metotlar da void anahtar sözcüğüyle kullanılır. void anahtar sözcüğünün kullanıldığı yerlerde return ve geri dönüş değeri bulunmaz. Daha önceki örneklerde sıkça kullanıdığımız WriteLine metodunun yerine geçecek Yaz metodu aşağıdaki örnek Program_4 deki gibi hazırlanabilir. Örnek program_4: Şekil 9.7. Yaz metodunun hazırlanmasını gösteren C# kodu Atatürk Üniversitesi Açıköğretim Fakültesi 5

Şekil 9.8. Örnek program_4 nin ekran görüntüsü Şekil 9.7 ye dikkat edilirse Yaz metodunun tanım satırında public anahtar kelimesi kullanılmıştır. Bu sebeple bu metot başka sınıflar içinden WriteLine gibi rahatça çağrılabilir. Ayrıca statik olarak tanımlandığından bu metot çağrılırken sadece metot isminin yazılması yeterli olacaktır. Metot tanımında void anahtar sözcüğü kullanılmışsa, return ve geri dönüş değerine yer verilmez. Örnek program_4 ün çalıştırılması sonucu Şekil 9.8 de gösterildiği gibi parametre olarak verilen değerlere uygun olarak Nesne Tabanlı Programlama ifadesi üç kez yazılmıştır. Metotların doğru tanımlanması için aşağıdaki hususlara dikkat edilmesi gerekir: Metotları kullanırken parametrelerini doğru sayıda, doğru sırada ve doğru türde vermeliyiz. Değer tutan metotlarda return satırıyla belirtilen ifade, metodu yazarken verilen türle uyumlu olmalıdır. Değer tutmayan (void ile belirtilmiş) metotlarda return komutu herhangi bir ifadeyle kullanılmaz. Değer tutmayan metotların bir değermiş gibi kullanılması mümkün değildir. Metotlar değer tutmayabileceği gibi ayrıca parametre de almayabilirler. Metotlar içinde tanımlanan değişkenler programın başından sonuna kadar durmaz. Bu değişkenler, programın akışı metoda geldiğinde tanımlanır. Metodun işlevi bittiğinde ise bellekten silinir. Metod Parametresi Olarak Diziler Diziler C# ta ayrı bir tür olarak ele alındığı için Dizi kavramı, tanımlama ve dizi elemanları üzerindeki işlemler gibi konular diziler ve koleksiyonlar ünitesinde ayrıntılı olarak anlatılacaktır. Bu bölümde sadece Dizilerin metod içerisinde kullanılacağına değinilecektir. Atatürk Üniversitesi Açıköğretim Fakültesi 6

[ erişim belirteçleri ] < dönüş değeri > metot ismi ( tür[] diziadı ) Metot gövdesi; Önceden verilen metot tanımında parametre kısmına dizi elemanın türü ve adı yazılarak diziler metot içinde kullanabilir. Bu durum örnek program_5 te gösterilmiştir. Örnek program_5: Şekil 9.9. Metot içerisinde dizilerin kullanılmasını gösteren C# kodu. Değer türleri stack hafıza bölgesinde tutulur. Başvuru türleri (nesneler) ise heap üzerinde oluşturulur. Şekil 9.9 da verilen C# kodlarının, kırmızı okla işaretlenen program satırında, yenidizi adında int veri türünde ve (0,1,2,3,4) üye değerine sahip 5 elemanlı bir dizi tanımlanmıştır ve Yaz(yeniDizi) program koduyla da Yaz metodu, almış olduğu dizinin bütün elemanlarını Şekil 9.10 da gösterildiği gibi ekrana yazdırmaktadır. Şekil 9.10. Örnek program_5 nin ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 7

Değer Ve Referans Parametreleri Bir metot içerisine parametre olarak aktarılan dizinin, metot içindeki bir elemanının değiştirilmesi esas diziyi de etkiler. Çünkü bir metoda parametre olarak bir dizi verildiğinde derleyici metoda dizinin bellekteki adresini verir; metot o adresteki verilerle çalışır. Bu yüzden metot içerisinde verilen dizi değerine referans tipli parametreler adı verilir. Bir metoda parametre olarak bir değişken değeri verildiğinde ise metot için değişkenin bellekteki adresi artık önemli değildir, metot için önemli olan değişkenin değeridir. Metot, değişkeni kullanabilmek için geçici bir bellek bölgesi yaratır ve parametre olarak aldığı değişkenin değerini bu geçici bellek bölgesine kopyalar ve o geçici bellek bölgesiyle çalışır. Metoda parametre olarak aktarılan değişkenin metot içinde değiştirilmesi esas değişkeni etkilemez. Metottan çıkıldığında da o geçici bellek bölgesi de silinir. Bu yüzden metot içerisinde verilen değişken değerileri için değer tipli parametreler denir. Ancak bazı durumlarda değer tipli parametreler de referans tipli olarak kullanılmak istenebilir. Bu durum özellikle metot dışına birden fazla hesaplanmış değer çıkarılacağı zamanlarda oldukça faydalıdır. Bunun için Virtual C#, programlama dilinde out ve ref anahtar sözcükleri kullanılır. Bilgisayarda bellek bölgeleri: Başlangıç değeri bulunan değer tiplerindeki değişkenlerin değerleri metotlara ref anahtar sözcüğü ile aktarılırken, ilk değeri olmayan değişkenlerin değeri ise out anahtar sözcüğü ile aktarılır. Bilgisayarlar genelde belleklerinde, uygulama programlarını ve bu programların kullandığı veriyi tutarlar. Değer ve referans türleri arasındaki farkları anlamak için, bellekte verinin nasıl düzenlendiğini anlamak yararlı olacaktır. C#, System.IO kütüphanesini ve dosya metotlarını kullanmadan harici disklere erişemez. İşletim sistemleri ve programlama dilleri verileri tutmak için sistemde kullanılan RAM belleği, her biri ayrı ayrı yönetilen iki büyük parçaya ayırır. Belleğin iki büyük parçasına stack ve heap adı verilir. Bu bellek bölgeleri iki farklı amaca hizmet eder: Bir yöntemi çağırdığınızda, o yöntemin değerleri ve yerel değişkenleri için gerekli bellek her zaman stack dan alınır. Yöntem bittiğinde değerler ve yerel değişkenler için alınan bellek, otomatik olarak stack a geri verilir. new anahtar sözcüğünü kullanarak bir nesne oluşturduğunuzda, nesneyi oluşturmak için gerekli bellek her zaman heap ten alınır. Başvuru değişkenlerini kullanarak birkaç yerden aynı nesneye başvurulabilmektedir. Bir nesneye son başvuru geçersiz olduğunda, nesne tarafından kullanılan bellek de, yeniden kullanıma uygun hâle gelir. Atatürk Üniversitesi Açıköğretim Fakültesi 8

out ve ref Anahtar sözcükleri: out anahtar sözcüğü, metotlarda değer tipli parametrelerin referans tipli olarak verilmesi amacıyla kullanılır. Bu şekilde tanımlanmış parametrelerde ilk değer verme zorunluluğu yoktur. İlk değerler istenirse metot içerisinde verilebilir. ref anahtar sözcüğü ile tanımlanan parametreler de değer tipini aynı out gibi referans tipi olarak aktarmak amacıyla kullanılır. Fakat değer tiplerini referans olarak bu sözcükle aktarırken ilk değer verme zorunluluğu vardır. Örnek program_6: Şekil 9.11. Metot içerisinde out anahtar kelimesinin kullanılmasını gösteren C# kodu Şekil 9.12. Örnek program_6 nın ekran görüntüsü Şekil 9.11 deki örnek program_6 incelendiğinde Main ana programında int sayı adında bir değişken tanımlanmış ve ilk değeri olmadan bu hâliyle Değiştir metoduna gönderilmiştir. Değiştir metodu içinde sayı değişkeninin değeri 3 olarak belirlenerek Yaz metodu çalıştılmış ve ekrana Şekil 9.12 de görülen 3 değeri Atatürk Üniversitesi Açıköğretim Fakültesi 9

yazdırılmıştır. return anahtar kelimesi kullanılmadan metot dışına bu şekilde bir değişken değerin referans değer gibi alınabildiği gösterilmiştir. Örnek program_7: Şekil 9.13. metot içerisinde ref anahtar kelimesinin kullanılmasını gösteren C# kodu Şekil 9.14. Örnek program_7 nin ekran görüntüsü Şekil 9.12 deki örnek program_7 incelendiğinde Main ana programında int sayı adında bir değişken tanımlanmış ve ilk değeri 3 olarak verilmiştir. ref anahtar kelimesi ile Değiştir metoduna gönderilmiştir. Değiştir metodu içinde sayı değişkeninin değeri 9 olarak belirlenerek Yaz metodu çalıştılmış ve ekrana Şekil 9.12 de görülen 9 değeri yazdırılmıştır. Başlangıçta değeri 3 olan bir değişken ref anahtar kelimesiyle yardımıyla metot içerisine gönderilmiş ve değeri değiştirilerek return anahtar kelimesi kullanılmadan metot dışına alınabilmiştir. Atatürk Üniversitesi Açıköğretim Fakültesi 10

Metotların Aşırı Yüklenmesi Çalışma zamanında hangi metodun çağrıldığını belirleyebilmek için metodun imzasına (method signature) bakılır. C# ta parametre sayısı veya parametrelerin türleri farklı olmak şartıyla aynı isimli birden fazla metot oluşturulabilir. Bu şekilde tanımlanan metotlara metotların aşırı yüklenmesi denir. C#, bir metot çağrıldığında ve çağrılanla aynı isimli birden fazla metot bulunduğunda metodun çağrılış biçimine bakar. Yani ana programdaki metoda girilen parametrelerle yaratılmış olan metotların parametrelerini kıyaslar. Önce parametre sayısına bakar. Eğer aynı isimli ve aynı sayıda parametreli birden fazla metot varsa bu sefer parametre türlerinde tam uyumluluk arar, uyumlu bulduğu metodu çalıştırarak sonucu ekrana yazdırır. Parametre türlerinin tam uyumlu olduğu bir metot bulamazsa program hata verir. Örnek program_8: Şekil 9.15. Metotların aşırı yüklenmesini gösteren C# kodu. Şekil 9.16. Örnek program_8 in ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 11

Bir metodun imzası metodun adı, parametrelerin sayısı ve türleri ile ilgilidir. Metodun geri dönüş değerleri imzasına dâhil değildir. Şekil 9.15 te kodları gösterilen örnek program_8 de MetodA ismindeki üç metot da aynı sayıda parametre almıştır. Bu durumda parametrelerin türlerine bakılır. Ana programdaki MetotA("Atatürk Üniversitesi","Açıköğretim Fakültesi"); satırıyla üçüncü metot ilk olarak çağrılır. MetotA(6,9); metot çağrımının parametre türlerinin tam uyumlu olduğu metot birinci metottur, o yüzden birinci metot ikinci olarak çağrılır. Eğer birinci metot oluşturulmamış olsaydı ikinci metot çağrılacaktı. Son olarak MetotA(1.11f,99.99f); satırıyla da ikinci metot çağrılacaktır. Bu durum Şekil 9.16 da program görüntüsünde gösterilmiştir. Kendini Çağırabilen Metotlar Kendi kendini çağıran metotlara özyenileyici (recursive) metotlar denilir. Bu metotlarda, çağrımı sonlandıran bir kontrol yapısı metot içerisine mutlaka yerleştirilmelidir. Şekil 9.17 de özyenileyici metot örneği yer almaktadır. Örnek program_8 in çalışmasıyla Şekil 9.19 daki ekran çıktısı görülecektir. Örnek program_8: Şekil 9.17. Metotların aşırı yüklenmesini gösteren C# kodu Şekil 9.17 deki gösterilen kod incelendiğinde Cevir metoduna parametre verilen Onluk sayı, metod içinde kendi kendini tekrarlayarak ikilik sayı sistemine çevrilmektdir. Metod içinde kırmızı okla işaretlenen kod satırı metot için kotrol yapısı oluşturmaktadır. Şekil 9.18. Örnek program_8 in ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 12

Main metodu Çalışan her programda mutlaka bir Main metodunun bulunması gerekir. Bütün programlarda ilk önce Main metodu çalıştırılır. Diğer metotlar Main metodunun içinden çağrılmadıkça çalışmaz. Bu özellikler dışında Main metodunun diğer metotlardan başka hiçbir farkı yoktur. Ancak şimdiye kadar Main metodunu yalnızca static void Main() şeklinde parametresiz kullandık. Ancak Main metodunun int türünden (static int Main( ) ) bir geri dönüş değeri de döndürmesi sağlanabilir. Bu değer genellikle işletim sistemine programın çalışması hakkında bilgi vermek amacıyla kullanılır. Örneğin Main metodu 0 değerini döndürürse işletim sistemi programın düzgün şekilde sonlandırıldığını, 1 değerini döndürürse de hatalı sonlandırıldığını anlayabilmektedir. Ayrıca Main metodu parametre de alabilir. Komut satırından çalıştırıldığında verilen parametreleri bir string dizisi içine alarak da işleyebilmektedir. Örnek program_9: Şekil 9.19. Metotların aşırı yüklenmesini gösteren C# kodu Şekil 9.20. Örnek program_8 in ekran görüntüsü Şekil 9.21. Örnek program_8 in ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 13

Şekil 9.22. Örnek program_8 in ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 14

Özet Nesne tabanlı programlamada sürekli tekrar edilmesi gereken olan kodlar bir kod bloğuna yazılarak, her defasında aynı kodları yazmak yerine bu kod bloğu çağrılarak çalıştırılır.bu şekilde yapılandırılmış kod bloklarına fonksiyon ya da metot adı verilir. Metotlar sayesinde programda hem hata yapma şansı en aza indirilir hem de zamandan kazanılarak program yapısı küçültülmüş olur. Metotlar tanımlanırken erişim belirleyici, geri dönüş değeri,metot ismi ve parametre liste sırasıyla verilir. Metodun iş yapması için kendisini çağıran metottan aldığı bilgilere parametre, kendisini çağıran fonksiyona döndürdüğü bilgiye ise geri dönüş değeri denir. Bir metod içerisine parametre olarak aktarılan dizinin, metot içindeki bir elemanının değiştirilmesi esas diziyi de etkiler.bu yüzden metoda parametre olarak bir dizi verildiğinde derleyici, metoda dizinin bellekteki adresini verir; metot o adresteki verilerle çalışır. Bu yüzden metot içerisinde verilen dizi değerine referans tipli parametreler adı verilir. Metoda parametre olarak aktarılan değişkenin metot içinde değiştirilmesi esas değişkeni etkilemez. Metottan çıkıldığında da o geçici bellek bölgesi de silinir. Bu yüzden metot içerisinde verilen değişken değerlerine değer tipli parametreler denir. Değer tipli parametreler, referans tipli olarak kullanılmak istenebilir. Bunun için Virtual C#, programlama dilinde out ve ref anahtar sözcükleri kullanılmaktadır. Başlangıç değeri bulunan değer tiplerindeki değişkenlerin değerleri metotlara ref anahtar sözcüğü ile aktarılırken; ilk değeri olmayan değişkenlerin değeri ise out anahtar sözcüğü ile aktarılır. İşletim sistemleri ve programlama dili çalışma zamanları sık sık veriyi tutmak için kullanılan RAM, belleği her biri ayrı olarak yönetilen iki büyük parçaya ayırır. Belleğin iki büyük parçasına stack ve heap adı verilir. Bir yöntemi çağırdığınızda, o yöntemin değerleri ve yerel değişkenleri için gerekli bellek her zaman stack'dan alınır. new anahtar sözcüğünü kullanarak bir nesne oluşturduğunuzda, nesneyi oluşturmak için gerekli bellek her zaman heap'ten alınır. C#'ta parametre sayısı veya parametrelerin türleri farklı olmak şartıyla aynı isimli birden fazla metot oluşturulabilir Bu şekilde tanımlanan metotlara metotların aşırı yüklenmesi denir. Kendi kendini çağıran metotlara özyenileyici (recursive) metotlar denilir. Bu metotlarda, çağrımı sonlandıran bir kontrol yapısı metod içerisine mutlaka yerleştirilmelidir. Her çalışan C# programında mutlaka bir ana (Main) metot mevcuttur. Program ilk çalıştığında bu metotla başlar. Atatürk Üniversitesi Açıköğretim Fakültesi 15

DEĞERLENDİRME SORULARI Değerlendirme sorularını sistemde ilgili ünite başlığı altında yer alan bölüm sonu testi bölümünde etkileşimli olarak cevaplayabilirsiniz. 1. Bir metot tanımında aşağıdakilerden hangisi yer almaz? a) Erişim belirteçleri b) Dönüş değeri c) Adlandırma ismi d) New anahtar sözcük e) Parametre listesi 2. Metotların tanımlanmasına ilişkin aşağıdakilerden hangisi kesinlikle hatalıdır? a) Metotların parametreleri doğru sayıda ve türde verilmelidir. b) Değer tutan metotlarda return satırıyla verilen ifade, metodu yazarken verilen türle uyumlu olmalıdır. c) Değer tutmayan metotlarda void sözcüğü kullanılır. d) Metotlar içinde tanımlanan değişkenler, metodun işlevi bittiğinde silinir. e) Metotlarda mutlaka parametre kullanılmalıdır. 3. Aşağıdakilerden hangisi metotlarda değer tipi parametrelerin referans tipli olarak kullanılmasını sağlar? a) new b) class c) out d) int e) void Atatürk Üniversitesi Açıköğretim Fakültesi 16

4. using System; class sorular static void Hesapla(... int sayi1) sayi1=4; static void Main() int sayi=0; Hesapla(... sayi); Yukarıda verilen kodlar içerisindeki (...) ile gösterilen boşluğa aşağıdaki anahtar sözcüklerden hangisi gelmelidir? a) new b) class c) out d) ref e) void 5. using System; class Sorular int Topla(int a,int b) return a + b; static void Main() Sorular soru5 = new Sorular(); int a = soru5.(...); Console.Write(a); Yukarıda verilen kodlar içerisindeki (...) ile gösterilen boşluğa aşağıdaki kod satırlarından hangisi gelmelidir? a) Topla (0, 100); b) Topla ( 100); c) Sorular ( 100); d) Sorular (0,100); e) Soru5 ( 0,100); Atatürk Üniversitesi Açıköğretim Fakültesi 17

6. Referans tipler bilgisayar hafızasının hangi bölümünde saklanır? a) Heap bölgesinde b) Stack bölgesinde c) Harddiskte d) Diskette e) Flash diskte 7. Değer tipler bilgisayar hafızasının hangi bölümünde saklanır? a) Heap bölgesinde b) Stack bölgesinde c) Harddiskte d) Diskette e) Flash diskte 8. Aşağıdaki erişim türlerinden hangisine her yerden ulaşmak mümkündür? a) Private b) Protected c) Public d) Internal e) Proteced Internal 9. C# ta parametre sayısı ve parametre türleri farklı olmak koşulu ile aynı isimde faklı metotlar oluşturma işlemine ne denir? a) Kendini çağıran b) Ana metot c) Yavru metot d) Fonksiyon e) Aşırı yükleme Atatürk Üniversitesi Açıköğretim Fakültesi 18

10. using System; class Sorular static void Islem(int a) if (b == 0) return;... (b>>1); Console.Write(b & 1); static void Main() Islem(10); Yukarıda verilen kodlar içerisindeki (...) ile gösterilen boşluğa hangi kod satırında verilen anahtar sözcük gelmelidir? a) Islem b) Main c) Sorular d) new e) void Cevap Anahtarı: 1.D,2.E, 3.C,4.D,5.A,6.A,7.B,8.C,9.E,10.A Atatürk Üniversitesi Açıköğretim Fakültesi 19

YARARLANILAN KAYNAKLAR VE BAŞVURULABİLECEK DİĞER KAYNAKLAR ALGAN, Sefer, (2010), Her Yönüyle C#, İstanbul: Pusula Yayıncılık, İstanbul. AKTAŞ, Volkan, (2013), Her Yönüyle C# 5.0, KODLAB, İstanbul. CLARK, Dan, (2013), Your visual blueprint for building.net application, 2nd Edition, Hungry Minds, New York. SCHILDT, Herbert, (2002), The Complete Reference C#, çev. Duygu Arbatlı Yağcı, Alfa Basım Yayım Dağıtım, İstanbul. SHARP, John, (2002), Microsoft Visual C#.NET, çev. Mert Derman, Arkadaş Yayınevi, Ankara. YANIK, Memik, (2004), Microsoft Visual c#.net, 1.Baskı, Seçkin Yayıncılık, Ankara. Atatürk Üniversitesi Açıköğretim Fakültesi 20