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.
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.
Ü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 Facebook