JavaScript Temelleri

Bölüm 15

Kullanıcı Tanımlı Nesneler

Bölüm 15 Sayfa 5

15.4.2 - Prototip Transferinden Yararlanılarak Gerçekleştirilen Üst Sınıf / Alt Sınıf Hiyerarşisi

Prototip transferinden yararlanılarak, gerçekleştirilen, üst sınıf / alt sınıf hiyerarşisinde, alt sınıf oluşturulması, tanımlanmış bir sınıfın örneğini, yeni bir prototipe atanması ile gerçekleşir. Örnek:

var a = function() {};
b.prototype = new a;
		

veya,

function a() {
}

b.prototype = new a;
		

veya,

var a = new Function();
b.prototype = new a;
		

program adımlarının tümü, a sınfının üst sınıf, b sınıfının da alt sınıf olarak, hiyerarşik olarak yapılanmasını sağlar ve prototip zincirini başlatır.

Prototip ilişkisinin kurulmasında, prototip transferinin, yapılandırıcı fonksiyonun tanımından önce veya sonra yapılmış olması farketmez. Ayrıca, programda önceden yaratılmış olan nesne örnekleri varsa, bu yeni yapı değişikliği onların yapısına da yansıyacaktır.

Prototip transferi yöntemi ile nesne hiyerarşisinin oluşturulması yönteminin açıklayıcı bir uygulaması için önce çok basit bir üst sınıf yapısı ile başlayalım:

function a(üstSınıfBaşlangıçDeğeriX, üstSınıfBaşlangıçDeğeriY, üstSınıfBaşlangıçDeğeriZ) {
this.üstSınıfÖzelliğiZ = üstSınıfBaşlangıçDeğeriZ || 'üstSınıfVarsayılanDeğeriZ';
this.üstSınıfÖzelliğiY = üstSınıfBaşlangıçDeğeriY || 'üstSınıfVarsayılanDeğeriY';
this.üstSınıfÖzelliğiX = üstSınıfBaşlangıçDeğeriX || 'üstSınıfVarsayılanDeğeriX';
}
		

Budan sonraki adım, bir alt sınıf yapılandırıcı fonksiyonu tanımlanmasıdır:

function b() {
}
		

Alt Nesne sınıfının yapılandırıcı fonksiyonu hiçbir özgün veri alanını içermemektedir. Yani alt sınıfın tüm veri alanları üst sınıftan kalıtım yolu ile aktarılacaktır.

Bundan sonraki aşama, üst ve alt sınıflar arasında prototip transferinin sağlanmasıdır. Bu da çok basit, tek satırlık bir ifade ile gerçekleştirilebilecektir:

b.prototype = new a;
		

Hepsi bu kadar! Bu anda tüm hiyerarşi zinciri oluşmuş ve a üst sınıfının tüm alanları, b alt sınıfının yapısına transfer olmuştur. Üstelik bu hiyerarşi, dinamik kalıtımı destekleyen en üst düzey hiyerarşi sistemidir. Fakat sadece bir tek üst sınıftan kalıtım sağlanabilmektedir. Salt prototip transferi ile çoklu kalıtım sağlanamaz.

Bun dan sonra, bir b sınıfı nesne örneği yaratalım. Eğer kalıtım sağlanamazsa, bu nesne örneğinin hiçbir özelliği olmayacak, fakat eğer kalıtım sağlanabilirse, üst sınıfın tüm özellikleri alt sınıfa aktarılmış olacaktır.

bt = new b;
		

Bundan sonra üst sınıf a prototipine yeni bir özellik ekleyelim. Eğer, kalıtım gerçekleşmişse bu yeni özellik hem alt sınıf protopine hem de yaratılmış olan alt sınıf nesne örneğinin yapısına aksedecektir.

Prototip transferi yöntemi ile nesne hiyerarşisinin oluşmuş olduğunun kesin olarak saptanması için, b sınıfının tüm veri alanlarını sorgulayalım. Kalıtımın gerçekleşmiş olması halinde, a üst sınıfının tüm veri alanları ve varsayılan değerleri, kalıtımla b alt nesne sınıfına aktarılmış olacaktır. Tüm bu işlemler aşağıda verilen bir JavaScript programında gerçekleştirilmiş ve bu programın bağlantılı olduğu uygulama sayfasında verdiği sonuç aşağıda gösterilmiştir:

// Üst Sınıf Yapılandırıcı Fonksiyonu :

function a(üstSınıfBaşlangıçDeğeriX, üstSınıfBaşlangıçDeğeriY, üstSınıfBaşlangıçDeğeriZ) {
this.üstSınıfÖzelliğiZ = üstSınıfBaşlangıçDeğeriZ || 'üstSınıfVarsayılanDeğeriZ';
this.üstSınıfÖzelliğiY = üstSınıfBaşlangıçDeğeriY || 'üstSınıfVarsayılanDeğeriY';
this.üstSınıfÖzelliğiX = üstSınıfBaşlangıçDeğeriX || 'üstSınıfVarsayılanDeğeriX';
}
		

// Alt Sınıf Yapılandırıcı Fonksiyonu :

function b() {
}

// Prototip Zincirinin Kurulması :


b.prototype = new a;

//Üst Sınıfın Prototipine Yeni Bir Özellik Eklenmesi:

a.prototype.üstSınıfÖzelliğiC = 'üstSınıfVarsayılanDeğeriC';


function dinamikKalıtım1(){

var bt = new Object();

// Bir Alt Sınıf Nesne Örneğinin Oluşturulması:

bt = new b;

 // Alt Sınıf Nesne Örneğinin Özelliklerinin ve Özellik Değerlerinin İncelenmesi 

özellikBelirleTüm(bt , 'b15.4.2-uyg-1-sonuç-1');

}

sayfaYüklendiktenSonraÇalıştır(dinamikKalıtım1);
		

b Alt Sınıfından Bir Kaydın Veri Yapısı ve Veri Alanlarının Değerleri

üstSınıfÖzelliğiZ = üstSınıfVarsayılanDeğeriZ
üstSınıfÖzelliğiY = üstSınıfVarsayılanDeğeriY
üstSınıfÖzelliğiX = üstSınıfVarsayılanDeğeriX
üstSınıfÖzelliğiC = üstSınıfVarsayılanDeğeriC

Sonuçlar, sınıf hiyerarşisinin kesinlikle gerçekleşmiş olduğunu ortaya koymaktadır. Burada, alt sınıfa aktarılan üst sınıf özellikleri, üst sınıfın varsayılan değerleri ile aktarılmaktadır. Varsayılan değerler, bir nesne örneğinin yaratılması sırasında, yapılandırıcı fonksiyon hiçbir argüman kullanılmadan çağrılırsa, yeni yaratılan nesne örneğinin özelliklerinin değerleridir. Aynı sonuçlar, nesnelerin özelliklerinin for..in döngüleri ile listelendiğinde, listelemenin özelliklerin alfabetik listesi ile verildiğini ve tanımlama sırasına uyulmadığını da belirtmektedir.

Yukarıdaki uygulamada , prototip transferi için kullanılan

b.prototype = new a;
		

ifadesi, başlangıç değerleri verilmeden bir yapılandırıcı fonksiyonun çağrılmasını öngörmekte ve prensip olarak,

b.prototype = new a();
		

ifadesi ile aynı sonucu vermektedir.

Alat sınıfa aktarılan üst sınıf özelliklerinin, alt sınıfta farklı varsayılan değerlerle başlaması isteniyorsa, alt sınıfa aktarılan özellik değerlerine bindirme (alt sınıfta değerlerini yeniden tanımlama) yapılması gerekir. Bunun için iki yöntem uygulanabilir. Bunlardan ilki, bir JavaScript programında , uygulanmış ve bu uygulamanın bağlantılı olduğu sayfada, verdiği sonuç, aşağıda görülmektedir:

// Üst Sınıf Yapılandırıcı Fonksiyonu :

