9 Mart 2010 Salı

Object Oriented Programming (2) - Common Type System(CTS)

Common Type System(CTS)

OOP'a başlamadan önce Visual Studio .NET de kullanılan veri tiplerinden bahsedelim. .NET içerisinde kullanılan tiplerin tümü ortak bir isim altında toplanır. Bu isme "Common Type System(CTS)" denir. CTS iki bölümde incelenir. Bunlar;

• Value Type
• Reference Type

dır.

Value Type : Bu türdeki veri tiplerinin en önemli özelliği RAM de Stack bölümünde saklanmasıdır. Value Type en iyi örnek string hariç standart değişken tipleridir.(int,long,bool).















Value Type değişkenler tanımlandığı zaman RAM de(Stack bölümünde) ,değişken tipinin boyutları ölçüsünde, belirli bir alan(int için 4 byte, long için 8 byte gibi) reserve edilir. Değişkenin kullanımı sona erdiği zaman o değişken için ayrılmış alan serbest bırakılır.


Reference Type : Bu türdeki veri tiplerinin en önemli özelliği Ram de Heap bölümünde saklanmasıdır. Reference Type'ları C++'da ki Pointerlara benzetebiliriz. Reference Type en iyi örnek Class'lardır.

 
 
 
 
 
 
 
 
 
 
 



Value Type değişkenlerin en önemli özelliği bu tür değişkenlerin sınırlarının belli olmasıdır. Yani int bir değişken tanımladığınız anda alacağı değer yaklaşık olarak -2 Milyar ile + 2 Milyar arasında(-2.147.483.648 ile +2.147. 147.483.647) bir değerdir. Oysa Referens Type değişkenlerin alacağı değerler değişebilir. Bu durumun en güzel örneği string değişkenlerdir. Herhangi bir string değişkenin değeri program içerisinde sürekli değişebilir. Özellikle bir Text dosyadan satır satır veri okuyorsanız, her okuduğunuz satır için string değişkenin değeri farklı olacaktır. Bu yüzden Referens Type değişkenler RAM'de Heap bölümünde tanımlanır. Çünkü Heap bölümü program çalışırken, belirli bir bölümü reserve edebilme ve serbest bırakabilme işlemlerini yapabilen genel bir bölümdür.


Referens Type değişkenlerde, değişkenin kendisi Stack bölümünde, değişkenin referansı ise Heap bölümünde saklanır. O zaman değişkenin değeri, ilgili referansın tutulduğu Heap bölümünde saklanır. Heap bölümü değişkenin alacağı değerlere göre büyüyüp küçülebilir, fakat Stack bölümü sabittir.

Bir örnekle bu durumu açıklamaya çalışalım. Örneğin string bir değişken(string metin;) tanımladığınız anda stack bölümünde 4 byte'lık(İşletim Sistemini 32 bit varsaydım) yer reserve edilir. Tanımladığımız metin değişkenine bir değer atamadığımız sürece Heap bölümünde bir alan reserve edilmez.

Şimdi bu değişkene bir atama işlemi yapalım.

metin = "tamers";

Artık Heap bölümünde string ifadenin tamamı için bir alan reserve edildi. Böylece metin değişkenimizin kendisi Stack, değişkenin referansı ise Heap bölümünde depolanır.

Önemli bir noktadan bahsetmeden geçmeyelim. Null string ile boş string aynı şey değildir. Bir string null ise stack bölümünde saklanan değer yoktur ve heap bölümünde bir alan reserve edilmez. Fakat değişkeninizin değeri boş bir string'e(metin ="";) eşitse, değişkenimizin kendisi Stack, değişkenin referansı ise Heap bölümünde saklanır.

İki veri türü arasındaki bir farkta bu verilerle işimiz bittiğinde geri iade ediliş şekilleridir. Value Type'lar ile işimiz bittiğinde bunların Stack de kapladıkları alanlar otomatik olarak Stack'lere geri verilir. Ancak Referans Type'larda sadece Stack'lerde ki başvuru sisteme geri verilir. Verilerin tutulduğu Heap'de ki alanlar, Garbage Collector’un denetimindedirler ve ne zaman sisteme iade edilicekleri tam olarak bilinmez.

 
 
 
 

Hiç yorum yok: