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

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

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

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

NESNEYE YÖNELİK PROGRAMLAMA

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

BTEP243 Ders 3. class Yazım Kuralı:

YZM 2105 Nesneye Yönelik Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

C# Metotlar ve Metot Tanımlama

Nesne Yönelimli Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Sunum İçeriği. Programlamaya Giriş

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

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

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

HSancak Nesne Tabanlı Programlama I Ders Notları

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

public static int Toplam int x, int y

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

BİL-142 Bilgisayar Programlama II

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

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

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

Pointer Kavramı. Veri Yapıları

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

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

Göstericiler (Pointers)

Yrd. Doç. Dr. Caner ÖZCAN

Ders 8: Metotlar. barisgokce.com

BİL-141 Bilgisayar Programlama I (Java)

YZM 2105 Nesneye Yönelik Programlama

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

YZM 2105 Nesneye Yönelik Programlama

C++ Dersi: Nesne Tabanlı Programlama

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

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

C#(Sharp) Programlama Dili

NESNEYE YÖNELİK PROGRAMLAMA

Nesneye Dayalı Programlama

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

Öğr. Gör. Serkan AKSU 1

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

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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

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

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

Nesneye Yönelik Programlama (OOP) 7.Hafta

Kalıtım (Inheritance)

C++ Dersi: Nesne Tabanlı Programlama

YZM 2105 Nesneye Yönelik Programlama

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

İ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İ

BMH-303 Nesneye Yönelik Programlama

7. HAFTA. Erişim Belirleyiciler

Diziler İndisli Değişkenler

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

4. Bölüm Programlamaya Giriş

NESNEYE YÖNELİK PROGRAMLAMA

Bölüm 9. Altprogramlar ISBN

Lambda İfadeleri (Lambda Expressions)

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

Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi

Programlama Dilleri 3

YZM 2105 Nesneye Yönelik Programlama

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

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

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

SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA NESNE YÖNELİMLİ PROGRAMLAMA

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.

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

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

Görsel Programlama-I (Visual Programming) 2.Hafta

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

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

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

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

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

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

1. SINIFLAR Sınıf (Class) Mantığı

Fonksiyonlar (Altprogram)

Yrd. Doç. Dr. Caner ÖZCAN

BİLG Dr. Mustafa T. Babagil 1

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Nesne Tabanlı Programlama

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

Hafta 13 Fonksiyonlar

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

Nesne Yönelimli Programlama

ALGORİTMA VE 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.

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

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

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

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

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

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

Programlama Dillerinde Kullanılan Veri Tipleri

Ders 8 Konu Özeti ve Problemler

Transkript:

SINIFLAR İÇİNDEKİLER Sınıflar Sınıf Tanımlama Ve Kullanma Sınıflara Metot Eklemek Yapıcı Metotlar Kopyalayıcı Metotlar Yıkıcı Metotlar Statik Sınıflar NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA HEDEFLER Bu üniteyi çalıştıktan sonra; Sınıf tanımlayıp programlar içerisine ekleyebilecek, Sınıflar içerisine yeni metotları yapılandırabilecek, Statik sınıflar için değişken ve metotlar kullanabileceksiniz. ÜNİTE 10