function a(üstSınıfBaşlangıçDeğeriX, üstSınıfBaşlangıçDeğeriY, üstSınıfBaşlangıçDeğeriZ) {
this.üstSınıfÖzelliğiZ = üstSınıfBaşlangıçDeğeriZ || 'üstSınıfVarsayılanDeğeriZ';
this.üstSınıfÖzelliğiY = üstSınıfBaşlangıçDeğeriY || 'üstSınıfVarsayılanDeğeriY';
this.üstSınıfÖzelliğiX = üstSınıfBaşlangıçDeğeriX || 'üstSınıfVarsayılanDeğeriX';
}
		

// Alt Sınıf Yapılandırıcı Fonksiyonu :

function b() {
}

// Prototip Zincirinin Kurulması ve Üst Sınıf Özellik Değerlerine Bindirilmesi :


b.prototype = new a('altSınıfBaşlangıçDeğeriX', 'altSınıfBaşlangıçDeğeriY', 'altSınıfBaşlangıçDeğeriZ');

//Üst Sınıfın Prototipine Yeni Bir Özellik Eklenmesi:

a.prototype.üstSınıfÖzelliğiC = 'üstSınıfVarsayılanDeğeriC';


function dinamikKalıtım2(){

var bt = new Object();

// Bir Alt Sınıf Nesne Örneğinin Oluşturulması:

bt = new b;

 // Alt Sınıf Nesne Örneğinin Özelliklerinin ve Özellik Değerlerinin İncelenmesi 

özellikBelirleTüm(bt , 'b15.4.2-uyg-2-sonuç-1');

}

sayfaYüklendiktenSonraÇalıştır(dinamikKalıtım2);
		

b Alt Sınıfından Bir Kaydın Veri Yapısı ve Varsayılan Değerleri:

üstSınıfÖzelliğiZ = altSınıfVarsayılanDeğeriZ
üstSınıfÖzelliğiY = altSınıfVarsayılanDeğeriY
üstSınıfÖzelliğiX = altSınıfVarsayılanDeğeriX
üstSınıfÖzelliğiC = üstSınıfVarsayılanDeğeriC

Kalıtımla aktarılan özelliklere alt sınıfta farklı varsayılan değerlerin verilmesinin sağlanması için bir başka yöntem, bu özelliklerin alt sınıf prototipinde yeniden tanımlanmasıdır. Bu yöntem, bir JavaScript programında, uygulanmış ve bu uygulamanın bağlantılı olduğu sayfada, verdiği sonuç, aşağıda görülmektedir:

// Üst Sınıf Yapılandırıcı Fonksiyonu :

function a(üstSınıfBaşlangıçDeğeriX, üstSınıfBaşlangıçDeğeriY, üstSınıfBaşlangıçDeğeriZ) {
this.üstSınıfÖzelliğiX = üstSınıfBaşlangıçDeğeriX || 'üstSınıfVarsayılanDeğeriX';
this.üstSınıfÖzelliğiY = üstSınıfBaşlangıçDeğeriY || 'üstSınıfVarsayılanDeğeriY';
this.üstSınıfÖzelliğiZ = üstSınıfBaşlangıçDeğeriZ || 'üstSınıfVarsayılanDeğeriZ';
}

// Alt Sınıf Yapılandırıcı Fonksiyonu :

function b() {
}

// Prototip Zincirinin Kurulması ve Üst Düzey Varsayılan Özellik Değerlerine Bindirilmesi :


b.prototype = new a();

b.prototype.üstSınıfÖzelliğiX = 'altSınıfVarsayılanDeğeriX';
b.prototype.üstSınıfÖzelliğiY = 'altSınıfVarsayılanDeğeriY';
b.prototype.üstSınıfÖzelliğiZ = 'altSınıfVarsayılanDeğeriZ';

//Üst Sınıfın Prototipine Yeni Bir Özellik Eklenmesi:

a.prototype.üstSınıfÖzelliğiC = 'üstSınıfVarsayılanDeğeriC';


