Ders-3 OOP Class Members

OOP nin temeli olan class ların içerisine yazılan elemanları yani class memberları inceleyeceğim. OOP’nin temel kavramını bu bileşenler ile beraber daha rahat kavrayarak zihniminde somutlaştırmaya doğru ilerleyeceğiz.

Field

OOP de bir nesne içerisinde barındırılan en temel yapılanmadır. Nesne içerisinde veri depolardığımız/tuttuğumuz yerdir. Bir class ım var var bu class dan üretilen binlerce nesne var. Bu nesnelerimin içerisinde ise kendine ait alanlara field denir. Class içerisindeki değişkenlerdir. Türlerine özgü değer alırlar. Method un, propery scope unun veya main in içerisinde tanımlançış alanlara field denmez. Field yalnızca ve yalnızca class içerisinde tanımlanır. Kısaca field dediğimiz yapılanma nesne nin üzerinde değer tutmamızı sağlayan yapılanmadır.

Nesne Oluşturma

MyClass m1 = new MyClass();

Söz Dizimi:

‘Klas İsmi’ ‘Değişken ismi’ = new ‘Klas ismi’

Teknik:

MyClass m1 — Ram in stack kısmına m1 isimli değişken oluşturur ve MyClass ı işaretler.

new MyClass(); — Ram in heap kısmına MyClass ı koyar.

Varsayılan değer:

Yalnızca fieldların varsayılan değerleri vardır. Örnek olaraka; class içerisinde tanımladığımız değişkene(field) hiçbir değer atamazsakta o değişkenin varsayılan değeri vardır(int=0, char=’/0′,bool=false). Eğer method içerisinde tanımlarsak ve değer atamadan kullanırsak değer atamamız için hata verecektir.

Property

Nesne içerisinde bir özellik/property sağlar. Özünde bir methodtur. Fiziksel olarak method dan farkı parametre almamakta ve içerisinde get ve set olmak üzere iki adet blogk almaktadır. Eğer property çağrılırsa get blogu, property ye değer atanıyorya set blogu tetiklenir. İşlevsel olarak methoddan farkı yoktur.Davranışsal olarak farkı vardır. Bu get ve set blokları compile esnasında get ve set isimli methodlar olarak karşımıza çıkmaktadırlar.

Property nerede ne amaçlar kullanılır?

Nesnelerin içerisindeki fieldlara direkt erişim istemeyiz. Dolayısıyla field’lar da ki verileri kontrollü bir şekilde dışarıya açmak isteriz. Bu kontrolü property sağlamaktadır. Bu işlemi birçok dilde methodla yaptığımız gibi c# da da methodla yapabiliriz ancak bunun için tasarlanmış özel bir yapıdır propertydir. Yani bu durumlar için C# dilinde method yerine property yapıları geliştirilmiştir. Kısaca property yapıları özünde nesne içerisindeki bir field’ın dışarıya kontrolü açılmasını ve kontrollü bir şekilde dışarıdan değer almasını sağlayan yapılardır. Propertylerin bu işlevini kapsülleme/sarmalama/encapsulation denir. Propertylerin isimleri temsil edecekleri fieldların baş harfleri büyük olacak şekilde tasarlanırlar.

Encapsulation

Encapsulation, bir nesne içerisindeki dataların(field’lardaki verilerin) dışarıya kontrollü bir şekilde açılması ve kontrollü bir şekilde veri almasıdır.

Property İmzaları

Property yapısı oluşturabilmenin yapısal olarak birkaç farklı yolu/farkı imzası vardır

1- Full Property

2- Prop

3- Auto Property Initializerts

4- Ref Readonly Return

5- Computed(Hesaplanmış) Properties

6- Expression-Bodied Property

7- Read Only Property

8-Init-Only Properties ve Init Accessor

— Full Property

En sade property yapılandırmadır.

İçerisinde geç ve set blokları tanımlanmalıdır.

Full propertlerde set blogu tanımlanmazsa sadece okunabilir(read only) aynı şekilde get blogu tanımlanmazsa sadece yazılabilir(write only) olacaktır.

