|
C# Dilinde Özellikler - 1 |
|
Gönderiliyor lütfen bekleyin... |
|
|
Nesne yönelimli
programlamanın günümüzde ne kadar yaygın olduğunu programlama ile ilgilenen
herkes bilmektedir. Nesne Yönelimli Programlama (NYP) yaklaşımında temel
olan prensiplerden birisi bilgi gizleme (information hiding)'dir. Bu
prensibi projelerimizde uygulamak için C#'in sunduğu en önemli araçlardan
biri olan sınıf özellikleri (class properties) konusunu inceleyeceğiz.
Bildiğiniz gibi, C#
dilinde tasarlanmış bir sınıfta iki temel unsur bulunur. Birincisi
sınıfın özellikleri (fields), ikinicisi ise sınıfın metodlari (methods)'dır.
Herhangi bir sınıfın özellikeri sınıfta tutulan ilişikili
verilerlerdir. Diğer taraftan sınıfın bizim için değişik işleri yapmasını
metodları vasıtasıyla sağlarız. Sınıf tasarımı çok önemli bir iş
olup; deneyim, konsantrasyon ve dikkat ister. Sınıfımızın
özelliklerini tutan veriler, program akışı sırasında sınıf dışında
değiştirilebilir veya bu değerlere ulaşmak istenebilir.
Bu durumda akla ilk
gelen çözüm sınıfın verilerinin hepsinin dışarıdan ulaşilabilmesini ve
değiştirilebilmesine olanak sağlayan public anahtari ile
tanımlamakdir. Aşağıdaki programda bu tür bir çözümün uygun olabileceği
düşünülmüştür:
using
System;
namespace
Property_Makale
{ class Otomobil { public int model; public string marka; public string renk;
public Otomobil(int model,
string marka, string renk) { if(model>DateTime.Now.Year) this.model=DateTime.Now.Year; else
this.model=model;
this.marka=marka; this.renk=renk;
}
public void OzellikleriGoster() { Console.WriteLine("\nOtomobilimizin
Özellikleri: "); Console.WriteLine("\t
Marka: "+ marka); Console.WriteLine("\t
Model: "+ model); Console.WriteLine("\t
Renk: "+ renk+"\n" ); } }
class OtomobilTest { static void Main(string[]
args) { Otomobil
oto1 = new Otomobil(2000, "BMW" , "Siyah"); oto1.OzellikleriGoster();
oto1.model=300;
oto1.OzellikleriGoster(); } }
}
|
Yukarıdaki kod
örneğimizde iki tane sınıf bulunmaktadır. Otomobil
sınıfı ile otomobil nesnelerimizi oluşturabiliriz. Ayrıca bu sınıfın OzellikleriGoster()
metodu ile
herhangi bir otomobil nesnemizin özelliklerini görmek için ekrarana yazdırıyoruz.
İkinci sınıfımızda (OtomobilTest) ise Otomobil
sınıfımızdan nesneler oluşturmak ve onların özellikerini çağırmak için kullanacağız.
Şimdi isterseniz Main() fonksiyonunu incelemeye başlayalım. Metodun hemen ilk
başında oto1 isimli nesnemizi oluşturuyoruz. oto1 nesnemizin
özellikleri 2000 model, siyah ve BMW olsun. Bir sonraki satırda oto1
nesnemizin modelini 300
yapıyoruz. İşte burda büyük bir hata yapılıyor! Çünkü 300 yılında henüz otomobil
üretilmemişti. Böyle bir hatayı nasıl önleriz? Çözüm olarak otomobil nesnemizin herhangi
bir özelliğini değiştirmek için ayrı bir metod yazmamız gerekir. O zaman
programızı şu şekilde değiştirmemiz gerekiyor:
using
System;
namespace
Property_Makale
{ class Otomobil { private int model; public string marka; public string renk;
public Otomobil(int model,
string marka, string renk) { if(model>DateTime.Now.Year) this.model=DateTime.Now.Year; else
this.model=model;
this.marka=marka; this.renk=renk;
}
public void OzellikleriGoster() { Console.WriteLine("\nOtomobilimizin
Özellikleri: "); Console.WriteLine("\t
Marka: "+ marka); Console.WriteLine("\t
Model: "+ model); Console.WriteLine("\t
Renk: "+ renk+"\n" ); }
public void ModelDegistir(int
yeniModel) { if(
(yeniModel>DateTime.Now.Year)||(yeniModel<1900) ) Console.WriteLine("Otomobilin
modeli su an ki yildan büyük veya 1900'den küçük olamaz ! "); else
this.model=yeniModel; } }
class OtomobilTest { static void Main(string[]
args) { Otomobil
oto1 = new Otomobil(2000, "BMW" , "Siyah"); oto1.OzellikleriGoster();
oto1.ModelDegistir(300);
oto1.OzellikleriGoster(); } }
}
|
Yukarıdaki programda
Otomobil sınıfına ModelDegistir(int
yeniModel) metodunu
ekledik. Bu metod ile modeli değiştirilecek nesnenin modelinin şu anda bulunulan
yıldan sonra ve 1900'den önce yapılmak istendiğinde hata mesajı veriyor ve modelini
değiştirmiyor. Ayrıca sınıf içindeki model değişkenin tanımlanmasında private
anahtarını
da kullandığımıza dikkat ediniz. Bu şekildeki bir yaklaşım ile hem sınıfın
iç işleyişini sınıf dışından saklamış oluyoruz hem de sınıfa ait verilerin değiştirilmesini
sırasındaki hataları en az seviyede tutmayı sağlıyoruz.
Fakat
yukarıdaki yöntemi genelde C++ programcıları kullanır(dı). Bizler C# programcıları
olarak daha gelişmiş bir yola sahibiz. Sınıf içindeki değerleri değiştirmek ve ulaşmak
için özellik (Property) aracını kullanırız. Aşağıdaki program ise C#'ın özellikleri
nasıl kullandığına bir örnektir:
using
System;
namespace
Property_Makale
{ class Otomobil {
private int model;
public string marka;
public string renk;
public Otomobil(int model,
string marka, string renk)
{
if(model>DateTime.Now.Year)
this.model=DateTime.Now.Year; else
this.model=model;
this.marka=marka;
this.renk=renk;
}
public void OzellikleriGoster() { Console.WriteLine("\nOtomobilimizin
Özellikleri: ");
Console.WriteLine("\t
Marka: "+ marka);
Console.WriteLine("\t
Model: "+ model);
Console.WriteLine("\t
Renk: "+ renk+"\n" );
}
public int Model
{
get
{
return model ;
}
set
{
if((value>DateTime.Now.Year)||(value<1900)
)
{
Console.WriteLine("Otomobilin
modeli su an ki yildan büyük veya 1900'den küçük olamaz ! \n");
}
else this.model=value;
}
} }
class OtomobilTest { static void Main(string[]
args) { Otomobil
oto = new Otomobil(2000, "BMW" , "Siyah");
Console.WriteLine("Otomobilimizin
modeli: "+ oto.Model);
oto.Model=300;
oto.OzellikleriGoster();
} }
}
|
Yukarıdaki programı
çalıştırdığımızda aşağıdaki sonucu alırız:
Çıktısını gördüğünüz
program kodunda C#'ın özellik tanımlama ve kullanma yöntemini kullandık. Özellikler ile
herhangi bir nesneye ait değişkenin değerini öğrenebilir ve değiştirebiliriz. Yukarıdaki
örnek kodda yeralan aşağıdaki kısımda bir özellik(Property) tanımlıyoruz. Genellikle
bir özelliğin ismi üzerinde iş yaptığı değişkenin ismi ile aynı olup sadece
ilk harfi büyük olur. Aslında bu bir zorunluluk değil. Sadece C#'da bu bir gelenektir.
Bu şekilde bir kullanım bizim kodumuzu okuyanların kodu daha kolay anlaması
ve bizim başkalarının kodlarını daha kolay anlamamıza yardımcı olur. Bir özelliğin
tanımında özellik isminden önce ne tür bir değer dönderecekse onun tipini belirtmeliyiz.
Bu genelde özelliğin ilgili olduğu değişkenin tipidir :-)
public
int Model {
get
{
return model ;
}
set
{
if((value>DateTime.Now.Year)||(value<1900)
)
{
Console.WriteLine("Otomobilin
modeli su an ki yildan büyük veya 1900'den küçük olamaz ! \n");
}
else this.model=value;
}
} }
|
Özellikler içinde
get ve set olmak üzere
iki ayrı blok kod olur. İstersek sadece get veya sadece set blokları olan özellikler
de yazabiliriz. get bloğunda ilgili değişkenimizin değerini dışarıya döndeririz.
set bloğunda ise değişkenimizin değerini değiştiririz. Burda gereken kontrolleri
yapıp daha sonra uygunsa girilen değeri kabul edebiliriz. Eminimki get bloğu
içinde dikkattinizi değişkeni ismi yerine value şeklinde
çağırmamız çekmiştir. Bu sayede kod içinde karışıklık olmaz. Zaten sadece bir
tane değişken üzerinde çalışıyorsunuz.
Bu makalemizde
C# dilinde yeralan özellik (Property) kavramını inceledik. Bir ilerleyen makalelerimizde
sadece yazılabilir (read-only) ve sadece okunabilir (write-only) özellik yazmayı
ve kullanmayı inceleyeceğiz.
Makale:
C# Dilinde Özellikler - 1 C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|