GİRİŞ Nesne Tabanlı programlama tekniği (Object Orianted programming) birbirinin özellik ve metotlarını kullanabilen, gerektiğinde diğerinin kodlarını alıp yeni kodlar eklenebilen sınıflardan oluşur. Sınıf kavramı belli bir veya birden çok ortak özellikleri olan varlıkları tanımlamaya yarayan soyut bir kavramdır. Nesne ise bir sınıfa ait belirgin bir öge, bir varlıktır. Virtual C# programlama dili %100 nesne tabanlı bir dildir. Bu programlama dilinde yazılım yaparken, çözülmesi istenen problemler genelde çeşitli parçalara ayırılır. Her bir parça problemin küçük bir çözümü olacak şekilde özel olarak kodlanır. Sonuçta bütün bu parçaların bir araya getirilmesi sonucu yazılım tamamlanır. Eğer bir yazılım bu şekilde yazılmışsa, nesne tabanlı programlama yapılmıştır denebilir. Sınıflar nesne yönelimli programlamanın en önemli ögesidir. Bu kavramı iyi anlamak, her türlü teknikte, sınıfların avantajlarından yararlanmanıza ve kendinize özel yeni nesneler oluşturmanıza olanak sağlar. Bu bölümde sınıfların tanımlanma yöntemleri, sınıflar içerisinde kullanılan yapıcı, kopyalayıcı, yıkıcı metotlar ile statik üye elemanlar anlatılacaktır. SINIFLAR Nesne Tabanlı Programlama Tekniği yle geliştirilen programların her bir çözüm parçasına nesne, nesnelerin c# kod karşılıklarına da sınıf denmektedir. Sınıfların üye elemanları ise değişkenler (özellik) ve metotlardır. Metotlar bir veya daha fazla komutun bir araya getirilmiş hâlidir; parametre alabilirler, geriye değer döndürebilirler. Özellikler ise bellek hücrelerinin programlamadaki karşılıklarıdır. Bu bakımdan özellikler değişkenlere benzerler. Aradaki en temel fark değişkenlerin bir metot içinde tanımlanıp yalnızca tanımlandığı metot içinde etkinlik gösterebilmesine rağmen özelliklerin, tıpkı metotlar gibi bir üye eleman olmasıdır. Bu bakımdan özelliklerin tuttuğu değerlere daha fazla noktadan erişilebilir. Bu yukarıda yapılan tanımların hepsi soyut kavramlardır. Bu nedenle bu kavramları, daha anlaşılır yapmak için bir örnekle açıklayalım; Bilgisayar denilince her birimizin kafasında bir kavram (sınıf) gelir. Muhtemelen ilk aklımıza gelen; cep telefonları, tablet bilgisayarlar ve diz üstü bilgisayar gibi taşınabilir bilgisayarların bulunduğu sınıftır. Ama biraz düşününce bunlara iş bilgisayarlarını (masaüstü bilgisayar, server, süper bilgisayarlar) da ekleyebiliriz. Bütün bunların ortak bir özelliği vardır. Hepsinin elektrikle ya da bataryayla çalışan elektronik devreleri vardır. Bilgisayar demek yerine, taşınabilir bilgisayar dersek sınıfa giren ögeleri biraz daha sınırlamış oluruz. Bu sınıftakilerin iki çekirdekli, dört çekirdekli gibi işlemcilere sahip olduğunu, gittiğimiz her yerde internete girmemizi sağlayan yeteneklerinin bulunduğunu, bataryalarının bitince sürekli şarj edilmesi gerektiğini anlarız. Bilgisayarlar sınıfı, taşınabilir bilgisayar sınıfının bir üst sınıfıdır. Kavramı biraz daha daraltalım ve cep telefonları diyelim. Bu sınıf, taşınabilir bilgisayar sınıfının bir alt sınıfıdır. Ama hâlâ seçenekler çoktur. Cep telefonu markaları, modelleri, renkleri, işlemcileri, bellek özellikleri vb. nitelikleri farklıdır. Belli bir markayı, örneğin Apple marka cep telefonları sınıfını düşünebilirsiniz, bu sınıfa ait olan Atatürk Üniversitesi Açıköğretim Fakültesi 2

özelikleri daha iyi tanıyor olacaksınız. Bu sınıfın model, renk, ekran büyüklüğü, şarj ve bağlantı girişleri vb. nitelemelerle istediginiz kadar daraltabiliriz. Fakat bir cep telefonu sınıfı somut bir cep telefonuna (bir cisim olarak) eş değildir. Öte yandan, diyelim ki arkadaşımıza ait Apple marka cep telefonu somut bir varlıktır. Bu Cep telefonu, taşınabilir bilgisayar sınıfına, wifi bağlantıya sahip cep telefonu sınıfına ait bir nesnedir, somut bir varlıktır. Bu cep telefonunun ekran kalitesi, bellek büyüklüğü, işlem hızı gibi nitelikleri, hep ait olduğu sınıf tarafından belirlenir. Sınıf Tanımlama ve Kullanma: Sınıf bildirimleri class anahtar sözcüğü kullanılarak yapılır. Sınıf isminden sonra sınıf içindeki üye eleman ve metotlar tanımlanır. Basit bir sınıf tanımı aşağıdaki şekilde yapılabilir: class sınıf_ismi. } Yukarıdaki bildirimde class anahtar sözcüğü kullanılarak kullanıcı tanımlı, bir sınıf oluşturulmuştur. Class isminden sonra sınıf_ismi yer almaktadır. Sınıf üyeleri ise küme parantezleri ( } ) içisine yerleştirilir. Sınıf gövdesi yukarıdaki gibi boş bırakılabilir. Fakat boş gövdeli bir sınıf hiçbir işe yaramaz. 0nun işe yarar olabilmesi için içine sabit, değişken ve metot bildirimleri (tanımları) yerleştirilmelidir. Bu tanımalara sınıfın ögeleri denir. Bir metot ve iki özelliğe sahip genel bir sınıf bildirimi aşağıdaki şekilde yapılabilir: class sınıf_ismi <erişim belirleyici><veri tipi> özellik1; <erişim belirleyici><veri tipi> özellik1; <erişim belirleyici> <geri dönüş tipi> Metot1(parametreler) Metot1 ifadeleri ve deyimleri.. } Atatürk Üniversitesi Açıköğretim Fakültesi 3

