gittigidiyor

Nesneye Yönelik Programlama Başlangıç Notları (C++ ve Java)

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
Nesneler ve Siniflar

Nesneye dayalı programlama bütün hesaplamaların nesneler bağlamında yapıldığı bir programlama yaklaşımıdır. Nesneye dayalı programlama diliyle yazılmış bir program verilen görevi gerçekleştirmek için biraraya gelmiş nesneler topluluğu olarak görülebilir.
Nesne, onun şimdiki durumunu tanımlayan veriler ile dış dunyaya servisler vermesini ve şimdiki durumunu değiştirmesini sağlayan yöntemleri kapsayan bir varlıktır. Benzer nesneler kümesine tek bir sınıfın örnekleridir denir. Bir sınıfı aynı türden nesneler için ayrintili bir tasarım olarak düşünebilirsiniz.
Java programlama dilinde bir sınıf class anahtar kelimesini kullanarak tanımlanabilir. Örneklerin durumları üye değişkenler olarak tanımlanabilir. Bir üye değişken basitçe bir tür ve ve bir isim belirtilerek tanımlanabilir. Ayrıca üye değişkenleri tanımlarken ilklendirmek de mümkündür. Yöntemler, sıfır veya daha fazla parametreli ve dönme değerli fonksiyonlar olarak tanımlanabilir. Bir methodun dönme değeri, hiç birşey dönülmez anlamındaki void türünde olabilir. Ayrıca, farklı parametreler aldığı sürece aynı isimde birden fazla yöntem tanımlamak da mümkündür.
Bir sınıfın üye değişkinlerine ve yöntemlerine erişimi, public, protected, ve private anahtar kelimelerini kullanarak sınırlandırmak mümkündür. Sadece genel üye değişkenler ve genel yöntemler sınıfın tanımı dışından erişilebilir. Bu erişim kısıtlama yöntemleri daha sonraki bölümlerde ayrıntılı olarak anlatılacaktır.
Aşağıda, bir sınıf tanımlama şablonu verilmiştir.

class SinifAdi
{ public degiskenTuru1 degiskenAdi1;
public degiskenTuru2 degiskenAdi2=ilkDeger;
public donmeTuru YontemAdi1(parametreTuru1 parametreAdi1, ..., parametreTuruN parametreAdiN)
{ ... return donmeDegeri;
}
public void YontemAdi2(parametreTuru1 parametreAdi1, ..., parametreTuruN parametreAdiN)
{ ...

}
}

Nesneler Yaratma ve Kullanma

Her nesne kullanılmadan önce açıkça yaratılmalıdır. Bir nesne yaratmak için, ilgili sınıfın constructor (yapılandırıcı) olarak adlandırılan özel yöntemi çağrılmalıdır. Kurucu nesne için gerekli kaynakları ayırır ve yaratılan nesnenin bir örneğini döndürür. Java proglamlama dilinde, yapılandırıcıyı, sınıfla aynı isimde bir yöntem yaratarak kendiniz tanımlayabilirsiniz. Farklı parametreler aldıkları sürece birden fazla kurucu tanımlanabilir.

class SinifAdi{ public SinifAdi (sıfır veya daha fazla parametre){ ... }}

Bir sınıfın bir örneğini yaratmak için new işletmeni (operator) kullanılır.

Bu örnek, referans türünün değişkeni olarak tutulabilir, bu da aşağıdaki gibi tanımlanır ve ilklendirilebilir.

SinifAdi DegiskenAdi = new SinifAdi(<parametreler>); Burada <parametreler> eğer varsa, kurucu tarafından istenen parametrelerdir.

Bir örneğin üye değişkenlerine ve yöntemlerine sınıf tanımı dışından, direk isimlerini kullanarak veya referans değişkeni yoluyla erişilebilir:

DegiskenAdi.UyeDegiskenAdiDegiskenAdi.YontemAdi(<parametreler>)
 
Son düzenleme:

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

Sınıf Değişkenleri ve Sınıf Yöntemleri

Her örnek farklı durumlara sahip olabileceğinden, üye değişkenler bir sınıfın farklı örneklerinde farklı değerler tutabilirler. Fakat, static anahtar kelimesini kullanarak, sınıf değişkeni denilen, değeri bu sınıfın bütün örnekleri boyunca aynı olan, özel bir çeşit üye değişken tanımlamak mümkün. Örneğin:
class SinifAdi{ public DegiskenTuru DegiskenAdi = IlkDeger; ... }
Bir sınıf değişkenine, diğer herhangi bir üye değişkene ulaşıldığı gibi ulaşılabilir veya sınıf adını kullanarak SinifAdi.DegiskenAdi şeklinde de ulaşılabilir. Benzer şekilde bir sınıf yöntemi de static anahtar kelimesi kullanilarak tanımlanabilir:
class SinifAdi{ public static DondurmeTuru YontemAdi(parametreler){ ... } ... }
Sınıf değişkenleri gibi sınıf yöntemleri de referans değişken yoluyla veya bir örnek istemeden direk sınıf adıyla çağrılabilir. Yani, sınıf yöntemleri bir örnek yaratmadan kullanılabilir. Bunlar örneksiz çağırılabildiklerinden, sınıf değişkenleri dışındaki üye değişkenleri değiştiremezler.