function dinamikKalıtım3(){

var bt = new Object();

// Bir Alt Sınıf Nesne Örneğinin Oluşturulması:

bt = new a();

 // Alt Sınıf Nesne Örneğinin Özelliklerinin ve Özellik Değerlerinin İncelenmesi 

özellikBelirleTüm(at , 'b15.4.2-uyg-3-sonuç-1');}

sayfaYüklendiktenSonraÇalıştır(dinamikKalıtım3);
		

b Alt Sınıfından Bir Kaydın Veri Yapısı ve Varsayılan Değerleri:

üstSınıfÖzelliğiZ = altSınıfVarsayılanDeğeriZ
üstSınıfÖzelliğiY = altSınıfVarsayılanDeğeriY
üstSınıfÖzelliğiX = altSınıfVarsayılanDeğeriX
üstSınıfÖzelliğiC = üstSınıfVarsayılanDeğeriC

Yukarıdaki son uygulamada üst sınıf özelliklerinin alt sınıfta bindirildiği veya yeniden tanımlandığı belii değildir. Aslında ikisi arasında hiçbir fark yoktur. Sonuçta, sistemde az özellik adı ile çalışılmış olunmaktadır ve bu bir avantaj sayılabilir. Örnek olarak üstDüzeyÖzelliğiX, bir üst düzey nesne örneğinde başka , bir alt düzey nesne örneğinde başka, varsayılan değer ile oluşacaktır. Bu arada henüz b sınıfının özelliklerine başlangıç değerleri verebilen bir yapılandırıcı fonksiyon henüz yoktur. Bu eksikliği tamamlayan bir JavaScript programı, oluşturulmuş ve bu programın adımları ile bağlantılı olduğu sayfada, verdiği sonuç aşağıda verilmiştir.

// Üst Sınıf Yapılandırıcı Fonksiyonu :

function a(üstSınıfBaşlangıçDeğeriX, üstSınıfBaşlangıçDeğeriY, üstSınıfBaşlangıçDeğeriZ) {
this.üstSınıfÖzelliğiX = üstSınıfBaşlangıçDeğeriX || 'üstSınıfVarsayılanDeğeriX';
this.üstSınıfÖzelliğiY = üstSınıfBaşlangıçDeğeriY || 'üstSınıfVarsayılanDeğeriY';
this.üstSınıfÖzelliğiZ = üstSınıfBaşlangıçDeğeriZ || 'üstSınıfVarsayılanDeğeriZ';
}

// Alt Sınıf Yapılandırıcı Fonksiyonu :

function b(altSınıfBaşlangıçDeğeriX, altSınıfBaşlangıçDeğeriY, altSınıfBaşlangıçDeğeriZ) {
this.üstSınıfÖzelliğiX = altSınıfBaşlangıçDeğeriX || 'altSınıfVarsayılanDeğeriX';
this.üstSınıfÖzelliğiY = altSınıfBaşlangıçDeğeriY || 'altSınıfVarsayılanDeğeriY';
this.üstSınıfÖzelliğiZ = altSınıfBaşlangıçDeğeriZ || 'altSınıfVarsayılanDeğeriZ';
}

// Prototip Zincirinin Kurulması :


b.prototype = new a();

b.prototype.üstSınıfÖzelliğiC = 'altSınıfVarsayılanDeğeriC';

//Üst Sınıfın Prototipine Yeni Bir Özellik Eklenmesi:

a.prototype.üstSınıfÖzelliğiC = 'üstSınıfVarsayılanDeğeriC';


function dinamikKalıtım4(){

var at = new Object(), bt = new Object();

// Bir Üst Sınıf Nesne Örneğinin Oluşturulması:

at = new a('üstSınıfBaşlangıçDeğeriX', 'üstSınıfBaşlangıçDeğeriY', 'üstSınıfBaşlangıçDeğeriZ'); 

// Bir Alt Sınıf Nesne Örneğinin Oluşturulması:

bt = new a('altSınıfBaşlangıçDeğeriX', 'altSınıfBaşlangıçDeğeriY', 'altSınıfBaşlangıçDeğeriZ');

 // Nesne Örneklerinin Özelliklerinin ve Özellik Değerlerinin İncelenmesi 

özellikBelirleTüm(at , 'b15.4.2-uyg-4-sonuç-1');

özellikBelirleTüm(bt , 'b15.4.2-uyg-4-sonuç-2');

}