class anahtar sözcüğünün yanına yazılan isim sınıf ismi olarak alınır. Küme parantezleri ( } ) arasına ise ilgili sınıfa ait özellik ve metot tanımları yerleştirilmiştir. Erişim belirteçleri metot için belirtilmediği durumlarda private olarak kabul edilir. Yani sadece tanımlandığı sınıf içinde kullanılabilen bir metot özelliğine sahip olur. <erişim belirleyici> : Erişim belirteçleri metoda nerelerden erişilebileceğini belirleyen ayarlardır. Virtual C# programlama dilinde tanımlanan erişim belirleyiciler şunlardır: Private (Gizli): Bir değerin private olarak tanımlanması demek, o değişkene sadece kendi class ı içinden ulaşılabileceği anlamına gelmektedir. Program içinde kesinlikle değiştirilmemesi gereken, önemli kodlarda kullanılmaktadır. Public (Genel): Bir değerin public olarak belirtilmesi; o değerin, kod içinde herhangi bir yerden erişilebilir durumda olmasını sağlamaktadır. Public erişim belirleyici tipinde hiçbir kısıtlama yoktur. Protected (Korunumlu): Kod içinde bir değerin protected olarak tanımlanması; o değere, değerin bulunduğu class ve ondan türetilen diğer sınıflar içinden erişilebilileceğini göstermektedir. Protected; bir anlamda, public ve private erişim belirleyicilerinin birleşimi olarak görülebilmektedir. Internal (İçsel): Internal olarak tanımlanan bir değer; aynı program içerisinden erişilebilir;fakat farklı bir program içerisinden erişilemez durumdadır. Program içerisinde herhangi bir kısıtlaması yoktur. Protected Internal (İçsel Korunumlu): Protected internal olarak tanımlanmış değer, tanımlandığı class ın içinden ve ondan türetilen sınıfların içinden erişilebilir durumdadır. Türetilen sınıfın aynı program içinde olmaması sorun teşkil etmez. <veri tipi> özellik1 : Tanımlanan sınıf içinde kullanılabilen özellik1 e (değişkenlere) ait veri tipini gösterir int, float, string, bool..vb. türlerinden biri olabilir. Metot1: 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 Metot1 in çalışırken ihtiyaç duyduğu çağıran fonksiyondan gönderilen bilgileridir. Atatürk Üniversitesi Açıköğretim Fakültesi 4

Örnek tanıtım şekli Program_1 de gösterilmiştir. Program_1: using System; class Ders private string Isim; public void IsimAl(string isim) Isim = isim; Console. WriteLine(Isim); } static void Main() Ders Yeni = new Ders(); Yeni. IsimAl("C# Programlama dili"); } } Yukarıdaki örnekte Ders isimli bir sınıf tanımlanmıştır. Bu sınıfın Isim adlı bir üye değişkeni, IsimAl adında bir metodu bulunmaktadır. Program çalıştırıldığında İlk olarak; using System; deyimi çalıştırılır. İkinci olarak; class Ders, deyimi ile Ders adında bir sınıf oluşturmaktadır. Üçüncü olarak; private string Isim; Isım adındaki string türündeki sınıfa ait üye değişkenini alır. Dördüncü olarak; static void Main(), Main metodunu çalıştırır. Dikkat edilirse Sınıf içindeki IsimAl metodu Main metodundan önce olmasına rağmen (sırası gelmesine rağmen) çalıştırılmamıştır. Sınıfa ait metodlar Main metodu içinden çağrılmadıkça çalışmazlar. Main metodu çalıştırıldığında küme parantezi içindeki kodlar sırasıyla çalıştırılır. Main metodunda ilk olarak Ders Yeni = new Ders(); deyimi çalışır ve Ders sınıfı türünden bir Yeni isimli bir nesnenin tanımlamasını yapar. İkinci olarak; Yeni. IsimAl("C# Programlama dili"); deyimi ile Yeni nesnesinden IsimAl metoduna C# Programlama string tipindeki isim değişkeni parametre olarak gönderir ve isim değişkeni Isim adlı üye değişkene değerini aktarak Şekil 10.1 deki gibi ekrana yazdırılır. Şekil 10.1. Program_1 in ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 5

Bu program_1 de verilen uygulamada; IsimAl metodu ile Main metodu aynı sınıf içerisinde yer almaktadır. Programlama yaparken sade bir görünüm sağlamak amacıyla Main metoduyla, hazırlanan metotlar genellikle farklı sınıflar içerisine yerleştirilir. Bu şekildeki bir tanımlama örnek Program_2 de gösterilmiştir. Örnek Program_2: Şekil 10.2. Ders ve Uygulama sınıflarının bildirimini gösteren C# kodu Şekil 10.3. Program_2 ye ait ekran görüntüsü Şekil 10.2 de kırmızı okla gösterilen örnek program_2 de program_1 den farklı olarak Ders ve Uygulama olmak üzere iki ayrı sınıf tanımlanmıştır. Ders sınıfı içerisinde kullanıcı tanımlı bir metot ve Uygulama sınıfının içinde ise Main metodu yerleştirilmiştir. Main metodunun içinden Ders sınıfının içine gönderilen string değer Nesne Tabanlı Programlama 1 ile değiştirilmiştir. Main metodu içindeki kodlamada değişiklik yapılmamıştır. Ders sınıfı içinde string tipindeki Isim üye değişkenine Nesne Tabanlı Programlama 2 değeri atanmıştır. Ayrıca bu değeri ekrana yazdırma kodu eklenmiştir. Ayrı ayrı sınıflardaki metodlarda, bir sınıftaki üye değişken ya da metodu kullanabilmek için <erişim belirleyici> olarak public anahtar sözcüğü kullanılmalıdır. Atatürk Üniversitesi Açıköğretim Fakültesi 6

Ticari programlar geliştirirken; programcılar, tasarımcılar, muhasebeciler gibi birçok farklı meslek mensubu bir araya gelmekte ve yazılan kodlar farklı kişilerce, farklı zamanlarda hazırlanarak birleştirilmektedir. Bu durumda aynı dosya içinde farklı sınıflar yerine, farklı sınıflar ve dosyalar hazırlanıp paketlenebilmektedir. Bu şekildeki bir tanımlama örnek Program_3 de gösterilmiştir. Örnek Program_3: Örnek Pogram_2 hazırlanırken şekil 10.4 teki kod penceresi kullanılmıştı. Şimdi örnek program_3 u yapabilmek için Şekil 10.5 te gösterilen Project>Add class komutu verilerek Şekil 10.6 de gösterilen Name kısmına class2 ismini yazarak Add komutunu vererek Şekil 10.7 deki kod penceresini hazırlayınız. Şekil 10.8 de gösterilen kodları Main metodunun içerisine yazın ve program. cs dosyasına kaydedin. Daha sonra Şekil 10.9 da gösterilen kodları ise Ders sınıfının içindeki IsimAl metoduna yazarak Class2.cs dosyasına kaydedin. Ctrl+F5 kısa yolunu ya da DEBUG>Start Without Debuggin komutunu kullanarak rpgramı çalıştırın. Programın çalışması sonrası Şekil 10.10 da gösterilen ekran çıktısı görülecektir. Bu örnek program_3 teki kodlar; iki farklı sınıf tanımlanarak yazılmış ve iki farklı dosyaya yazılarak çalıştırılmıştır. Şekil 10.4. Program sınıfının yazılmasını sağlayan kod penceresi Atatürk Üniversitesi Açıköğretim Fakültesi 7

Şekil 10.5. Project>Add class komutunun verilme şekli Şekil 10.6. Class2 isimli sınıfın projeye eklenmesi Atatürk Üniversitesi Açıköğretim Fakültesi 8

Şekil 10.7. Class2 sınıfının yazılmasını sağlayan kod penceresi Şekil 10.8. Örnek Program_3 e ait Main metodunun yazılma şekli Şekil 10.9. Örnek Program_3 e ait Ders metodunun yazılma şekli Atatürk Üniversitesi Açıköğretim Fakültesi 9

Şekil 10.10. Örnek program_3 ün çalışması sonrası ortaya çıkan ekran çıktısı this Anahtar Sözcüğü: Metotlar içinde başka bir sınıfa ait nesnelerin özellikleri ve metotları kullanılabilir. Nesnenin üyeleri ile metot içindeki tanımlamalar bazen aynı olabilir. Bu durumda metot değişkenleri ile nesnenin üyelerini birbirinden ayırmak için this anahtar sözcüğü kullanılır. this anahtar sözcüğü ilgili nesnenin referansını belirtir. this anahtar sözcüğü, içinde bulunulan nesneye ait bir referans döndürür. this anahtar sözcüğü ile ilgili bir kullanım örnek Program_4 te gösterilmiştir. Örnek Program_4: this anahtar sözcüğü sayesinde nesnelere ait global alanlara erişme fırsatı bulunur. Şekil 10.11. Örnek Program_4 e ait kod görüntüsü Şekil 10.12. Örnek Program_4 e ait ekran çıktısı Atatürk Üniversitesi Açıköğretim Fakültesi 10

set ve get Anahtar Sözcükleri: Bir nesnenin üye değişkenlerine değer atarken ya da içerisindeki değeri kullanırken belli kontrollerin yapılması gerekiyorsa ya da kod bloklarının çalıştırılması isteniyorsa set ve get ifadeleri kullanılır. set sözcüğü nesnenin özelliklerine değer atandığında çalışır. get sözcüğü ise özellik değeri okunduğunda ya da farklı bir ifadeye aktarılmaya çalışıldığında çalışır. set ve get yönteminin daha iyi anlaşılabilmesi için aynı işlemi yapan iki program örneği; örnek program_5 te metotlar kullanılarak, örnek program_6 da ise set ve get yöntemi kullanılarak yapılmıştır. Örnek Program_5: Şekil 10.13. Program_2 nin ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 11

Şekil 10.14. Program_2 nin ekran çıktısı Örnek Program_6: Şekil 10.15. Program_2 nin ekran görüntüsü Şekil 10.16. Program_2 nin ekran çıktısı Atatürk Üniversitesi Açıköğretim Fakültesi 12

C# 2.0'da ya da daha üst versiyonlarda bir sahte özelliğin, set ve get blokları ayrı ayrı private veya public anahtar sözcükleriyle belirtilebilir. C# ta tüm sınıflar (class) tanımlansın ya da tanımlanmasın değer tiplerine sıfır, referans tiplerine null değerini atayan varsayılan bir yapılandırıcı vardır. Yapılandırıcısı tanımlandıktan sonra varsayılan yapılandırıcı bir daha kullanılmaz. 2. örnek program_6 da SahteOzellik adlı bir özellik oluşturulmuştur. Bu özellik gerçekten de sahtedir. Özelliğe bir değer atanmaya çalışıldığında set bloğundaki, özellik kullanılmaya çalışıldığında da get bloğundaki komutlar çalıştırılır. Aslında C# kütüphanesindeki özelliklerin çoğu bu yöntemle oluşturulmuştur. Örnek Programlarda görüldüğü gibi, değişkenin değerini değiştirdiğimizde çalışmasını istediğimiz kodları set blokları arasına yazarız. Herhangi bir sahte özelliğin set veya get bloklarından yalnızca birini yazarak o özelliği salt okunur veya salt yazılır hâle getirmek mümkündür. Sınıflara Metot Eklemek Bir defa sınıfın yapısı tasarlandıktan sonra istenildiği kadar yeni metot eklenebilir. Bu metodlar Yapıcı Kopyalayıcı ve Yıkıcı olmak üzere üç çeşide ayrılabilir. Yapıcı Metotlar Yapılandırıcıların görevi, oluşturulan nesneyi ilk kullanıma hazırlamasıdır. Bir nesnenin dinamik olarak yaratıldığı anda otomatik olarak çalıştırılan metotları vardır. Bu metotlar sayesinde bir nesnenin üye elemanlarına ilk değerler verilebilir ya da gerekli ilk düzenlemeler yapılabilir. Bu metotlara yapıcı metotlar (constructors) denir. Yapıcı metot tanımlanmasa dahi her sınıfın varsayılan bir yapıcı metodu (default constructor) mutlaka bulunur. Bir nesne oluşturulduğunda sayısal değerler için 0, referanslar için null, bool türü için false atanır, bu atama bir yapıcı metot ile gerçekleştirilir. Yapılandırıcıların bilinen temel özellikleri şunlardır: Yapıcıların dönüş değeri yoktur, isimleri sınıf ile aynı isimdir. Varsayılan yapıcı metodun parametresi yoktur. Sadece nesnenin üye elemanlarına varsayılan değerlerini atar. Yapıcı metotlar bir değer tutamaz. Ancak normal metotlardan farklı olarak void anahtar sözcüğü de kullanılmaz. Yapıcı metotlar dışarıdan çağrıldığı için genelde public olarak tanımlanır private olursa dışarıdan erişilemez. Eğer kendi yapıcı metodumuzu tanımlarsak varsayılan yapıcı metotlar çalıştırılmaz. Yapıcı metotlar ile ilgili bir kullanım örnek program_7 de gösterilmiştir. Atatürk Üniversitesi Açıköğretim Fakültesi 13

Örnek Program_7: Şekil 10.17. Örnek Program_7 nin ekran görüntüsü Şekil 10.18. Örnek Program_7 nin ekran çıktısı Şekil 10.7 de Toplam sınıfı içinde bir yapıcı metot tanımlanarak AnaProgram sınıfı içindeki Main metodunda çağrılmıştır. Programın çalışması sonucu Şekil 10.18 de ekran çıktısı görülecektir. Kopyalayıcı Yapıcı Metotlar: Bir Yapıcı metot, parametre olarak kendi sınıfından bir nesne alıyorsa kopyalayıcı metot adını alır. Kopyalayıcı Yapıcı metotlar ile ilgili bir kullanım örnek program_8 de gösterilmiştir. Atatürk Üniversitesi Açıköğretim Fakültesi 14

