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)'dır. 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.
Bildiginiz
gibi, C# dilinde tasarlanmis bir sinifta iki temel unsur bulunur.
Birincisi sinifin özellikleri (fields), ikinicisi ise sinifin metodlari
(methods)'dir. Herhangi bir sinifin özellikeri sinifta tutulan ilisikili
verilerlerdir. Diger taraftan sinifin bizim için degisik isleri yapmasini
metodlari vasitasiyla saglariz. Sinif tasarimi çok önemli bir is
olup; deneyim, konsantrasyon ve dikkat ister. Sinifimizin
özelliklerini tutan veriler program akisi sirasinda sinif disinda degistirilebilir
veya bu degerlere ulasmak istenebilir.
Bu durumda
akla ilk gelen çözüm sinifin verilerinin hepsinin disaridan ulasilabilmesini ve
degistirilebilmesine olanak saglayan public anahtari ile tanimlamakdir.
Asagidaki programda bu tür bir çözümün uygun olabilecegi düsünülmüstü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(); } } } |
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(); } } } |
Fakat yukaridaki yöntemi genelde C++ programcilari kullanir(di). Bizler C# programcilari olarak daha gelismis bir yöntem ile sinif içindeki degerleri degistirmek ve ulasmak için özellik (Property) aracini kullaniriz. Asagidaki program ise C#'in özellikleri nasil kullandigina 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(); } } } |
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; } } } |
Bu makalemizde C# dilinde yeralan özellik (Property) kavramini inceledik. Bir ilerleyen makalelerimizde sadece yazilabilir (read-only) ve sadece okunabilir (write-only) özellik yazmayi ve kullanmayi inceleyecegiz.
Hiç yorum yok:
Yorum Gönder