Merhaba arkadaşlar, bir önceki derste bir nesne oluşturacağımızı söylemiştik. Hatırlayın classlar ve structların geneli için nesne kavramını kullanmıştık. Windows form nesneleri için de bu geçerli yani görsel unsurlar taşıyan form nesneleri de birer classtır. Ve form ögelerinin bir kod kütüphanesi unsurları olduğu anlamına gelir. Bu kütüphane System.Windows.Forms‘dur.
Daha önce kod kütüphanesi(class library) projesi geliştirmeyi öğrenmiştik. Şimdi nesnemizi kod kütüphanesi projesi açıp nesnemizi kodlayacağız daha sonra form uygulamamıza çağırıp kullanacağız.
Class PuanBord
Kod kütüphanesi projesini açmadan önce nasıl bir nesne oluşturacağız biraz bahsedelim.
Hepimiz Mario’yu biliriz. Mario kısa boylu, yaşlıca, tonton ve asıl mesleği muslukçu olan bir video oyunu karakteridir. Nedir hikayesi ?… Kabaca bir muslukçunun, Prenses Peach’i kurtarmak için atılmış olduğu macerasıdır. Bu macera sırasında altınlar toplar ve level geçtikçe puanlar toplar. Bizde bu video oyunu için bir puan tablosu geliştireceğiz. Tablo diyorum ama daha önce de dediğim gibi görsel kısmını oluşturmayacağız. Ama görsel kısmını da oluştursaydık butonlar hariç Şekil 1‘deki gibi olabilirdi. Tabi ki daha küçük ve tek parça halinde olacaktı.
İsterseniz projemizi kodlamaya başlayalım. Kodlamadan önce Şekil 1’deki formu oluşturalım ki geliştireceğimiz sınıf hakkında bi’ fikir versin.
Bir form uygulaması projesi açalım ve aşağıdaki nesneleri tanımlayıp forma yerleştirelim. Form1.Designer.cs kodları:
this.nameTxt = new System.Windows.Forms.TextBox();
this.nameLbl = new System.Windows.Forms.Label();
this.loadBtn = new System.Windows.Forms.Button();
this.puanTxt = new System.Windows.Forms.TextBox();
this.cakeCheck = new System.Windows.Forms.CheckBox();
this.goldTxt = new System.Windows.Forms.TextBox();
this.levelTxt = new System.Windows.Forms.TextBox();
this.puanLbl = new System.Windows.Forms.Label();
this.goldLbl = new System.Windows.Forms.Label();
this.levelLbl = new System.Windows.Forms.Label();
this.intoPuanBtn = new System.Windows.Forms.Button();
this.intoGoldBtn = new System.Windows.Forms.Button();
Ardından bir C# kütüphanesi projesi açalım ve kodlamaya başlayalım.
yGLibrary.dll kodları:
/*
İlk önce puan tablomuzda verileri depolayacak değişkenleri tanımlayalım ve varsayılan değerlerini yükleyelim. Burada değişkenlerin private olduğuna dikkat edelim. Yani dışarıdan kimsenin bu değişkenlere erişmesini istemiyoruz. Çünkü bu değişkenlere her türlü değerin yüklenmesini istemediğimizden, erişim iznini private olarak tanımladık. Aslında private olarak tanımlamamızın asıl sebebi yerel değişkenlerin private olarak tanımlanmasının bir gelenek haline gelmesidir. Bu değişkenlere erişimi ise bir metot yardımıyla sağlayacağız.
cake, Mario’nun yedikten sonra boyunu uzatan kektir arkadaşlar.
Burada boolean bir değişkenle kekin yenip yenmediğini kontrol ediyoruz.
null: boş değer, tanımlanmamış, hiçbir şey anlamına geliyor.
*/
/*
Sınıfımızın kurucu metodunu oluşturalım. Hatırlayalım;
[-X]:
Çağırma şekli:
PuanBoard ad = new PuanBoard(“lakap”);
Oyunu iki kişi oynamak isteyebilir bu yüzden oyuncuların isimlerini alıyoruz. Fakat burada name değerinin hiçbir etkisi yok. Yani bu değişkeni tanımlamamız şart değil. Yukarıdaki şablonda ad ile “name” ‘i karıştırmamalıyız.
[-X] kod satırının parçaları:
PuanBord: masa gibi genel bir isimdir.
lakap: bu nesnenin özel ismidir. Ali, Ahmet gibi…
name: bu nesnenin lakabıdır. Bir insanın lakabı resmiyette hiçbir şey ifade etmediği gibi name de burada hiçbir şey ifade etmez aslına bakarsanız. Ama programı kullanırken nesnenin adını ekrana yazmak için kullanacağız.
*/
/*
Get & Set Komutları
Parametresi(parantezleri “()”) olmayan metotlarda bilgi giriş çıkışını kontrol eden komutlardır. İkisinin de aynı anda kullanılması şart değildir.
Get: Metottan bilgi çıkışını sağlar.
Set: Metoda bilgi girişini sağlar.
Kısaca get ve set bir metodun bilgi akışını sağlayan iki kanaldır. Ve en önemli faydaları ise bilgiyi filtrelememize imkan vermeleridir. Bu özellikleri neden bu metotların kullanıldığının da en belirgin cevabıdır. Yani değişkenleri, public olarak sunmayıp da değişkenlere dolaylı bir yol ile etkileşim izni vermemizin en sağlam cevabıdır.
Örneğin int Level metodu TextBox sınıfının (string) Text metodu ile aynı yapıya sahip metottur. Farklılıklar da var tabi ki int-string farkı gibi…
Çağırma şekilleri:
textBox1.Text;
puanBoard1.Level;
*/
/*
Void: Boş anlamına gelir. Bir değer döndürmeyen ve sadece iş yapan metotlar void olarak tanımlanabilir.
*/
Belirlediğimiz sabitleri tanımladığımız bir metot üstü yapıdır. Bir nevi değişken oluşturuyoruz da diyebiliriz ama değişkenlerden çok farklıdırlar. Mesela boolean değişkenin saklayabileceği değerler true ve false ‘dır. Enumlar ile bir nevi sadece x kadar değer a, b, c, … vs. gibi değerler alabilen bir tür değişken yapıyoruz diyebiliriz. Ama şunu da unutmayalım değişkenlerden çok ama çok ilkel bir yapıdır. Enumu başka bir benzetme ile sabit bir dizi olarak da tanımlayabiliriz.
Enumlar bize ne sağlar ve biz burada ne gibi faydalar gördük ?
Görüldüğü gibi üç farklı işi, bir switch yardımı ile tek bir metotta, void Execute’ta birleştirdik.
Bu işleri 3 ayrı metoda da yaptırabilirdik ama böyle daha düzenli gibi…
Bu 3 işi tek bir metotta birleştirince bir sorun ortaya çıktı.
İşler arasında seçim yapmak gerekiyor. Bunu da bir parametre belirleyerek yapabiliriz. Parametremizin de türünü belirlemeliyiz, string, int vs.
Parametremizi int olarak tanımlasaydık değerlerini 0, 1 ve 2 olarak belirleyecektik. Bu sefer de yeni bir problem ile karşılaşacaktık, parametreye girilen değerin kontrol gibi bir problem. Çünkü int değişken -21474648 …21474647 (tam sayı) arası değer saklayabilir.
Bu problemden de kurtulabilmek için iki seçeneğimiz var. Ya switch’e default komutunu ekleyebilir ya da enum bir yapı oluştururuz.
*/
Önerilen diğer yazılar:
NTP C# Dersi 14: Form Uygulaması Geliştirme
Saygılarımla:Muhammet AYGÜN
0 Yorum