Örnek Program_8: Şekil 10.19. Örnek Program_8 in ekran görüntüsü Şekil 10.20. Örnek Program_8 in ekran çıktısı Yapıcı metotlar dışarıdan çağrıldığı için genelde public olarak tanımlanırlar. Şekil 10.19 da kırmızı okla gösterilen public Toplam(Toplam T) satırında bir kopyalayıcı yapıcı metot tanımlanarak AnaProgram sınıfı içindeki Main metodunda çağrılmıştır. Programın çalışması sonucu Şekil 10.20 deki ekran çıktısı görülecektir. Yıkıcı Metotlar: Nesnelere erişim mümkün olmadığı durumlarda bu nesnelerin heap ten silinmesi amacıyla kullanılır. private olursa dışarıdan erişilemez. Bu durumda yıkıcı metotlar (destructors) bellek iade işleminden hemen önce çalışarak bu belleğin temizlenmesine yardımcı olurlar. Yıkıcı metotlar bildirilirken sınıf isminin önüne ~ (tilda) işareti eklenir. Atatürk Üniversitesi Açıköğretim Fakültesi 15

Yıkıcı metodlar aşağıda gösterilen özelliklere sahiptir. Herhangi bir dönüş değeri ve parametresi yoktur. Erişim belirteci (public, private) de kullanılmaz. Bir sınıfın sadece bir tane yıkıcı metodu olabilir. Yıkıcı metotlar ile ilgili bir kullanım örnek program_9 da gösterilmiştir. Örnek Program_9: Şekil 10.21 de kırmızı okla gösterilen ~ Yıkıcı () satırında bir yıkıcı metot tanımlanarak AnaProgram sınıfı içindeki Main metodunda çağrılmıştır. Programın çalışması sonucunda Şekil 10.22 deki ekran çıktısı görülecektir. Şekil 10.21. Örnek Program_9 un ekran görüntüsü Şekil 10.22. Örnek Program_9 un ekran çıktısı Örnek programda y nesnesi faaliyet alanını doldurmasına rağmen hemen yok edilmemiştir. Bir alt satırda bulunan Console. WriteLine() metodu çalışmış ardından gereksiz nesne toplayıcısı işleyerek nesneyi silmiştir. Nesne yok edilirken de yıkıcı metodu çalıştırılmıştır. Gereksiz nesne toplayıcı (Garbage Collector), programcının isteği dışında çalışmaktadır. System. GC sınıfı kullanılarak istenilen Atatürk Üniversitesi Açıköğretim Fakültesi 16

anda bu mekanizma çalıştırılabilir. Gereksiz nesne toplayıcının çağrılmasıyla ile ilgili bir kullanım örnek program_10 da gösterilmiştir. Örnek Program_10: C# ta yıkıcı metotlar genelde nesnenin kullandığı bellek alanını iade etmek için deyiğ de daha çok nesne yok edilirken birtakım işlemlerin yapılması ya da değiştirilmesi için kullanılır. Şekil 10.23. Örnek Program_10 un ekran görüntüsü Static Sınıflar Şekil 10.24. Örnek Program_10 un ekran çıktısı İçinde sadece statik üye elemanlar barındıran sınıflar statik sınıflar olarak tanımlanır. Bir sınıf statik olarak bildirildiğinde o sınıf türünden bir nesne yaratılamaz. Statik metotlar C# 2,0 den itibaren dile eklenmiştir. Statik sınıflar içerisinde static olmayan metot veya özellik tanımlanamaz. Statik sınıfların yapıcı metotları olmaz. Dolayısıyla yapıcı metot tanımlamaya çalışırsak derleyici hata verir. Statik sınıflar türetmeyi desteklemez. Static classlar ve class üyeleri (değişkenler, metotlar), o sınıfın bir instance ını oluşturmadan erişilebilir olmaları için kullanılabilir. Atatürk Üniversitesi Açıköğretim Fakültesi 17

