Değer Türleri ve Referans Türleri

Türler kategori olarak değer türleri (value types) ve referans türleri (referance types) olmak üzere ikiye ayrılmaktadır. Eğer T değer türlerine ilişkinse, T türünden bir değişken bildirdiğimizde bu değişken değerin kendisini tutar. Eğer T kategori olarak referans türlerine ilişkinse, T türünden bir değişken bildirildiğinde o değerin kendisini tutmaz. Yalnızca bir adres tutar. Asıl bilgi o adreste belirtilen bellek bölgesindedir.

Bugüne kadar görmüş olduğumuz int, long, double gibi temel türlerin hepsi kategori olarak değer türlerine ilişkindir. Referans türlerine ilişkin olan türler türünden bildirilmiş olan değişkenlere referans da denilmektedir.
Sınıflar kategori olarak referans türlerine ilişkindir. Yani bir sınıf türünden bir değişken bildirildiğinde biz bir referans bildirmiş oluyoruz.
Bir sınıf türünden değişken bildirdiğimizde biz yalnızca bir referans bildirmiş oluyoruz. Yani yalnızca o referansın kendisi için bir yer ayrılmış olur. Bir sınıf referansının gösterdiği yerdeki bilgi topluluğuna nesne (object) denilmektedir.
Sınıf nesneleri new operatörüyle heap denilen bölgede yaratılır. new operatörünün genel biçimi şöyledir:
new ([argüman listesi])
Bir sınıf nesnesi bileşik bir nesnedir. Bileşik nesneler bir ya da birden fazla değişkenden oluşan bir değişken topluluğudur. Bir sınıf nesnesi için new operatörüne tahsisat yapıldığında yalnızca nesne için sınıfın static olmayan veri elemanları kadar yer ayrılır. Yani sınıf nesnesinin içerisinde static veri elemanları için ve metodlar için yer ayrılmaz. Sınıf nesnesi bellekte ardışıl bir biçimde yani veri elemanları peşi sıra olacak biçimde yaratılır. new operatörü yaratılan toplam nesnenin başlangıç adresini geri döndürür. new operatörüyle yaratılan nesnenin adresi aynı türden bir referansa atanmalıdır.

Heap’te nesneler görelik oalrak yavaş bir biçimde yaratılır.

Nokta Operatörü

Nokta operatörü 2 operantlı ara ek bir operatördür. Nokta operatörünün solundaki operant ya bir isim alanı ismi ya bir sınıf ismi ya da bir sınıf türünden referans olabilir. Eğer sol taraftaki operant bir isim alanı ismi ise sağ taraftaki operant o isim alanındaki bir sınıf ismi olur. Sol tarafındaki operant bir sınıf ismi ise sağ tarafındaki operant sınıfın static bi elemanı olmak zorundadır. Bir sınıf referansını nokta operatörüyle kullandığımızda, sınıf nesnesinin herhangi bir parçasına erişebiliriz. r bir sınıf türünden referans a da sınıfın static olmayan bir veri elemanı olmak üzere r.a ifadesi r referansının gösterdiği yerdeki sınıf nesnesinin a parçası anlamına gelir.

Aynı türden 2 sınıf referansı birbirine atanabilir. Bu durumda referanslar arasındaki adresler atanmaktadır. Aynı türden 2 sınıf referansı birbirine atandığında artık bu iki referans aynı nesneyi gösteriyor duruma gelir. Nesneye hangi referansla erişildiğinin bir önemi kalmaz. Örneğin:

Derleyici sınıf bildirimini gördüğünde henüz bir yer ayırmaz. Sınıf bildirimi nesnenin parçalarını bildirir. Her new işlemi yeniden farklı bir nesnenin yaratılmasına yok açmaktadır.

Farklı türden iki sınıf referansını birbirine atayamayız.

Leave a Reply

Site Footer