Object Oriented Programming (Encapsulate) Ders 1
Merhaba,
Kısa bir aradan sonra tekrar karşınızdayım. Uzun zamandır aklımda olan ve bir çok yazılımcı adayınında sıkıntısı olarak gördüğüm konulardan birine deÄŸinmek istedim. Nesne Tabanlı Programlama… Herkes bu yapıya ne gerek var, aman kim uÄŸraşır bunlar, kod yazımını uzatıyor vs vs gibi söylemler ile burun kıvırmaktadır. Ancak iÅŸin rengi öyle deÄŸil. Özellik c# dilini kullanan her yazılımcının bu yapıyı en ince ayrıntısına kadar bilmeli ki projenin ortasında gelen deÄŸiÅŸikliklerde, ya da sonrasında gelen deÄŸiÅŸikliklerde saçı başı yolmasın. Kısa bir giriÅŸ yaptıktan sonra konumuza geçelim. (OOP bittikten sonrada tasarım pattern lerine geçmeyi planlıyorum hadi bakalım, baÅŸlayalım ufaktan)
Önce şunu kesinleştirelim. Yazılımda sınıflarımız var dır. Bu sınıfların üyeleri de bizim nesnelerimizdir. Hemen gerçek hayattan bir örnek verelim. Sınıf bildiğimzi sınıf. Sınıftaki öğrenciler de bizim nesnemiz, sınıftaki sıralarda bizim nesnemiz, sınıftaki tahta da bizim nesnemiz.
Burada oluşturmak istediğim mantık aslında şu. Ortak özelliği olan ancak birbiri içerisinde farklılık gösteren bir çok nesne olabilir, ve biz bu nesneleri sınıf kümesi içerisine alabilir, bu sınıfıda dilediğimiz zaman dilediğimiz yerden çağırarak kullanabilir aynı kodu 5 10 ayrı yerde yazmaz hem takibini kolaylaştırır hemde kod üzerindeki hakimiyetimizi arttırırız.
Hemen bir kod örneği yapalım :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Class Ogrenci { string adi; string soyadi; double boyu; string cinsiyeti; int yasi; } |
Gördüğünüz üzere bir sınıf oluşturdum. İçerisine değişkenlerimi tanımladım. Ancak burada şöyle bir problem var. Ben bu sınıftan ram üzerine yeni bir sınıf oluşturduğumda alt özelliklerine (Property) yani değişkenlerime ulaşamamaktayım. Neden mi ? Çünkü bu propertylerin access modifier olarak adlandırılan erişim yapıları default olarak private gelmektedir. Bizim bunu public olarak işaretlememiz gerekli ki projemizin heryerinden bu yapılara ulaşabilelim.
O zaman kodumuzu ÅŸu ÅŸekilde revize edelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Ogrenci { public string adi; public string soyadi; public double boyu; public string cinsiyeti; private int yasi; } |
Aldığım ekran görüntüsünde de gördüğümüz üzere artık Ogrenci adında bir sınıfımız ve bu sınıfın altında adi, boyu, cinsiyeti, yasi gibi nesnelerimiz mevcut.
Ancak burada bilinmesi gereken önemli bir husus bulunmaktadır. Biz bir nesneyi public yaptığımızda programımızın herhangi bir yerinden herhangi bir olay bu property mize ulaşabilir ve değerini değiştirebilir. İşte bu noktada kodlar kontrolümüzden çıkıp bizi istenmeyen yerlere taşıyabilir.Bir örnek ile açıklayacak dosyalarda yazma ve okuma koruması bulunmaktadır. Biz bu yazma korumasını herkese açar isek herkes yazar o zaman okunacak olan veri de değişir. Biz OOP yapısının en temel mantığı ile buna engel olmalıyız. (Gereken yerlerde)
İşte bu işlemin adı Encapsulate (Kapsülleme) olarak geçmektedir. Aslında yapı çok kolaydır.
Yukarıdaki örnek üzerinden devam ediyorum.
Yasi değişkeni dışarıdan değiştirilmesin istiyorum. O zaman öncelikle sınıfımın içerisinde public olarak tanımladığım yaşi değişkenimi private olarak tanımlıyorum.
Artık ekran görüntüsünde gözüktüğü üzere dışarıdan bu nesneye ulaşamıyorum.
Şimdi ise bir method gibi bir yapı yazacağım. Amacım Public bir yapı  sayesinde bu sınıfın bu nesnesine sadece benim istediğim şekilde ulaşım olacak. Yani direk nesneye değil, benim yazdığım yapıya ulaşılacak benim yapım  bu nesneye ulaşacak.
1 2 3 4 5 6 7 8 9 |
public int Yasi { get { return yasi; } set { yasi = value; } } |
Yukarıda yazdığım blok sayesinde ben get diyerek yasi içerisindeki value (değer) yu alabilir ya da set sayesinde yasi nesnesine bir değer atayabilirim.
Her bir nesne için bu bloğu yazarsak işimiz uzar dememek lazım bu işlemi yapmak lazım. Bu nesne tabanlı programlamanın en temel taşlarından biridir.
Dipnot :Visual Studio kullanan arkadaşlar için kısa bir yoldan da bahsetmeden olmaz.
Sınıfımız içerisinde kapsüllenecek olan nesnenin (private int yasi) gibi adının üzerine mouse yardımı ile tıklayıp Ctrl tuşuna basılı iken sırası ile R ve E harflerine bastığınızda karşınıza encapsulate field ekranı gelecektir. Sırası ile ok ve apply sekmesine bastığınız takdirde kapsülleme işlemi sizin adınıza yapılacaktır.
Ekran görüntüsünde gördüğümüz üzere en altta Yasi adında kapsüllenmesi tamamlanmış bir propertymiz hali hazırda kullanımımıza sunulmuştur.
Bu yazımız aracılığı ile OOP nin yanin Nesne Tabanlı Programlamanın temellerini attık.Bir sonraki yazımda Constructor Method, Overload gibi yapıları inceleyip aynı örneğimizi genişleteceğim.
İyi Günler Dilerim,