sayfaYüklendiktenSonraÇalıştır(dinamikKalıtım4);
		

a Üst Sınıfından Bir Kaydın Veri Yapısı ve Özellik Değerleri:

b Alt Sınıfından Bir Kaydın Veri Yapısı ve Özellik Değerleri:

Yukarıdaki son dört uygulama biz salt prototipal hiyerarşi üzerine bilgiler sağlamaktadır. Her uygulama belirli bir çalışma şeklini açıklamaktadır. Dikkat edilecek konu, nesne örneklerinin üst düzey değil kendi sınıflarının yapılandırıcı fonksiyonlarına göre yaratılması gereğidir. Çeşitli durumlarda varsayılan ve başlangıç değerlerinin nasıl oluştukları iyice özümsenmelidir. Bu örnekler temel alınarak yeni örnekler geliştirilmeli ve sonuçlar incelenmelidir. Tüm uygulamalarda iki nesne sınıfının aynı özellik adlarını paylaştıkları görülmektedir. Bu özellikler, aynı isimde olmalarına karşın her nesne sınıfında karklı varsaılan ve başlangıç değerlerini almaktadırlar. Avantajlı yönü, aynı hiyerarşik sistemdeki nesnelerin benzer özelliklerinin aynı adla çağrılabilmesi ve kavram karışıklığından uzak durulabilmesidir.

Sadece yapılandırıcı fonksiyonların birbirlerini çağırması ile bile gerçekleşse, hiyerarşik nesne sınıfları yapılanmalarının prototip transferi ile de gerçekleştirilerek pekiştirilmesi sağlık verilir. Çünkü ancak bu şekilde, prototip zinciri oluşmakta ve aktive edilmektedir. Prototip zinciri aktif durumda iken, bir nesne örneğinin bir özelliğine erişim isteği önce, nesne sınfının özellikleri taranarak yanıtlanmaya çalışılır, aranan özellik, nesne örneğininde bulunamazsa, bir üst düzey sınıfta aranır, yoksa, bir üst düzey sınıf kontrol edilerek, hiyerarşik düzenin en tepesine kadar gidilir. Aranan özellik, hiyerarşik yapılanma içindeki hiçbir nesne sınıfında bulunamazsa, özelliğin bulunmadığı yanıtı verilir. Bu açıdan, prototip zincrinin oluşmuş olması JavaScript yorumlayıcısının rahat çalışmasına katkı sağlayacaktır.

Prototip zinciri her sınıf için sadece bir tek üst sınıftan kalıtımı sağlayabilir, yani çoklu kalıtım (multiple inheritance) adı verilen hiyerarşik yapılanma, salt prototip transferi yöntemi ile gerçekleşmez, bunun için, prototip transferi ile birlikte yapılandırıcı fonksiyonların birbirini çağırması metodu birlikte kullanılmalıdır.

Çoklu kalıtımın olduğu prototip zinciri aktif bir hiyerarşik yapılanmda, prototip zinciri dışındaki sınıfın prototipine yeni bir özellik eklenirse, bu özellik alt sınıflara aktarılmaz. Özelliğin alt sınıflara aktarılması için, bu sınıfın prototipine değil, yapılandırıcı fonksiyonuna eklenmesi gerekir. Bu konuda, bir önceki bölümde yapılmış olan uygulamalar yeniden incelenmelidir. Bu yöntemle gerçekleştirilen çoklu kalıtım hiyerarşik yapılanmaları son derece iyi çalışır. Bir kez oluşturulmuş hiyerarşik yapılanmalarda özellik değiştirilmesinin iyi bir fikir olmadığı bir önceki bölümde net olarak açıklanmıştır. Bu açıklamanın yeniden okunması yararlı olacaktır.

Alt sınıflarda değerleri yeniden tanımlanmış (bindirilmiş) özellik değerleri, üst sınıflardan kalıtımla gelenlere göre öncelik taşırlar. Prototip zincirinde en geçerli değer, en güncel değer, yani özelliğe en yakın düzeyde atanan değerdir.

Aşağıda görülen JavaScript programı , bir önceki bölümde örnek olarak incelenen çoklu kalıtım sisteminin, prototip zincirinden tam olarak yararlanılmış olan son halidir. Bu programın ilişkili olduğu, uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...
function Üretim(nr) {
this.seriNumarası = nr || 0 ;
}

function Yapım() {
this.malzeme = 'Veri Girilmedi !';
this.kutuŞekli = 'Veri Girilmedi !';
this.kutuRengi = 'Veri Girilmedi !';
}

Kare.prototype = new Yapım;

function Kare(seriNr, materyel, renk, kenar) {
this.üstSınıf = Üretim;
this.üstSınıf(seriNr);
this.malzeme = materyel || '';
this.kutuRengi = renk || '';
this.en = kenar || 0;
this.kutuŞekli = 'Kare';
this.hacım =function () {

return Math.pow(this.en, 3);
}
}

Dikdörtgen.prototype = new Kare;

function Dikdörtgen(seriNr, materyel, renk, eni, boyu, yüksekliği) {
this.seriNumarası = seriNr || 0;
this.malzeme = materyel || '';
this.kutuRengi = renk || '';
this.en = eni || 0;
this.boy = boyu || 0;
this.yükseklik = yüksekliği || 0;
this.kutuŞekli = 'DikDörtgen';
this.hacım =function () {

return this.en * this.boy * this.yükseklik;
}
}


function çokluKalıtım() {

var kutu24 = new Kare(34688, 'Karton', 'Mavi', 12), kutu25 = new Dikdörtgen(45786, 'Teneke', 'Metalik Kırmızı', 10, 10, 10); 
sonuçYaz('kutu24 Özellikleri =  ', kutu24.seriNumarası + ' ' + kutu24.kutuŞekli + ' ' + kutu24.malzeme
 + ' ' + kutu24.kutuRengi + ' ' + kutu24.hacım() , 'b15.4.2-uyg-5-sonuç-1');
sonuçYaz('kutu25 Özellikleri =  ', kutu25.seriNumarası + ' ' + kutu25.kutuŞekli + ' ' + kutu25.malzeme
 + ' ' + kutu25.KutuRengi + ' ' + kutu25.hacım() , 'b15.4.2-uyg-5-sonuç-2');

}
...
		

Program Sonucu :

kutu.24 Özellikleri : 34688 Kare Karton Mavi 1728

kutu.25 Özellikleri : 45786 Dikdörtgen Teneke Metalik Kırmızı 1000

Bu son şekli ile yazılımın hacmı azalmış ve ifadeler daha düzenli olmuştur. Yapım sınıfı artık veri girilip örnek üretilen bir sınıf durumundan çıkararılabilmiş ve sadece özelliklerin alt sınıflara varsyılan değerleri ile aktaran bir üst sınıf haline gelmiştir. Prototip zinciri, Yapım sınıfında başlamakta, Kare ve Dikdörtgen sınıfları ile devam etmektedir. Kare sınıfı hem prototip zinciri içindeki Yapım hem de prototip zinciri dışındaki Üretim sınıflarından kalıtım sağlamaktadır. Bu optimize edilmiş bir çoklu kalıtım uygulamasıdır ve bu yapılanma ile daha fazla yazılım optimizasyonu sağlanması olanağı yoktur.

Sistemin daha optimize dilmesi, bilinçli bir sistem incelenmesi ile gerçekleştirilebilecektir. Sisteme dikkatli bakıldığında, gerçek hiyerarşi gereksinmesinin sadece özellik değerlerine ve hacım metoduna bindirildiği, Kare ve Dikdörtgen sınıfları arasında olması gerektiği görülecektir. Sistemin hiyerarşik yapılanması için iki düzeylik bir prototip zincirinin oluşturulması yeterlidir. İlk düzey üst sınıf olarak tanımlanacak olan Kare sınıfı, ikinci düzey, bir alt sınıf olan Dikdörtgen sınfıdır. Temel hiyerarşik sistem, aşağıda görüldüğü kadar basit olabilir:

Hiyerarşik Sistem

function Kare(seriNr, materyel, renk, kenar) {
this.seriNumarası = seriNr || 0 ;
this.üstSınıf(seriNr);
this.malzeme = materyel || 'Veri Girilmedi !';
this.kutuRengi = renk || 'Veri Girilmedi !';
this.en = kenar || 0;
this.kutuŞekli = 'Kare';
this.hacım =function () {

return Math.pow(this.en, 3);
}
}

Dikdörtgen.prototype = new Kare;
		
function Dikdörtgen() {
this.kutuŞekli = 'DikDörtgen';
this.hacım =function () {

return this.en * this.boy * this.yükseklik;
}
}

Hiyerarşik Sistem Sonu
		

Hiyerarşik sistem incelendiğinde, Dikdörtgen sınıfının tüm özelliklerini Kare sınfından kalıtımla varsayılan değerleri ile aldığı ve bu özelliklerden kutuŞekli özelliğinin varsayılan 'Kare'değerinine bindirilerek'Dikdörtgen olarak değiştirildiği, ' hacım() metodununa da Dikdörtgen geometrik şeklinin hacım değerini hesaplayabilecek bir içerik yazılarak bindirildiği görülmektedir. Burada hiyerarşik yapılanma tamamlanmakta ve tek yapılacak şeyin, yeni Dikdörtgen nesne sınıfı örneklerine özellik değerlerini atayacak veri giriş fonksiyonları yazılımı olduğu söylenebilir. Bu veri giriş fonksiyonları istenilen şekil ve istenilen sayıda yazılabilir. Bu tip veri giriş fonksiyonu örnekleri aşağıda görülmektedir:

...
Veri Giriş Fonksiyonları

function yeniDikdörtgenNesneSınıfÖrneğiVeriGirişi1(seriNr) {
var yeniDikdörtgenNesneSınıfÖrneği = new Dikdörtgen();
yeniDikdörtgenNesneSınıfÖrneği.seriNumarası = seriNr;
return yeniDikdörtgenNesneSınıfÖrneği;
}

function yeniDikdörtgenNesneSınıfÖrneğiVeriGirişiToplamVeriler(seriNr, materyel, renk, eni, boyu, yüksekliği) {
var yeniDikdörtgenNesneSınıfÖrneği = new Dikdörtgen();
yeniDikdörtgenNesneSınıfÖrneği.seriNumarası = seriNr;
yeniDikdörtgenNesneSınıfÖrneği.malzeme = materyel;
yeniDikdörtgenNesneSınıfÖrneği.kutuRengi = renk;
yeniDikdörtgenNesneSınıfÖrneği.en = eni;
yeniDikdörtgenNesneSınıfÖrneği.boy = boyu;
yeniDikdörtgenNesneSınıfÖrneği.yükseklik = yüksekliği;
return yeniDikdörtgenNesneSınıfÖrneği;
}

function seriNumarasıEkle(nesneSınıfÖrneği, seriNr) {
nesneSınıfÖrneği.seriNumarası = seriNr;
}


function malzemeEkle(nesneSınıfÖrneği,materyel) {
nesneSınıfÖrneği.seriNumarası = malzeme;
}


function kutuRengiEkle(nesneSınıfÖrneği, renk) {
nesneSınıfÖrneği.kutuRengi = renk;
}


function kutuEniEkle(nesneSınıfÖrneği, eni) {
nesneSınıfÖrneği.en = eni;
}


function kutuBoyuEkle(nesneSınıfÖrneği, boyu) {
nesneSınıfÖrneği.boy = boyu;
}

function kutuYüksekliğiEkle(nesneSınıfÖrneği, yüksekliği) {
nesneSınıfÖrneği.yükseklik = yüksekliği;
}
...
		