Statik Üye Elemanlar Statik elemanlar bir sınıfın global düzeydeki elemanlarıdır ve uygulamanın her yerinden çağrılabilir. Daha önce de belirtildiği gibi metotlara sınıflar üzerinden erişilir. Bazı durumlarda ise sınıf türünden nesneler oluşturulur ve bu nesneler üzerinden ilgili metoda erişebiliriz. Statik üyeleri kullanmak için herhangi bir nesne tanımlamamıza gerek yoktur. Bir üye elemanın statik olduğunu bildirmek için bildirimden önce statik anahtar sözcüğü eklenir. Bir sınıf nesnesi oluşturulduğunda static üye elemanlar için bellekte ayrı bir yer ayrılmaz. Nesne ile doğrudan iş yapmayan metotlar statik olarak tanımlanabilir. Statik tanımlanan metotlara SınıfAdı.Metot şeklinde erişilir. Statik metotlara nesne üzerinden erişmek mümkün değildir. Statik Değişkenler Herhangi bir nesne ile statik değişkenlere ulaşmamız mümkün değildir. Statik değişkenler sınıf içersinde global özellikler tanımlamak için kullanılırlar. Bu değişkenler tanımlandıklarında varsayılan değere atanırlar. Statik üyelere ancak statik bir metot içerisinden erişilebilir. Statik değişkenlerle ilgili bir kullanım örnek program_11 de gösterilmiştir. Örnek Program_11: Şekil 10.25. Örnek Program_11 in ekran görüntüsü Şekil 10.26. Örnek Program_11 in ekran çıktısı Atatürk Üniversitesi Açıköğretim Fakültesi 18

Statik Metotlar: Static anahtar sözcüğü erişim belirleyiciden önce ya da sonra yazılabilir. Main() metodu da herhangi bir nesneye ihtiyaç duymadan çalışabilmesi için statick olarak tanımlanmaktadır. Eğer statik olarak tanımlanmasaydı metodun çalışabilmesi için, içinde bulunduğu sınıf türünden bir nesneye ihtiyaç olacaktı. Bu durumda da Main metodu işlevi ile çelişecekti. Çünkü Main metodu programımızın çalışmaya başladığı yerdir. Statik tanımlanmış metotlar içinden diğer statik metotlar çağrılabilir, normal metotlar çağrılamaz. Normal metotlar nesne gerektirdiği için nesne adreslerine ihtiyaç duyarlar (bu adresler gizli şekilde ya da this ile aktarılır). Statik metotlar sınıfın global metotlarıdır ve referansları yoktur. Bu yüzden statik bir metot içinden normal bir metot çağırmak geçersizdir. Örnek Program_12: Örnek program_12 de StatikMetodlar adında bir sınıf oluşturulmuş ve bu sınıfın içinde ise StatikMetod1 ve StatikMetod2 adında iki tane statik metot tanımlanmıştır. Main programı ise Program sınıfı içerisine yazılmıştır. Bu örnek programla statik metot ve sınıfların nasıl kullanıldığı şekil 10.27 deki kod penceresinde görülmektedir. Programın çalışması sonucu Main metodu içindeki kodlar sırasıyla çalıştırılarak Şekil 10.28 de gösterilen ekran çıktısı elde edilmiştir. Şekil 10.27. Program_2 nin ekran görüntüsü Atatürk Üniversitesi Açıköğretim Fakültesi 19

Şekil 10.28. Örnek Program_12 nin ekran çıktısı Atatürk Üniversitesi Açıköğretim Fakültesi 20