Söz dizimi:

[erişim belirleyicisi] [property’nin türü] [property adı]

{

get { }

set { } //Gönderilen – set edilen değer ‘value’ keyword ü ile yakalanır.

}

–Porp

Bir property her ne kadar encapsulation yapsada temsil ettiği field’da ki dataya hiç müdahale etmeden erişilmesini ve veri aranmasını sağlıyorsa böyle bir durumda kullanılan property imzasıdır. Bu propertylerde field tanımlamaya gerek kalmaz, arkada compiler kendisi ilgili field ı oluşturacaktır. Hiçbir işlem yapmasak bile field a bu şekilde erişmek ahlak açısından önemlidir.

Söz dizimi:

[erişim belirleyici] [property’nin türü] [property adı] { get; set;}

–Auto Property Initializers (C# 6.0 ile hayatımıza girmiştir.)

Bir property’nin ilk değerini nesne ayağa kaldırılır kaldırılmaz aşağıdaki gibi verebiliriz. Prop property’ler readonly olabilir ancak write only olamaz. Sebebi ise yazdıktan sonra kullanılamamasının mantık dışı olmasıdır. Auto property initializers özelliği sayesinde read only olan prop’lara hızlıca değer atanabilmektedir.

Söz dizimi:

[erişim belirleyici] [property’nin türü] [property adı] { get; set;} = değer;

Ref Readonly Return (C# 7.2 ile hayatımıza girmiştir.)

ref readonly returns, bir sınıf(class) içerisindeki field’ı referansıyla döndürmemizi sağlayan ve biryandan da budeğişkenin değerini read only yapan özelliktir.

string adi = “Test Name”

public ref readonly string Adi =>ref adi;

Ref Neydi Hatırlayalım

ref : Method un parametresine verilen değerin eğer bir değişkenden geliyorsa değişkeni değil değişkenin referansını methodun içerisine almamızı sağlayan bir keyword dür.

–Computed(Hesaplanmış) Properties

İçerisinde türetilmiş bir bağlantı taşıyan property’lerdir.

Örnek olarak;

int s1=5;

int s2=10;

public int Topla

{

get

{

return s1 + s2;

}

}

–Expression-Bodied Property

Tanımlanan property’de Lambda Expression kullanmamızı sağlayan söz dizimidir. Read only dir; Expression-Bodied propertyler, kısmi olarak Auto Property Initializer’ın akrabasıdır diyebiliriz. İkiside ilk değerlerini alırıyor gibi düşünebiliriz.

Örnek olarak;

public string Cinsiyet => “Erkek”;

–Init-Only Properties – Init Accessor (C# 9.0 ile birlikte hayatımıza girmiştir.)

Init-Only Propertyies, nesnenin sadece ilk yaratılış anında propertylerine değer atamaktadır. Böylece iş kuralı gereği run time’da değeri değişmemesi gereken nesneler için bir önlem alınmaktadır. Inıt-Only properties, developer açısından süreç esnasında değiştirilmemesi gereken property değerinin “yanlışlıkla” değiştirilmesinin önüne geçmekte ve böylece olası hata ve bug’lardan yazılımı arındırmaktadır.

Inıt-Only Properties in Auto Propertyden farkı;

MyClas m1 =new MyClass

{

Name = “TestName”

}

Init-Only nesne oluştururken initializers’ a izin vermektedir. Auto property ise buna izin vermemektedir.

Metot

Nesne üzerinde, field’larda ki yahut dışarıdan parametreler eşliğinde gelen değerler üzerinde işlemler yapmamızı sağlayan temel programatik parçalardır.

Indexer

Nesne indexer özelliği kazandıran, fıtrat olarak property ile birebir aynı olan elemandır.

Söz Dizimi:

[erişim belirleyicisi] [geri dönüş değeri] this [parametreler]

{

get {};

set {};

}

Örnek olarak;

public class MyClass

{

public int this[int a]

{

get

{

return a;

};

set {};

}

}

Çağrılışı;

MyClass myClass=new MyClass();

myClass[5]=10;

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir