IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 13 Ekim 2013, 17:29   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
object array (nesne dizisi)




Bu yazının amacı, nesne yönelimli programlama konusu altında, sıklıkla geçen nesne dizilerini (object array) anlatmaktır. Kısaca bir dizinin elemanlarına nesne atamanın nasıl olacağı anlatılacaktır.

Öncelikle nesne yönelimli programlama dillerinde, kullanılan nesne atıflarının (object referrer) birer gösterici (pointer) olduklarını bilmemiz gerekir.

Örnek olarak bir sınıf tanımı ile başlayalım:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
class insan{ int yas; String isim; }

Şimdi yukarıdaki sınıftan üretilen bir nesneyi ele alalım:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
insan ali = new insan();

Burada ali ismi ile geçen değişken (variable) bir nesne atıfıdır (object referrer) ve insan sınıfından yeni bir nesne üretilmiş, ve bu nesne gösterilmiştir.
Ayırca JAVA dilindeki dizi tanımlamasını da hatırlatalım:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
int x[] = new int[5];

Yukarıdaki tanım ile, bir int dizisi tanımlanmıştır. Bu dizinin kendisi de aslında bir nesnedir ve kendisine özgü bazı fonksiyon ve özellikleri bulunur. Ancak konumuz kapsamında 5 elemanlı (0′dan başlayarak 4′e kadar giden (0 ve 4 dahil)) elemanları olduğunu ve int tipinde tanılmandığı için her elemanına birer tam sayı konulabilen (int) bir dizi (array) olduğunu söylememiz yeterlidir.
Artın hatırladığımız dizi tanımı ile nesne tanımını birleştirebiliriz:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
insan x[] = new insan[5];

Elemanlarının her biri birer nesne atıfı olan bir dizi tanımlanmıştır. Buna göre dizinin her elemanına, insan tipinden bir nesne göstericisi konulabilir.
Ancak nesne göstericileri için geçerli olan kurallar burada da geçerlidir. Örneğin yukarıdaki tanımdan hemen sonra aşağıdaki gibi bir kullanım hata verecektir:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
x[2].yas = 20;

Buradaki hatanın sebebi henüz üretilmemiş olan bir nesnenin bir özelliğine erişiliyor olmasıdır. x[2] ile gösterilen dizinin RAM’de henüz kapladığı yer belirtilmemiş ve dolayısıyla bu alana erişime izin verilmemiştir. Çözüm olarak önce new komutu ile hafızada bu nesnenin yaşayacağı alan tanıtılmalıdır.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
x[2] = new insan();

Ancak yukarıdaki şekilde bir tanımlamadan sonra bir önceki adımda hata veren satırı yazıp çalıştırabiliriz.
JAVA dilinde ayrıca for dizilerinin özel bir kullanımı aşağıdaki şekildedir:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
for(insan i : x)

Yukarıdaki kod satırı, x dizisinin eleman sayısı kadar döner. Örneğin dizimiz 10 elemanlı ise, döngü 0′dan 9′a kadar dönecek ve her dönüşünde ilgili eleman değerini i isimli nesne göstericisine atayacaktır.
Yukarıda anlatılan bilgiler ışığında, derste yazdığım bir kodu aşağıda yayınlıyorum:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
class insan{ int yas; String isim; public String toString(){ return "yas: "+yas+" isim: "+isim; } }

Yukarıdaki kodda, bir insan sınıfı tanımlanmıştır. Bu tanıma göre insanın yaşı ve ismi bulunmaktadır. Ayırca toString ismi verilen özel bir fonksiyon yazılmıştır. Bu fonksiyonun amacı, bu sınıftan (class) üretilen bir nesnenin (object), dizgiye (string) çevrilmesi durumunda otomatik olarak çalışıyor olmasıdır. Aslında bu fonksiyon, her nesne (object) için otomatik olarak tanımlıdır. Bunun sebebi java.lang.Object sınıfında tanımlı bir fonksiyon olmasıdır ve bu fonksiyon her sınıf tanımında ezilebilir (override). Örnek kodumuzda da üzerine yükleme (override) işlemi yapılmış ve fonksiyon ezilmiştir. Böylece insan sınıfından bir nesne, dizgi olarak kullanıldığında fonksiyonda belirtildiği üzere “yas: “ yazısına insanın yaşı eklenecek ardından “isim:” yazısının ardında insanın ismi eklenerek döndürülecektir.

Test amacıyla yazılmış örnek bir kod aşağıda verilmiştir:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
public static void main(String args[]){ insan i[]; i = new insan[5]; insan ali = new insan(); ali.e = x; ali.yas = 20; ali.isim= "ali yilmaz"; System.out.println(" alinin adresi : "+ ali.e.adres); i[0] = ali; i[1] = new insan(); i[1].yas = 30; i[1].isim = "veli demir"; System.out.println("i[0]:" +i[0] ); i[2] = new insan(); i[3] = new insan(); i[4] = new insan(); i[2].isim = "ahmet yildiz"; i[3].isim = "veli yilmaz"; i[4].isim = "cem yildiz"; for(int j=0;j<i.length;j++){ i[j].yas =10+ (int)( Math.random() * 40); } for(insan in : i){ System.out.println(in.toString()); } }

Yukarıdaki kodda örnek olarak 5 elemanlı bir insan dizisi oluşturulmuştur. Bu diziye önce ali isimli bir nesne göstericisinin içerisine atanan nesne yerleştirilmiş ( dizinin 0. sırasına) ardından dizinin 1. elemanı için yeni bir nesne oluşturulmuştur. Son olarak dizinin 3., 4. ve 5. elemanları için arka arkaya nesne oluşturulmuş (hafızada yer açılmış) ve isim ataması yapılmıştır. Kodun bundan sonraki kısmında bir döngü ile dizideki bütün insanlara rast gele yaş ataması yapılmıştır (random fonksiyonu) ve ikinci bir döngü ile insanlar ekrana bastırılmıştır. Buradaki bastırma işlemi sırasında insanlar daha önceden tanımlı olan toString fonksiyonu marifetiyle önce dizgiye (string) çevrilmiş ve ardından ekrana bastırılmıştır.

Alıntı

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
array, dizisi, nesne, object


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
C# Array aSi C# 5 13 Kasım 2015 15:06
C# OOP - Object Oriented Programing (Nesne Yönelimli Programlama) OzGuR C# 0 06 Nisan 2012 01:22
Array Fonksiyonu YaRGuCi ASP/ASP.NET 0 26 Kasım 2011 12:29
Object Repository (Nesne Deposu) Spacely Delphi 0 20 Mart 2010 13:24