Yukarıda görülen veri giriş fonksiyonlarından ilk ikisi, hem yeni Dikdörtgen sınıfı nesne örneklerinin yaratılması, hem de yeni yaratılan nesne örneğine bazı özelliklerin girilmesi işlevini yapmaktadırlar. Sonuncu fonksiyon ise polimorf bir metottur ve Kare sınfından olsun, Dikdörtgen sınıfından olsun, sadece yaratılmış nesne örneklerine seriNumarası özelliğinin değerini girmek için kullanılabilecektir.

Yukarıda geliştirilmiş olan sistemin bir uygulaması, yazılımı aşağıda görülen bir JavaScript programı ile yapılmış ve bağlantılı olduğu sayfada verdiği sonuçlar, aşağıda verilmiştir:

...
Dikdörtgen nesne sınıfı örneğinin yaratılması
var kutu18 = new Dikdörtgen(), kutu19 = new Dikdörtgen(34786, 'Alüminyum', 'Sarı Eloksal', 21, 33, 50);
Verilerin Girilmesi
seriNumarasıEkle(kutu18, 34688);
Sonuçların Yazılması
sonuçYaz('kutu18 seri numarası : ', kutu18.seriNumarası, 'b15.4.2-uyg-6-sonuç-1');
sonuçYaz('kutu19 Özellikleri =  ', kutu19.seriNumarası + ' ' + kutu19.kutuŞekli + ' ' + kutu19.malzeme
 + ' ' + kutu19.kutuRengi + ' ' + kutu19.hacım() , 'b15.4.2-uyg-6-sonuç-2');
...
		

Program Sonucu :

Yukarıdaki JavaScript programındaki veri girişi fonksiyonlarının incelenmesi yararlı olabilir. Veri giriş fonksiyonlarının bazılarının hem yeni nesne örneği ürettikleri, hem de bazı özellikleri atadığını görüyoruz. Bazıları da, yaratılmış nesne sınıf örneklerini argüman olarak aldıkları ve bu argümanlarının belirli özelliklerinin değerlerine diğer argümanı atadığı görülmektedir. Nesneler, referansla aktarılırlar. Bir fonksiyona bir nesne argüman olarak atanırsa, ve o nesnesinin özellikleri fonksiyon içinde değiştirilirse, değişiklik nesneye de yansır.

Yukarıdaki JavaScript programında Dikdörtgen sınfından bir nesne örneğinin üretilebilmesi için üç ayrı yöntem uygulanabilir. İlk yöntem bunun bir boş nesne örneği ile doğrudan

örnekX = new Dikdörtgen();
		

şeklinde, kalıtımla aktarılan ve yapılandırıcı fonksiyonda belirlenen varsayılan özellik değerleri ile yaratılmasıdır. Yaratılan nesne örneğinin gerçek özellik değerleri, seriNumarasıEkle() gibi, veri giriş fonksiyonları kullanılarak atanabilir.

İkinci yöntem, hem yeni nesne örneğinin yaratılmasını sağlayan, hem de seriNumarası özelliğini atayan dikdörtgenÖrneğiVeriGirişi1() fonksiyonun kullanılmasıdır. Burada yukarıdaki uygulamada olduğu, gibi, diğer özellikler ilgili veri giriş fonksiyonlarından yararlanılarak gerçekleştirilebilir.

Sonuncu ve en gerçekçi yöntem, yeniDikdörtgenNesneSınıfÖrneğiVeriGirişiToplamVeriler() fonksiyonun kullanımı ile hem yeni bir nesne örneğinin yaratılması, hem de tüm özelliklerine güncel değerlerin atanmasıdır. Bu şekilde yaratılamış olan nesne örneği, tam ve gerçek bir veri olacak ve disk dosyalarında saklanmak için tamamlanmış olacaktır. Disk dosyalarında saklanılan verilere, listelemek, değiştirmek veya silmek amacı ile her an erişilebilir.

Valid XHTML 1.1