Özet Nesne tabanlı programlama tekniğiyle geliştirilen parogramların her bir iş yapan parçasına nesne, nesnelerin c# kod karşılıklarına da sınıf denmektedir. Bir ya da daha fazla komutun bir araya getirilmiş hâline metot denir. parametre alabilirler, geriye değer döndürebilir. Özellikler ise bellek hücrelerinin programlamadaki karşılıklarıdır. Sınıfların üye elemanları ise özellikler ve metotlardır. Sınıf bildirimleri class anahtar sözcüğü kullanılarak yapılır. Sınıf isminden sonra sınıf içindeki üye eleman ve metotlar tanımlanır. Sınıf ve metodlara nerelerden erişilebileceğini belirleyen erişim belirleyiciler vardır. Private,Public, Internal, Protected,Protected Internal olmak üzere 5 çeşittir. Bir değerin private olarak tanımlanması demek, o değişkene sadece kendi sınıfıiçinden ulaşılabileceği anlamına gelmektedir. Bir değerin public olarak belirtilmesi; o değerin, kod içinde herhangi bir yerden erişilebilir durumda olmasını sağlamaktadır. Internal olarak tanımlanan bir değer; aynı program içerisinden erişilebilir, fakat farklı bir program içerisinden erişilemez. Kod içinde bir değerin protected olarak tanımlanması; o değere, bulunduğu class ve ondan türetilen diğer sınıflar içinden erişilebilir olduğunu göstermektedir. Protected; bir anlamda, public ve private erişim belirleyicilerinin birleşimi olarak görülebilmektedir. Protected internal olarak tanımlanmış değer, tanımlandığı class ın içinden ve ondan türetilen sınıfların içinden erişilebilir durumdadır. Nesnenin üyeleri ile metot içindeki tanımlamalar bazen aynı olabilir. Bu durumda metot değişkenleri ile nesnenin üyelerini birbirinden ayırmak için this anahtar sözcüğü kullanılır. Bir nesnenin üye değişkenlerine değer atarken ya da içersindeki değeri kullanırken belli kontrollerin yapılması gerekiyorsa ya da kod bloklarının çalıştırılması isteniyorsa set ve get anahtar sözcüğü kullanılır. Sınıflar içerisinde kullanılabilen birçok metot yapısı vardır. Bunlar yapılandırıcı, kopyalayıcı ve yıkıcı metotlardır. Yapılandırıcıların görevi, oluşturulan nesneyi ilk kullanıma hazırlamasıdır. Yapıcı metot, bir nesnenin dinamik olarak yaratıldığı anda otomatik olarak çalıştırılan metotlardır. Bir yapıcı metot parametre olarak kendi sınıfından bir nesne alıyorsa kopyalayıcı metot adını alır. Yıkıcı Metotlar, nesnelere erişimin mümkün olmadığı durumlarda bu nesnelerin heap ten silinmesi amacıyla kullanılır. Statik üye elemanlar barındıran sınıflara, statik sınıflar denir. Atatürk Üniversitesi Açıköğretim Fakültesi 21

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 sınıf tanımında aşağıdakilerden hangisi yer almaz? a) Erişim belirteçleri b) Veri tipi c) Adlandırma ismi d) New anahtar sözcük e) class anahtar sözcük 2.Nesnelerin üyeleri ile bir metot içindeki tanımlamalar bazen aynı olabilir. Bu durumda metot değişkenleri ile nesnelerin üyelerini ayrımak için hangi anahtar sözcük kullanılır? a) out b) get c) return d) void e) this 3. Bir nesnenin üye değişkenine değer atarken aşağıdaki anahtar sözcüklerden hangisi kullanılır? a) get b) class c) void d) this 4. Varsayılan yapıcı metotların temel özellikleri ile ilgili aşağıdakilerden hangisi yanlıştır? a) Yapıcıların dönüş değeri yoktur. b) İsimleri sınıf isimleriyle aynı olmalıdır. c) Yapıcı metotlar bir değer tutmaz. d) Genellikle public olarak tanımlanır. e) Varsayılan yapıcı metotlara mutlaka parametre kullanılmalıdır. Atatürk Üniversitesi Açıköğretim Fakültesi 22

5. using System;. sorular static void Hesapla(ref int sayi1) sayi1=4; } static void Main() int sayi=0; Hesapla(ref sayi); }} Yukarıda verilen kodlar içerisindeki ( ) ile gösterilen boşluğa hangi anahtar sözcük gelmelidir? a) new b) class c) out d) ref e) void Atatürk Üniversitesi Açıköğretim Fakültesi 23

6. using System; class Toplam public int A; public int B; public...(int a, int b) A = a; B = b; } public int Islem() return A + B; } } class AnaProgram static void Main() Toplam SayılarıTopla = new...(60, 90); Console. WriteLine(SayılarıTopla. Islem()); } } Yukarıda verilen kodlar içerisindeki (...) ile gösterilen boşluklara hangi metot ismi yazılırsa yapıcı metot tanımlanmış olur? a) Ana Program b) Yavru program c) Islem d) Toplam e) SayılarıTopla 7. Yıkıcı metotlar aşağıda özelliklerden hangisine sahip değildir? a) Parametresi yoktur. b) Erişim belirleyiciler kullanılmaz. c) Her sınıfta sadece bir tane bulunmalıdır. d) Geri dönüş değeri yoktur. e) Yıkıcı metotların önüne # işareti konulmalıdır. Atatürk Üniversitesi Açıköğretim Fakültesi 24

8. Bir yapıcı metot parametre olarak kendi sınıfından bir nesne alıyorsa hangi yapıya sahip olur? a) Varsayılan yapıcı metot b) Yıkıcı metot c) Static matot d) Kendini çağıran metot e) Kopyalayıcı metot 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 10. Erişim belirteçleri metoda nereden erişilebileceğini belirleyen ayarlardır. Metot tanımlanırken erişim belirleyicisi belirtilmediği durumlarda metotlar için hangisi kabul varsayılan olarak seçilir? a) Public b) Protected c) Private d) Internal e) Protected internal Cevap Anahtarı: 1.D,2.E, 3.A,4.E,5.B,6.D, 7.E,8.E,9.E,10.C Atatürk Üniversitesi Açıköğretim Fakültesi 25

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 26