JAVA YAPISI


Java programşama dili tamamen nesneye dayalı bir dil olduğundan, bir programın içindeki herşey sınıf tanımlamalarında içerilmelidir. Bir program içindeki birçok sınıf istenilen görevi yerine getirmek için birbirlerinin yöntemlerini çağırarak işbirliği yapabilirler.
En az bir tane sınıf tanımlaması içeren bir program kaynak dosyası yaratarak bağımsız bir uygulama oluşturabilirsiniz. Her program yürütülmek için, ilk ifade için bir giriş noktasına ihdiyaç duyar. Bu nedenle, bir program için giriş noktasını sınıfın bir yöntemi olarak açıkça belirtmek zorundasınız. Bu amaç için main özel yöntemi kullanılır. Sınıf yöntemleri bir örnek çağırılmasına ihdiyaç duymadıklarından, ana (main) yöntemini içeren sınıfı belirtmek programı yürütmek için yeterli olacaktır.
Ana (main) yöntemin biçimi aşağıdaki gibidir:
public static void main(String[] args){ ... }
Bu main yöntemi tek bir parametre, args, alır ve hiçbir değer döndürmez. Bu args parametresi, String dizisi (array) türündedir ve program çalıştırıldığında komut satırına girilen parametreleri içerir. Ana yöntem (main), sınıf dışından örneksiz çağırılabilen bir yöntem olmak zorunda olduğundan, public ve static anahtar kelimeleri kullanılır.
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

YORUM SATIRLARI ve AÇIKLAMALAR


Java proglamlama dili üç tür açıklamayı destekler: tek satır açıklamalar // ile, çok-satır açıklamalar "/* ve */" ile, ve javadoc açıklamalar "/** ve */" ile gösterilir. İlk iki tür basit açıklamalar, ve üçüncüsü javadoc aracı ile işlenen programın gömülmüş belgelemesi için kullanılır.
Tek satır açıklamalar // şekli kullanılarak, programın herhangi bir yerine konabilir. Açıklama ilk // ile başlar ve satır sonuna kadar devam eder. Aşağıdakiler tek satır açıklamalara örnektir:
int i=7; // bir tek satır açıklama i=i*7; // başka bir tek satır açıklama i=1;
Çok-satır açıklama, bir programda açıklama birden fazla satıra yayıldığında kullanılır. Derleyici başlangıç biçim imi /* ile ilk bitiş imi */ arasındaki herşeyi atacaktır. Aşağıdakiler çok-satır açıklamalara örnektir:
int i=7;/* bir açıklama */i=i*7; /*başka biraçıklama*/i=i+1;
Javadoc açıklamalar birçok satıra yayılabilir ve derleyici başlangıç biçim imi /** ile ilk bitiş imi */ arasındaki herşeyi atacaktır. Javadoc özelliği javadoc açıklamalarını okuyup HTML belgesine çevirebilir.
Sınıf ve arayüz seviyesinde javadoc açıklamalar ekleyebilirsiniz, yöntem, kurucu ve alan seviyesinde ekleyebileğiniz gibi. Her açıklama ilişkin varlıktan hemen önce görünür ve bir veya daha fazla imle izlenen bir tanımdan oluşur. Eğer isterseniz javadoc açıklamalarınızda HTML biçimlendirmesi kullanabilirsiniz. Javadoc açıklamasının genel biçimi aşağıdaki gibidir:
/** * Bir sınıf betimlemesi * *
@imadı betimleyici metin * ... * @imadı betimleyici metin */ public class DocTest { /** Bir değişken betimlemesi*/ public int i; /** * Bir yöntem betimlemesi * * @imadı betimleyici metin * ... * @imadı betimleyici metin */ public void f() {} }
Javadoc açıklamları için tanımlanmış çok farklı çeşitte im (tag) vardır, @param değiştirgeç_adı değiştirgeç_betimlemesi,@author yazar_adı, @version sürüm_bilgisi gibi.
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

DEĞİŞKEN TANIMLAMALARI

Bir değişken veri (ve nesneler) için isimlendirilmiş bir kapsayıcıdır. Bir değişken için çalıştırma zamanında bellek alanı ayrılır ve adı, değerini almak yada belirlemek için kullanılır. Yani, değişkenin adını bellek yerini okumak yada yazmak için kullanabilirsiniz.
Bir değişkeni kullanmadan önce bildirmelisiniz. Yani, bir değişkeni adına ve türüne bir isim vererek bildirmelisiniz. Javada bütün değişkenlerin türü olmalıdır, bu nedenle derleyici değişkenin içerdiği veriyi nasıl yorumlayacağını bilir. Bir değişken şu şekilde bildirilebilir: TurAdi DegiskenAdi.
Bir değişken ilkel (primitive) yada ilgi (reference) türünden olabilir. İlkel türünden bir değişken yalnız tamsayı (byte, short, int, long), ondalık sayı(double, float), tek yada unicode karakter (char), yada tek aç/kapa (on/off) durumu (boolean true yada false) içerir. İlgi türünden bir değişken bir sınıf'ın yada dizi'nin elemanını işaret eder.
Bir değişkenin ismi geçerli bir tanıtıcı (identifier) olmalıdır.Yani, harfle başlayan tek bir kelime olmalıdır (içinde boşluk yok). Aslında para birimi sembolü yada altçizgi (_) ile de başlayabilir, fakat en iyisi harf ile başlatmaktır. Harf, sayı, altçizgi, para birimi sembolü (örneğin $) içerebilir, fakat başka özel karakter içeremez. Java büyük küçük harfe duyarlı (case-sensitive) olduğu için, bir değişken bildirildikten sonra ismi aynı formda kullanılmalıdır.
Aşağıdaki şekil referans türünde değişkenlerin ilkel türden farkını gösterir:
trbasics-referenceVar.jpg



 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

DEĞİŞKEN KAPSAMLARI

Bir değişkene kendi kapsamı içerisinde erişilebilir.Bir değişkenin kapsamı onun bildirilmesinin bağlamına bağlıdır. Bir değişken esas olarak dört bağlamda bildirilebilir: bir sınıf içinde üye değişkeni olarak (herhangi bir yöntem dışında), bir yöntem bildirimi içinde yöntem parametresi olarak, bir yöntem içinde yerel parametre olarak, ve kural dışı durum işleme(exception handler) içinde kural dışı durum işleme parametresi olarak bildirilebilir. (Kural dışı durum işleme (exception handler) bu bölüm içinde daha sonra açıklanacaktır).
Bir üye değişkenin kapsamı bir sınıfın bütün bildirimini kaplar. Bir yöntem parametresinin kapsamı bir yöntemi tam olarak kaplar. Bir yerel parametrenin kapsamı parametrenin bildiriminden onu saran kod bloğunun sonuna kadardır. (Bir kod bloğu, bu bölüm içinde daha sonra tanımlanacağı gibi, sol { ve sağ } kıvırcık kaşlı ayıraçların (curly braces) arasındaki herşeydir).

REFERANS TÜRLERİ

Referans veri türünde bir değişken bir nesneye veya bir diziye referans olabilir. (İleriki derslerde anlatılacağı gibi ayrıca arayüzlere ve sınıflara da referans olabilir). Referans veri türündeki değişkenler sadece birer referans olduklarından, bunların kullanımı ilkel veri türlerinden oldukça farklıdır. Referans türünde bir değişkenin bildirilmesi ilkel türde bir değişkenin bildirilmesiyle cok benzerdir. TurAdi degiskenAdi Burada, TurAdi referans edilen varlığın türünün adıdır, degiskenAdi geçerli bir tanıtıcı olmalıdır. İlkel veri türleri gibi yöntem parametreleri çağırıcı ile ilklendirilir. Üye değişkenler null değerle ilklendirilir, yani boş bir referansla, ve bunlar daha sonra ilklendirilebilir. Fakat yerel değişkenleri kullanmadan önce açıkca ilklendirmelisiniz.
Değişkeni bildirerek sadece değişken için fakat referans verilecek varlık için değil, basitçe bir yer tutucu (bir ilgi depolama bölgesi) yaratmış olursunuz. Bu nedenle basit bir ilklendirme varlığın referansını başka bir değişkenden = işletmenini kullanarak kopyalayabilir veya new işletmenini kullanarak yeni bir varlık yaratılabilir ve onun referansı değişkene = işletmeni kullanılarak geçirilebilir. Aşağıdaki örnek bu değişkenleri bildirme ve ilklendirmelerini gösterir. BenimSinifim x = new BenimSinifim();BenimSinifim y = x; Bu örnekte BenimSinif türünden x değişkeni BenimSinif ın bir örneği yaratılarak bildirilmiş ve ilklendirilmiştir. Varlığın bir örneğini yaratmak için new işletmeni kullanılmıştır. Bundan sonra diğer değişken y, x'i kullanarak bildirilmiş ve ilklendirilmiştir. Eğer varlık sınıf türünden ise new işletmenini kullanarak aslında bu sınıfın yapılandırıcısını çağırmış oluyorsunuz. Yapılandırıcı nesne için gerekli kaynakları ayırır ve nesnenin bir örneğini döndürür.
Atama işletmeni = ve karşılaştırma işletmeni == ve != de ilgi türünde dağişkenlerle kullanılabilir. Fakat bu referans değişkenlerinin sadece gerçek değişkenlere referans içerdikleri unutulmamalıdır. Bu yuzden = işletmeni sadece bir varlığın referansını başka bir değişkene kopyalar, ve == ve != işletmenleri sadece referansları (içeriklerini değil) karşılaştırır ve eğer eşitlerse doğru döndürür.

New işletmeni kullanarak bir varlık oluşturduğunuzda kaynaklar ayrılır ve bu nesne için referenslar döndürülür. Diğer birçok programlama dilinde, açıkça yaratılan fakat artık ihtiyaç duyulmayan varlıkları temizlemek (yada yok etmek) zorundasınız. Fakat Javada, new işletmeni ile yaratılan varlıkları yok etmeye ihtiyaç duymazsınız. Artık ihtiyaç duyulmayan varlıkları, anlamsız veri toplama mekanizması onları sizin yerinize yok eder. Bir nesneyi referans gösteren hiçbir değişken yoksa, nesne anlamsız veri toplayıcıya konur. Yani bir varlığı referans gösteren bütün değişkenler kapsam dışına çıkarsa, farklı bir varlığa yada null değerine atanırsa varlık otomatik olarak yok edilir.
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM--

DÖNGÜLER

Döngü deyimler aynı deyimin (veya deyimlerin), verilen koşul anlatımına gore, sıfır veya daha fazla kez yürütülmesini sağlar. Java programlama dilinde üç çeşit döngü deyimi vardır: while, do-while, and for.
while deyimi verilen koşul doğru olduğu sürece tek bir deyimi veya deyim öbeğini (birden fazla deyimi yürütmek isterseniz) yürütür. Koşul deyimi bir bool değer üretmelidir. while deyiminin biçimi aşağıdaki gibidir:
... while (kosul) deyim; // veya while (kosul){ deyim 1; ... deyim n; }
Do-while deyimi benzer yürütme yapar. Verilen koşul doğru olduğu sürece deyimi ya da deyimleri yürütür. Fakat while deyiminden farklı olarak, while ifadesini takip eden deyimler koşul ifadesine bağlı olarak hiç yürütülmeyebilirken, bunda do ifadesini takip eden deyimler en az bir kez yürütülür. Do-while deyimini biçimi aşağıdaki gibidir: ... do deyim while(kosul); // veya do { deyim 1; ... deyim n; } while (kosul); ... For deyimi değerlerin erimi boyunca yinelemek için kullanılır. For deyiminin biçimi aşağıdaki gibidir: ...
for (ilklendirme;kosul;yineleme) deyim; // veya for (ilklendirme;kosul;yineleme){ deyim 1; ... deyim n; };
... Burada ilklendirme başlangıçta bir kez yürütülen bir deyimdir. Bu bir değişkenin bildirilmesini ve ilklendirmesini içerebilir veya sadece bir kontrol değişkenini ilklendirebilir. Yineleme deyimi takip eden deyimler her yürütüldüğünde, koşul anlatımı yanlış değerlendirilmedikçe yürütülür.
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

DİZİLER

Bir dizi aynı veri türünden değerler grubu içerebilir. Bir diziyi bildirmek için, ya değişken adından sonra yada veri türünden sonra köşeli parantez [] konur. Örneğin,
Burada ilkel tür int'in elemanı olan bir boyutlu j, ve k bildirilir. Diğer referans türleri gibi, bir dizinin bildirimi o dizi için bellek ayırmaz. Dizi kullanılmadan önce yaratılmalıdır (ki değişken ilklendirilsin). Ayrıca dizi new işletmeni ile de şöyle yaratılır: new elementType[size]. Örneğin,
int[] j = new int[10]; int k[]; k = new int[5];
Büyüklüğü 10 ve 5 diziler yaratın ve bunlara i ve j değişkenlerini sırayla referans olarak atayın. Dizinin elemanlarına ayrıca parantez kullanılarak da şöyle variableName[index]erişilebilir. index 0 'dan başlar ve dizinin son elemanı size-1'dir. Aşağıdaki örnekte, büyüklüğü 3 olan char dizisi yaratılır ve üyeleri ilklendirilir:
char[] c = new char[3]; c[0] = 'a'; c[1] = 'b'; c[2] = c[1];
{} parantezi kullanılarak bir dizi yaratmanın ve dizi üyelerini ilklendirmenin bir kısa yolu da vardır. Aşağıdaki örnek kısayol ilklendirmeyi gösterir.
char[] c = {'a', 'b', 'b'};
Bir dizinin büyüklüğü length değişkeni kullanılarak öğrenilebilir. Örneğin yukarıdaki örnekte c.length, 3'ü döndürür.
Çok-boyutlu diziler ve referans türünde elemenlar içeren diziler yaratmak da mümkün
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

