İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. SDN Programlama Kafe
SDN Programlama Kafe

Encapsulation ve Inheritance Örneği?

SiberWorm25.11.201018 cevap5.087 görüntüleme
2009'den beri508 mesaj
#1
Kapsülleme (Encapsulation)
Kalıtım (Inheritance)

Güzel bir örnekle kim açıklayabilir acaba ?

Yarın sınavım var bunlardanda %100 soru çıkacak..!

Şimdiden teşekkürler.
Cevaplar
2010'den beri1.941 mesaj
#2
google amca'yada bi sorsaydın !
SiberWorm Konuyu açan
2009'den beri508 mesaj
#3
mperk dedi: ↑
google amca'yada bi sorsaydın !
Hocam var elimde örnekleri açıklamaları fakat iyi bir şekilde anlatan yok :S
2008'den beri8.662 mesaj
#4
Hönk:blink::confused1::P
SiberWorm Konuyu açan
2009'den beri508 mesaj
#5
mustang dedi: ↑
Hönk:blink::confused1::P
Aynen Hönkkk :)
2009'den beri44 mesaj
#6
Selam; Inheritance ile başlayım.(Java ile örneklendirecem)
Şimdi bir hayvan objenin olduğunu düşün, bu hayvan objesinin belli başlı değişkenleri ve methodları olsun.
Değişkenler : int gr, int hiz olsun
Methodlar : dur(), kac(), beslen() olsun.
public class Hayvan
{
public int gr,hiz;
public Hayvan() {}
public void dur() {}
public void kac() {}
public void beslen(){}
}
Şimdi birde Kus diye bir objen olsun. Bu kus nedir? hayvandır değil mi? O zaman Hayvan classini Kus classinda inherit edebiliriz (Baska bir deyisle, Kus classini Hayvan classina extend edebiliriz)
Bir classi baska bir classa extend etmek:
Misal A'yi B ye extend edersek, A'nin B'deki butun degiskenleri ve methodlari kendininmis gibi tanimasidir.
Bu durumda bizim kus classimiz şu şekilde olabilir :
public class Kus extends Hayvan
{
public Kus() { }
}

Simdi ne oldu?
Biz Kusta dur(),kac(),beslen(), kg, hiz vb.. seyleri tanimlamadik ama, programimizi yazarken;
Kus.kg, Kus.hiz, Kus.dur(), Kus.kac(), Kus.beslen() şeklinde bu degiskenlere ve methodlara ulaşabiliriz.
Mesela birde Balik adinda bir classimiz olsun buda Hayvani extend etsin.
public class Balik extends Hayvan
{
public Balik() { }
}
Simdi Balikla kusun en temel benzerlikleri nedir? ikiside beslenir, ikiside durur, ikiside kacar.
Hayvan classimiz bize bu methodlari sagliyor, bizde Olusturdugumuz classlari Hayvana extend ediyoruz :)
Peki farklar yok mu? Elbette var. Misal Kus uçar, Balik yuzer. O zaman ne yapiyoruz?
Her classin kendine ait methodunu yaziyoruz.
public class Kus extends Hayvan
{
public Kus() { }
public void uc() { }
}
public class Balik extends Hayvan
{
public Balik() { }
public void yuz() { }
}
Bu yazdigimiz methodlar classlara ozeldir. Yani Balik.uc() yada Kus.yuz() seklinde kullanamayiz.
Bununla birlikte, Hayvan classinda, Diger classlarda kullandigimiz ortak methodlarda degisiklik olabilir.
Misal Hayvan classimiz şöyle olsun :
public class Hayvan
{
public int gr,hiz;
public Hayvan()
{
hiz = 0; gr = 1000;
}
public void dur() { hiz = 0;}
public void kac() {hiz += 1;}
public void beslen(){gr += 100;}
}
Kus ve Balika baktigimizda davranis bicimi ortak olabilecek durum ne olabilir?
Durmak. Durmak temelde hizinin 0 a inmesidir degil mi? O zaman bu methodu Kus ve Balik classlarinda ayri ayri degistirmeye gerek yok.
Ama balikla kusun hizi ayni olmayabilir, beslendiklerinde aldiklari kiloda ayni olmaya bilir. Bunlari degistirebiliriz mesela.
public class Kus extends Hayvan
{
public Kus() { }
public void uc() { }
public void kac() { hiz+= 10; }
public void beslen() { gr+=250; }
}
public class Balik extends Hayvan
{
public Balik() { }
public void yuz() { }
public void kac() { hiz+= 5; }
public void beslen() { gr += 10; }
}
Hayvan classinda tanimli olan methodlarin, Hayvan classini extend eden baska classlarin icinden yeniden tanimlanmasi olayinada Override deniyor.
Encapsulation denen sey ise (bildigim kadariyla) bir objede bulunan degiskenlerin ve methodlarin obje classi içine yazilip, dışardan bunlara direk erişimi engellemektir.

Obje kendi methodlarina & degiskenlerine erisirken kendi kendini cagirmaya ihtiyac duymaz:
Misal Hayvan,Balik,Kus classlarinin icinde hiz+=5, gr +=250 gibi class degiskenlerine direk erisim saglarken;
Atiyorum bir test classindan Bu Degiskenlere Erisim saglamak istedigimizde
Kus k = new Kus();
k.hiz = 10,
k.beslen();
şeklinde erişiriz. Yani objeyi çağririz.

Encapsulation konusunda tam emin değilim gerçi :)
SiberWorm Konuyu açan
2009'den beri508 mesaj
#7
t(>_<t) dedi: ↑
Selam; Inheritance ile başlayım.(Java ile örneklendirecem)
Şimdi bir hayvan objenin olduğunu düşün, bu hayvan objesinin belli başlı değişkenleri ve methodları olsun.
Değişkenler : int gr, int hiz olsun
Methodlar : dur(), kac(), beslen() olsun.
public class Hayvan
{
public int gr,hiz;
public Hayvan() {}
public void dur() {}
public void kac() {}
public void beslen(){}
}
Şimdi birde Kus diye bir objen olsun. Bu kus nedir? hayvandır değil mi? O zaman Hayvan classini Kus classinda inherit edebiliriz (Baska bir deyisle, Kus classini Hayvan classina extend edebiliriz)
Bir classi baska bir classa extend etmek:
Misal A'yi B ye extend edersek, A'nin B'deki butun degiskenleri ve methodlari kendininmis gibi tanimasidir.
Bu durumda bizim kus classimiz şu şekilde olabilir :
public class Kus extends Hayvan
{
public Kus() { }
}

Simdi ne oldu?
Biz Kusta dur(),kac(),beslen(), kg, hiz vb.. seyleri tanimlamadik ama, programimizi yazarken;
Kus.kg, Kus.hiz, Kus.dur(), Kus.kac(), Kus.beslen() şeklinde bu degiskenlere ve methodlara ulaşabiliriz.
Mesela birde Balik adinda bir classimiz olsun buda Hayvani extend etsin.
public class Balik extends Hayvan
{
public Balik() { }
}
Simdi Balikla kusun en temel benzerlikleri nedir? ikiside beslenir, ikiside durur, ikiside kacar.
Hayvan classimiz bize bu methodlari sagliyor, bizde Olusturdugumuz classlari Hayvana extend ediyoruz :)
Peki farklar yok mu? Elbette var. Misal Kus uçar, Balik yuzer. O zaman ne yapiyoruz?
Her classin kendine ait methodunu yaziyoruz.
public class Kus extends Hayvan
{
public Kus() { }
public void uc() { }
}
public class Balik extends Hayvan
{
public Balik() { }
public void yuz() { }
}
Bu yazdigimiz methodlar classlara ozeldir. Yani Balik.uc() yada Kus.yuz() seklinde kullanamayiz.
Bununla birlikte, Hayvan classinda, Diger classlarda kullandigimiz ortak methodlarda degisiklik olabilir.
Misal Hayvan classimiz şöyle olsun :
public class Hayvan
{
public int gr,hiz;
public Hayvan()
{
hiz = 0; gr = 1000;
}
public void dur() { hiz = 0;}
public void kac() {hiz += 1;}
public void beslen(){gr += 100;}
}
Kus ve Balika baktigimizda davranis bicimi ortak olabilecek durum ne olabilir?
Durmak. Durmak temelde hizinin 0 a inmesidir degil mi? O zaman bu methodu Kus ve Balik classlarinda ayri ayri degistirmeye gerek yok.
Ama balikla kusun hizi ayni olmayabilir, beslendiklerinde aldiklari kiloda ayni olmaya bilir. Bunlari degistirebiliriz mesela.
public class Kus extends Hayvan
{
public Kus() { }
public void uc() { }
public void kac() { hiz+= 10; }
public void beslen() { gr+=250; }
}
public class Balik extends Hayvan
{
public Balik() { }
public void yuz() { }
public void kac() { hiz+= 5; }
public void beslen() { gr += 10; }
}
Hayvan classinda tanimli olan methodlarin, Hayvan classini extend eden baska classlarin icinden yeniden tanimlanmasi olayinada Override deniyor.
Encapsulation denen sey ise (bildigim kadariyla) bir objede bulunan degiskenlerin ve methodlarin obje classi içine yazilip, dışardan bunlara direk erişimi engellemektir.

Obje kendi methodlarina & degiskenlerine erisirken kendi kendini cagirmaya ihtiyac duymaz:
Misal Hayvan,Balik,Kus classlarinin icinde hiz+=5, gr +=250 gibi class degiskenlerine direk erisim saglarken;
Atiyorum bir test classindan Bu Degiskenlere Erisim saglamak istedigimizde
Kus k = new Kus();
k.hiz = 10,
k.beslen();
şeklinde erişiriz. Yani objeyi çağririz.

Encapsulation konusunda tam emin değilim gerçi :)
Hocam sağolasın.Sınavda haftaya ertelendi işime yarayacak çok sağol
2009'den beri44 mesaj
#8
Kolay gelsin ^^
SiberWorm Konuyu açan
2009'den beri508 mesaj
#9
t(>_<t) dedi: ↑
Kolay gelsin ^^
Sağolun hocam teşekkürler.
2007'den beri2.589 mesaj
#10
encapsulation'a da ben birşeyler yazayım : Öncelikle faydaları sonra da örneği ile geçicem.

class ların field'larının sadece yazma ya da sadece okuma gibi sınırlandırmaları yapılır.
class içinde saklanan herşeye full kontrol sağlar.
class'ı kullanan diğer class'lar bu class içindeki değişiklikleri bilmek zorunda kalmazlar. sürekliliği sağlar yani. class'da değişiklik olsa bile onu kullanan class'ın bir değişikliğe ihtiyacı olmaz.

örnekler ve anlatım bir siteden alıntıdır :
-----------------------------------
public class EncapTest{

private String name;
private String idNum;
private int age;

public int getAge(){
return age;
}

public String getName(){
return name;
}

public String getIdNum(){
return idNum;
}

public void setAge( int newAge){
age = newAge;
}

public void setName(String newName){
name = newName;
}

public void setIdNum( String newId){
idNum = newId;
}
}

bu class'ı kullanmak isteyen bir class direk onun elemanlarına erişemez. bunun yerine onun metodlarını yani termineloji ile getter ve setter'lerini kullanmak zorunda.

public class RunEncap{

public static void main(String args[]){
EncapTest encap = new EncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");

System.out.print("Name : " + encap.getName()+
" Age : "+ encap.getAge());
}
}
SiberWorm Konuyu açan
2009'den beri508 mesaj
#11
@annttiigs eyw.hocam teşekkürler.Çok Sağol
2007'den beri2.589 mesaj
#12
rica ;) sorunuz olursa ben bakıyorum foruma. Java konusunda yardımcı olmaya çalışırım ;)
2008'den beri13 bin mesaj
#13
Bir de polymorphysim anlatsanız 10 numara olacak. :P
SiberWorm Konuyu açan
2009'den beri508 mesaj
#14
keyloger dedi: ↑
Bir de polymorphysim anlatsanız 10 numara olacak. :P
What ? :)
2008'den beri13 bin mesaj
#15
siberworm dedi: ↑
What ? :)
Yanlış yazmışım; Polymorphism böyle olacak doğrusu. :)
SiberWorm Konuyu açan
2009'den beri508 mesaj
#16
Hmm valla ikisinide ilk defa duydum :D
2008'den beri13 bin mesaj
#17
siberworm dedi: ↑
Hmm valla ikisinide ilk defa duydum :D
Inheritance gördüğüne göre 1 sonraki konuda bunu göreceksin ama bu poly ile ne demek istediklerini ben de tam kavrayabilmiş değilim, bu sebeple sordum. :)
SiberWorm Konuyu açan
2009'den beri508 mesaj
#18
@keyloger anladım hocam.Ama onu atladı hoca :) Neyse sağlık olsun inşallah Allah izin verirse üniversitede görürüz :)
2007'den beri2.589 mesaj
#19
polymorphisim : çok türevlilik anlamına gelir. objelerin subclass'ın super class gibi çağırılabildiği bir yapı oluşturulduğunu düşünün. "is a" "has a" terminelojisinde "is a"'ye karşılık düştüğü söylenebilir. konuyla ilgili olarak yarın örnek de veririm :)

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.