Nesne yönelimli programlama (Obejct Oriented Programming)
 
OOP yazılım dünyasında karmaşıklığı ya da boyutu artan yazılımların kolayca ve kısa sürede geliştirilebilmesi için özellikle tüm yazılım projelerinde kullanılmaktadır. Tüm modern programlama dilleri tarafından desteklenmedir. Nesneye yönelik programlama da 3 temel yapı üzerine durulur. 


Bunlar :
  • Veri Soyutlama
  • Kalıtım
  • Çok Biçimlilik
Öncelikle sınıf (class) ve nesne (object) nedir bunlara değinelim.
Sınıf (Class) , bir bütünü oluşturacak şekilde ortak özelliklere sahip olan üyelerin bir araya getirdikleri bütün olarak tanımlanabilir. Bunları daha sonra örneklendireceğiz.
Nesne (Object) ise, etrafımızda gördüğümüz ve tabiri eğer uygunsa “şey” olarak tanımladığımız varlıktır. Örnek verirsek; kalem, kağıt, defter, ben, onlar, Ahmet vs bunların hepsi birer nesnedir diyebiliriz. Nesnelerin iki temel bileşeni bulunur. Bunlar Özellik (Property) ve Davranış (Behavior)’dır. Nesne tanımlandığı sınıfın özelliklerini taşımaktadır.
Buradan anladığımız gibi, sınıf nesneyi tanımlayan bir veri türüdür denilebilir. Nesne ise bir sınıftan türettiğimiz ve onun özelliklerini taşıyan bir modeldir ve daha sonra tekrar tekrar kullanılacak olan parçalardır.
OOP, yazılım geliştirme sürecinde son derece etkili bir yöntemdir ve günümüz projelerinde vazgeçilmez olmayı sürdürmektedir. Bir yazılım geliştirmenin 3 temel aşaması bulunmaktadır, bunlar Tasarlama, Geliştirme ve Test Etme olarak tanımlanır. İlk aşamanın iyi olması sonucu geliştirme ve test etme süreçleri de hızlı ve doğru-kolay bir şekilde daha rahat gelişir, bu durum da tasarımda OOP’nin kullanılması sonucu gerçekleşebilir.

Sınıf ve Nesne Tanımlamak
public class meyve
{
meyve elma = new meyve();
}
Burada bir sınıftan bir nesne oluşturulmuştur. Bu şekilde sınıf belleğe taşınmış oluyor. Burada ki new operatörü ile meyve sınıfının bir kopyasını belleğe alıyoruz ve geriye dönen bellek adresini elma değişkeninde saklamış oluyoruz. Böylelikle, elma nesnenin kendisini değil aslında nesnenin yerini gösteren referansı tanımış oluyor.  C# temel düzeyde değer tiplerini bilirsiniz ki ikiye ayırıyoruz, değer tipleri ve referans tipleri, işte burada bizim tanımladığımız sınıfın altındaki nesneler aslında birer referans değişkeni olmuş oluyorlar.

Fields

Fieldler sınıf içerisinde veri barındıran alanlardır. , Fieldler referans veya değer tiplerinden herhangi birisi olabilir, Örn başka bir sınıfa referans gösteren nesnelerde bir sınıf içerisinde field olarak kullanılabilir.

Bir öğrencinin bilgilerini ve notlarını tutan basit bir sınıf yazalım.
class Ogrenci
{
    //sınıfa ait fieldler
    string adSoyad;
    int yas;
    int numara;
    int matematikNotu = 0; //ilk deper verilmiş..
    int ingilizceNotu;
    int dersOrtalama;
}

Nesne Oluşturulması ve Nesneye Değer Ataması

Bir sınıfı referans gösterecek bir nesne oluşturmak için new anahtar kelimesi kullanılır.

Ogrenci ogrenci = new Ogrenci();
//İlk olarak nesneyi tanımlayıp daha sonra oluşturabilirsiniz..
Ogrenci ogrenci2;
ogrenci2 = new Ogrenci();
Yukarıdaki örnekte tanımlama yaparken Ogrenci ogrenci2; kod parçacığı Ogrenci tipinde bir referans oluşturur, fakat bu referans herhangi bir nesne içermez. Bu yüzden bu referansın değeri nulldur. ogrenci2 = new Ogrenci();dediğimizde ise heap de bir nesne oluşturulur ve referans değişkenimiz bu alana işaret eder.

Bir Sınıfın Üyelerine Erişmek

Bir sınıfın üyelerine (field, metot veya properties gibi) erişmek için sınıfa ait nesneden sonra nokta operatörünü kullanırız.

Ogrenci ogrenci = new Ogrenci();
ogrenci.adSoyad = "Ahmet Oğuzhan YANIK";
ogrenci.yas = 27;
ogrenci.matematikNotu = 89;
ogrenci.ToplamBul(13, 43);
int matnot = ogrenci.MatematikNotunuDondur();

Erişim Belirleyiciler ve Erişilebilirlilik Seviyeleri

Bir sınıfa ait üyeler için erişilebilirlilik konusu önemlidir. Peki, Erişilebilirlilik ne demektir? Erişim belirleyiciler kullanarak bir üyenin güvenliğini sağlamış oluruz. Eğer bir üyeye sınıfımız içindeki metotlar dışında herhangi bir erişim yapılmasını istemiyorsak veya projemiz dışında herhangi bir yerden bu üyeye erişim izni vermek istemiyorsak erişim belirleyicileri kullanmak zorundayız.
Peki, erişimi engellemenin mantığı ne? Bir web servis yazdık ve bu web servisimiz içinde tanımladığımız bir sınıf var. Bu sınıfa ait bir üyenin sadece web servis içinde tanımlanmış ve ya web servis projesi içinde tanımlanmış üyeler tarafından erişilmesini istiyoruz. Web servisi kullanan insanların bu üyeye ait değerleri set etmesi veya get etmesi işimize gelmiyorsa, bu üyenin erişilebilirliliğini kısıtlamamız gerekir. C# da kullanabileceğimiz toplam 5 farklı erişim seviyesi bulunuyor. Bunları liste halinde aşağıda verdim.
Erişim Belirleyici
Açıklama
private
Erişim seviyesi private olarak ayarlanan üyelere sadece bu üyenin bulunduğu sınıf içerisinden erişilebilir.
internal
Sadece üyenin bulunduğu proje içerisinden erişilebilir.
protected
Sadece üyenin bulunduğu sınıf ve bu sınıftan türemiş alt sınıflardan erişilebilir.
protected internal
Sadece üyenin bulunduğu proje içerisinden ayrıca üyenin sınıfından türemiş alt sınıflar tarafından erişilebilir.
public
public üyelerin erişiminde herhangi bir kısıtlama yapılmaz. İstenilen her yerden üyeye erişim açıktır.
Object Oriented programlamada tüm sınıf fieldlerinin private yapılması ve bu fieldlere erişimin metotlar ve/veya Özellikler(properties) üzerinden sağlanması tavsiye edilir. Bu sayede fieldlerimize dışarıdan verilecek değerler kontrol edilebilir. Aksi takdirde dışarıdan fielde verilecek değerleri kontrol etmemiz imkânsızdır.

       Üye tanımlarken eğer bir erişim belirleyici kullanmazsak C# default olarak üyemizin erişim seviyesini private yapacaktır.
Namespaceler hariç tüm veri tipleri için erişim belirleyici kullanabilirsiniz. Fakat üst seviye tipler için (sınıf, struct, enum) için sadece public ve internal erişim seviyelerini kullanabilirsiniz.

Yorum Gönder Blogger

 
Üst