KOŞULLAR (IF,SWITCH ,CASE)

Koşullu deyimler hangi deyim ya da deyimlerin verilen koşul anlatımına göre yürütüleceğine karar verilmesini sağlar. Java programlama dilinde üç çeşit döngü deyimi vardır: eğer (if), eğer-ya da (if-else), ve anahtar (switch).
If deyimi bir deyimi ya da deyim öbeğini yürütme yada yürütmeme kararını vermek için kullanılır. Eğer koşul doğru ise deyim yürütülür, yoksa yürütme onu takip eden bir sonraki deyimle devam eder. If deyiminin biçimi aşağıdaki gibidir: ...
if(koşul) deyim; // veya if(koşul){ deyim 1; ... deyim n; }
... Koşul anlatımı bir bool değer döndürmelidir. Do-while deyimi de benzer yürütme yapar.
Bir if-else deyimi hangi deyimi ya da deyim öbeğini yürütme kararını vermek için kullanılır. Eğer koşul doğru ise birinci deyim ya da deyim öbeği yürütülür, yoksa ikinci deyim ya da deyim öbeği yürütülür. If-else deyiminin biçimi aşağıdaki gibidir:
if(kosul) deyim1; else deyim2; // veya if(kosul){ deyim 1_1; ... deyim 1_n; } else { deyim 2_1; ... deyim 2_m; }
Else bölümü başka if deyimleri de içerebilir:
if (kosul 1){ deyim 1_1; ... deyim 1_n;} else if (kosul 2){ deyim 2_1; ... deyim 2_m;} else if (kosul 3) { deyim 3_1; ... deyim 3_k;} else { deyim 4_1; ... deyim 4_t;}
Bir switch deyimi verilen tamsayı veya karakter değerine göre (bir değişkenden veya anlatımdan gelen) yürütülecek bir deyimi ya da deyimleri seçmede kullanılır. switch deyiminin biçimi aşağıdaki gibidir:
switch (anlatim){ case <deger1>: deyim 1; break; case <deger2>: deyim 2; break; ... case <deger n>: deyim n; break; default: deyim n+1; }
Burada anlatım bir tamsayı veya karakter değeri üretir ve yürütülecek deyim onun değerine göre belirlenir. Örneğin, eğer onun değeri <değer 2> ye eşitse case <değer 2> bölümü break deyimine kadar yürütülür. break) deyimim switch öbeğinin sona ermesine sebep olur ve yürütme switch öbeğini takip eden deyimle devam eder. Eğer hiçbir case <değer i> satırı eşleşmezse varsayılan (default) bölümü yürütülür (istenmezse varsayılan bölümü atlanabilir).
Birçok case bölümünü şu şekilde birleştirmek mümkün:
switch (anlatim){ case <deger1>: case <deger2>: case <deger3>: deyim 1; break; case <deger4>: case <deger5> deyim 2; break; ... case <deger n>: deyim n; break; default: deyim n+1; }
Bu durumda, eğer anlatim, <deger1>, <deger2> veya <deger3> den birine eşitse deyim 1 yürütülür.
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
--DEVAM--

NOT: BURADAN SONRAKI KONULAR DA OOP mantığı temelleri anlatılmıştır.

SARMALAMA NEDIR ?

Nesneler nesneye yönelik bir programda yapılandırıcı elemanlardır. Aynı gerçek dünyadaki nesneler gibi, bir programdaki her nesne bir kimliğe sahiptir. Yani, bir nesne durumunu ve davranışını kapsuller. Nesneler başka nesnelere davranışlarını tanımlayan üye yöntemleri ile hizmet sağlar. Bir nesnenin durumu, nesnenin üye yöntemlerini çagırarak, ve davranışı ise nesnenin durumuna göre değişir.
Bütün nesneler kendini diğer nesnelerden ayıran bir kimliğe sahiptir. Yani, her nesne o nesnenin hafızadaki yerini gösteren bilgiye sahiptir. Bir nesnenin ilgisi bir programda nesnenin ismi olarak düşünülebilir. Bu nedenle, bir nesneden hizmet alabilmek için o nesnenin ilgisini bilmek gerekir.

Yandakı şekilde bazı nesneler gösteriyor ki bu gösterim kütüphane sistemi için önemli olabilir (ayrıca kütüphane sistemi kullanıcıları için de önemlidir). Buradaki kullanılan gösterim UML’dir –ki UML nesneye yönelik analiz ve dizaynda yaygın olarak kullanılan modelleme dilidir. Diktörtgen şeklinde gösterilen kimliği yazılı nesneler (altı çizili ve ':' eklenmiş), durumu ortada belirtilmiş ve sağladığı hizmetler en alta yazılmış. Görüldüğü gibi, her nesne farklı duruma ve o durumun davranışına sahip olabilir.
2-020-1.gif
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

MİRAS veya YENİDEN KULLANIM


Bir sınıf bildirildiği zaman, sınıfın bildirimi iki boyutta tekrar kullanılabilir: sınıf bildirimi ya o sınıftan örnek yaratmak için kullanılabilir, yada yeni bir sınıf yaratmak için kullanılabilir. Birincisi sınıf bildiriminin yeniden kullanılmasının düz yolu, sonraki ise daha sonra anlatılacak olan miras(inheritance) olarak adlandırılır.
Başka bir nesnenin içinde bir sınıftan bir örnek bildirildiği zaman, bu, tekrar kullanım yaratan nesne ile yaratılan nesne arasındaki ilişkiye bağlı olarak ya birleşim, yada birlik olarak adlandırılır. İki sınıf arasındaki sıradan birlik, çalışma zamanında örnekler arasında varolan bir ilişki tanımlar. Yani, bir programda bir nesne referans değişkenleri yoluyla başka bir nesne tarafından kullanılır. Diğer taraftan, birleşimler bir ilişkinin bütün kısımlarını temsil eden özel birliklerdir. Eğer iki sınıf arasında birleşim ilişkisi var ise, kısımların örnekleri gerçekten toplamın örnekleridir. Yandaki şekil UML içindeki iki sınıf arasında basit bir birlik ve birleşim ilişkisini gösteriyor. Genellikle her birlik birliğin mizacını göstermek için birliğin sonunda etiketlenir (birliğin sonunda sınıfın kaç tane örneği olduğu). *'nin sıfır yada daha fazla anlamına geldiğine dikkat ediniz.

2-080-1.gif


2-080-2.gif

Bir yerde birleşim yada birlik ilişkisi olup olmadığına bakılmaksızın, şu söylenebilir, bir programda nesneler birbirlerinin servislerini kullanabilirler. Bu amaç için, nesneler ilgi tiplerinde üye değişkenler bildirirler ve kullanırlar, ve nesneler birbirlerinin yöntemlerini çağırarak işbirliği yaparlar.(Bir nesnenin yöntemini çağırmak, ayrıca, bir nesneye mesaj göndermek olarak bilinir). Önceki cümleden anlaşılacağı üzere, bir nesne üye değişkeni içinde başka bir nesneye ilgiler içerebilir ve o nesnenin üye yöntemlerini çağırarak o nesneden hizmet alabilir. Ayrıca bir nesnenin üye değişkenlerine direkt olarak da ulaşılabilir, fakat bu genellikle tercih edilmez
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

INTERFACE (ARAYÜZ)

Bir arayüz soyut sınıfların genelleştirilmesidir. Bir arayüz ile soyut sınıfın arasındaki en önemli fark şudur; arayüz içinde tanımlanmış tüm yöntemler soyut iken soyut sınıfı bazı yöntemleri bildirebilir ve gerçekleştirebilir. Bir arayüz içinde bildirilmiş yöntemler arayüzü gerçekleştiren (veya miras alan) sınıflar içinde gerçekleştirilmelidir.
Bir başka ayrım da şudur; bir sınıfın sadece bir süper sınıfı olabilirken, arayüzün tüm yöntemlerini gerçekleştirdiği sürece, herhangi bir sayıda arayüzü gerçekleştirebilir. Bu yüzden arayüzler birkaç çeşit kalıtım sağlayabilirler diyebilirz ki bu sınıflar için geçerli değildir.
Java dilinde bir arayüz basitçe interface anahtar kelimesi kullanılarak bildirilebilir. Aşağıdaki kod basit bir arayüzün bildirilmesini göstermektedir:

interface Cizilebilen{
void draw();
};

Her sınıf gerçekleştirilecek arayüzü implements anahtar kelimesini kullanarak belirtebilir ve böylece arayüzün tüm yöntemlerini gerçekleştirmiş olur. Aşağıdaki örnekte Daire sınıfı Çizilebilen arayüzünü gerçekleştirir:

class Dikdortgen extends Sekil implements Cizilebilir
{ int radius;
void scale(int scaleFactor)
{ width *= scaleFactor;
height *= scaleFactor;
}
void draw()
{ ...
}
}


Sınıflar gibi arayüzler de extends anahtar kelimesini kullanarak başka arayüzlerden miras alabilirler.Bir arayüz ayrıca aynı üye değişkenleri bildirebilirler. Bir arayüz içinde bildirilmiş tüm üye değişkenler bu arayüzü gerçekleştiren tüm sınıflar tarafından miras alınır. Fakat bir arayüz içinde bildirilmiş tüm üye değişkenler otomatik olarak static ve finaldır.
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM-

KALITIM

İkinci tür yeniden kullanım sınıf yapısının kalıtım yoluyla yeniden kullanılmasıdır. Kalıtım nesneye dayalı programlama dillerinin anahtar elemanlarından biridir.
Eğer farklı sınıflar benzer durumlara sahipse ve benzer servisler sağlıyorlarsa kalıtım bu benzer kısımları genelleştirilmiş sınıf bildiriminden tekrar kullanmamıza olanak verir. Bu, soyut temel sınıf yaratılarak ve onun durum ve davranışlarını daha çok özelleştirilmiş sınıflarda tekrar kullanarak başarılır. Eğer bir sınıf temel bir sınıftan türetilmişse, bütün üye değişkenler ve üye yöntemler türetilmiş sınıf tarafından miras alınır (veya kullanılır hale getirilir). Temel sınıf superclass (süper sınıf) olarak ve türetilmiş sınıf subclass (alt sınıf) olarak adlandırılır. Kalıtımla gerçekte superclass ile uyumlu olan yeni bir sınıf yaratılır. Yani subclass superclass türünde bir sınıfmış gibi kullanılabilir. Bu subclass örneklerinin superclass'a dönüşümünü mümkün kılar. Bu durum polimorfizm olarak tanımlanır ki bu da nesneye dayalı programlama dillerinin bir diğer anahtar elemanıdır. Polimorfizm daha sonra detaylandırırlacaktır.
Kalıtım ilişkisi ayrıca bir ..dır ilişkisi şeklinde tanımlanabilir. Örneğin, bir Sekil sınıfı ve bunu miras alarak bir Diktortgen ile bir de Daire sınıfları yarattınız. Bu durumda her Diktortgen sınıfı bir Sekildir diyebiliriz. Bu özellik kalıtım kullanarak genelleştirmeye de yardımcı olur. Eğer iki sınıf arasında bir kalıtım ilişkisi varsa bir ..dır kuralı mutlaka sağlanmalıdır. Örneğin, Diktortgen ile Daire sınıfları arasında bir kalıtım ilişkisi kurmak mümkün değildir. Her Diktortgen bir Dairedir diyemeyiz.

Basit bir kalıtım size süper sınıfın üye yöntem ve değişkenlerini yeniden kullanmanıza ve alt sınıf içinde yeni üye yöntem ve değişkenler tanımlamanıza izin verir. Yandaki figür geometrik şekiller için basit bir kalıtım hiyerarşisini UML de gösterir. Kalıtım ilişkisi gösterebilmek için süper sınıfa üçgen noktalar eklenmiştir.
Kalıtımın herhangi bir derinlikte olabileceğine dikkat edin. Yani bir sınıf bir süpersınıfın alt sınıftan miras alabilir ve yeni sınıf süper sınıfının tüm yöntem ve değişkenlerini miras alır ki bunların bazıları süper sınıfının süper sınıfından miras alınmış olabilir.
2-100-1.gif

Java programlama dilinde bir sınıfdan miras almak için extends anahtar kelimesini şöyle kullanabilirsiniz:
class Şekil
{ int pozisyonX;
int pozisyonY;
void move(int newX, int newY)
{ pozisyonX = newX;
pozisyonY = newY;
}
}

class Daire extends Şekil //ŞEKİLDEN MİRAS ALIYORUZ. C# DA :
{
int radius;
void scale(int scaleFactor)
{ radius *= scaleFactor;
}
}

class Diktörtgen extends Şekil
{ int radius;
void scale(int scaleFactor)
{ width *= scaleFactor;
height *= scaleFactor;
}
}

Alt sınıfların yaratılması ve kullanılması sıradan sınıflarla aynıdır. Kalıtım ayrıca süper sınıfın üye değişken ve yöntemlerini alt sınıfın üye değişken ve yöntemleri gibi kullanabilmenizi sağlar:

Daire c = new Daire();
c.positionX = 10;
c.positionY = 20;
c.radius = 3;
c.move(11,11);
c.scale(5);

Eğer başka bir sınıftan miras almadıysanız bile derleyici otomatik olarak Object sınıfından miraz alır. Bildirdiğiniz her sınıf direk ve dolaylı olarak Object sınıfından miras alır. Object sınıfı kalıtım hiyerarşisinde en üstedir ve programdaki her nesne Object sınıfına dönüştürülebilir (Farklı sınıfların örneklerini saklıyor,erişiyor ve değiştiriyorsanız bunu yapmanız faydalı olur). Object sınıfı programdaki bütün sınıflar tarafından miras alınan birçok faydalı servis sağlar.

Bunların birkaçı şunlardır; toString(), equals(), clone(), getClass().
 

emc2

Aktif Üye
Katılım
7 Nis 2012
Mesajlar
36
Tepkime puanı
0
Puanları
0
Yaş
53
Konum
lalapaşa
-DEVAM--

ÇOK BİÇİMLİLİK

Çok biçimlilik nesneye dayalı dillerin en güçlü özelliklerinden biridir. Çok biçimlilikle programdaki her nesne kendi davranışını değiştirmeden, kalıtım hiyerarşisine göre farklı biçimlerde görülebilir.
Daha önce belirtildiği gibi bir alt sınıfın örneği derleyici tarafından otomatik olarak onun süper sınıflarından birine dönüştürülebilir. Bir nesneyi onun süper sınıfına dönüştürmek yukarıya dönüştürmektir. Farklı alt sınıfların nesnelerini ortak bir süper sınıfa dönüştürmeyle, onları yönetmek için aynı kod kullanılabilir. Daha da önemlisi eğer yeni alt sınıflar yaratırsanız aynı kodu onları yönetmek için de kullanabilirsiniz. Bu programa genişletilebilirlik getirir ve benze nesneler için aynı kodun kullanılması kodu basitleştirir.
Kalıtım, yöntem geçersizleştirme, dinamik bağlamayla birlikte çok biçimli nesnelerin yukarıya dönüştürülmeseler bile doğru davranmasını sağlar. Dinamik bağlama bir nesnenin üye yöntemi çağırıldığında, çağırılacak doğru yöntemi belirleyen bir yöntem çağırma mekanizmasıdır. Örneğin, önceki şekil sınıflarımızın aşağıdaki UML deki kalıtım diagramına sahip olmaları için küçük bir miktar değiştirildiğini düşünün.
2-140-1.gif

Bu kalıtım diagramı Sekil sınıfının scale yöntemi Daire ve Dikdortgen sınıfları tarafından geçersizleştirilir. Daire sınıfının bir örneğinin scale yönteminin çağırılması iki alternatife sahiptir: Sekilin scale yöntemi Dairenin scale yöntemi. Daire sınıfının bir örneğinin scale yöntemi çağırıldığından, derleyici Dairenin scale yöntemini çağırır (Şekilin scale yöntemini değil). Daire nesnesinin örneğinin yukarı dönüştürülmesi bu davranışı etkilemez. Bu özelliğin birçok faydası vardır. Örneğin, Daire ve Diktortgen sınıflarının örneklerinden bir dizimiz olduğunu düşünelim:


Sekil[] sekiller = new Sekil[3];
sekiller[0] = new Daire();
sekiller[1] = new Diktortgen();
sekiller[2] = new Daire();

Bütün örnekleri ölçeklemek (scale) için aşağıdaki kod yeterli olacaktır:
for(int i=0; i<sekiller.length; i++) sekiller.scale(4);
Yukarıdaki örnekte çok biçimliliği kullanarak farklı sınıfların örneklerini ortak bir yerde depoladık ve onların hangi sınıfta yaratıldığını dikkate almadan scale yöntemini çağırdık. Bir süre sonra Sekil sınıfının başka bir alt sınıfını, Ucgeni, yaratabilir ve yukarıdaki kodu hiç değiştirmeden kullanabilirsiniz.
 

Bilgi / İnfo

satcafesi.net kar amacı gütmeyen bilgi & paylaşım üzerine kurulu ücretsiz bir forum sitesidir,Üyeler her türlü bilgiyi,dosya,video,resim,vs. önceden onay olmadan paylaşabilmektedir,bunedenle oluşacak herhangi bir illegal paylaşımdan satcafesi sorumluluk almamaktadır,T.CK.na aykırı paylaşım görüldüğünde iletişim kısmından bizlere bildirmenizi rica ederiz.

Yasal Haklar

Foruma gönderilen mesajlardan öncelikle mesaj sahipleri sorumludurlar. Forum yöneticileri başkalarının mesaj veya konularından sorumlu tutulamazlar. Ancak yasal nedenlere bağlı herhangi bir şikayet durumunda, yetkililer bilgilendirildiği takdirde ilgili düzenleme yapılacaktır.
Üst