sarma (encapsulation) / kalitim (inheritance) /final terimleri

24
Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri www.ahmetsayar.com

Upload: marsden-reese

Post on 30-Dec-2015

64 views

Category:

Documents


0 download

DESCRIPTION

Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri. www.ahmetsayar.com. Icerik. Sarma (Encapsulation) “Default” Erişim “Public” Erişim “Private” Erişim “Protected” Erişim Erişim Düzeyleri Sıralaması Kalıtım (Inheritance) Final Terimleri. Sarma (Encapsulation). Neden? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

www.ahmetsayar.com

Page 2: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Icerik

• Sarma (Encapsulation)– “Default” Erişim– “Public” Erişim– “Private” Erişim– “Protected” Erişim

• Erişim Düzeyleri Sıralaması• Kalıtım (Inheritance)• Final Terimleri

Page 3: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Sarma (Encapsulation)

• Neden?– Bilgi saklama– Kullanıcıyı gereksiz detaylardan uzak tutma– Oluşabilecek hataları önleme

• “Kendimizi kendimizden korur!"

Page 4: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Sarma (Encapsulation)

• Her sınıf çeşitli üyelerden (özellikler & metodlar) oluşur.

• Bazı özellikler ve metodların ait olduğu sınıf’ın dışında erişimini sınırlama özelliğine 'encapsulation‘ (sarma/kapsülleme) denir.

• Encapsulation sağlamak için “private”, “public” ve “protected” sözcükleri kullanılır.– Bunlara erişim modifier (erişim belirleyici) denir.

Hiçbirini kullanmamakta belli bir tercih anlamına gelir.

Page 5: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Friendly (Default) Erişim

• Hiç bir erişim belirleyici kullanılazsa, bu üye ’package private‘ olur.

• Ona sadece aynı paketteki diğer sınıf’lar erişebilir, diğer paketlerdekiler erişemez.

Page 6: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Public Erişim

• Sistemdeki bütün sınıfların erişebilmesini sağlamak için ‘public‘ erişim belirleyicisi kullanılır.

• Bu belirleyici özellikle başkaları erişsin diye yazılan özellik ve metodlar için kullanılır.

• Bir nesnede ne kadar az “public” değişken varsa dışarıya o kadar sade görünür ve o kadar kolay kullanılır.

Page 7: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Private Erişim• Bir özellik veya metodun sadece tanımlandığı sınıftan

erişilebilmesini, başka bir deyişle, o sınıf dışındaki bütün sınıflardan (aynı paket’de olsalar bile) erişiminin yasaklanmasını sağlamak için ‘private‘ anahtar kelimesi kullanılır.

• Bir değişkenin dışarıdan görülebilmesini ancak değiştirilememesini veya değiştirme işleminin sınıfın kontrolünde yapılmasını sağlamak için standart bir yöntem izlenir.– Bir özelliği read-only (salt okunur) yapmak için, o özellik

“private” yapılır.– Ona erişmek için bir tane public metod yazılır. Bu şekilde

dışarından özelliklerinin değerleri dolaylı olarak öğrenilmiş olur.

Page 8: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Protected Erişim• Bazı durumlarda bir özellik veya metodun dışarıya

kapalı olmasını ancak o sınıftan türeyenlere açık olması istenebilir.

• Bu durumda 'protected‘ erişim belirleyicisi kullanılır.

• Bu anahtar sözcük, belli bir özellik veya metodun sadece ondan türetilen sınıfları ilgilendirmesi durumunda kullanılır.

Page 9: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Protected Erişim• Bir sınıf türediği sınıfın bütün public özelliklerine

erişebilir hale gelir.– Zaten bunlara her sınıftan erişilebilmektedir.– Hiçbir private özellik türetilen sınıfa geçmez. Bunlar diğer

bütün sınıflara da kapalıdır.– Ancak protected özellik ve metodlar dışarıya kapalı

oldukları halde, türetilen sınıf bunlara erişim hakkına sahiptir.

• Erişim belirleyici olarak “protected” verilmiş özellik veya metodlara o sınıfla aynı paket içerisinde bulunan bütün sınıflar tarafından da erişilebilir.

Page 10: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Erişim Düzeyleri Sıralaması

• Sarma / Kapsülleme düzeyleri için public > protected > friendly > private şeklinde bir sıralama yapılır.• Büyük olan düzey küçük olanların haklarını da

kapsar • Bir özelliğin “public” olup “private” özelliği

içermemesi, yani tanımlandığı sınıftan erişilemez ama onun dışındaki bütün sınıflardan erişilir gibi bir duruma sahip olması söz konusu olamaz.

Page 11: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım

Page 12: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım Mantığı• Bazı sınıflar, kendi özeliklerini taşıyan özel tiplere ayrılabilir.

– Örnek: Bisiklet: dağ bisikleti, yarış bisikleti– Dağ bisikleti ve yarış bisikleti; bisiklet sınıfının alt-sınıflarıdır

(“sub-classes”).– Bisiklet sınıfı; dağ bisikleti ve yarış bisikleti sınıflarının üst-

sınıfıdır (“super-class”).

• Her alt-sınıf kendi üst-sınıfının özelliklerini ve işlevlerini taşır (kalıtım - ”inheritance”).– Dağ bisikleti ve yarış bisikleti, bisiklet sınıfına ait özellikleri taşır:

vites, tekerlek, pedal, vb.– Dağ bisikleti ve yarış bisikleti, bisiklet sınıfına ait işlevleri

gösterir: hızlanma, fren yapma, vites değiştirme, vb.

Page 13: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım Mantığı -2• Bir alt-sınıf, üst-sınıfından taşıdığı özelliklere ve işlevlere ek olarak;

kendine ait özellikleri ve işlevleri içerebilir (tanımlayabilir).– Örnek: Dağ bisikleti, tırmanmayı kolaylaştıran ek viteslere sahip

olabilir.

• Bir alt-sınıf aynı zamanda, üst-sınıfından taşıdığı işlevleri değiştirebilir (üzerine yazma – “method overriding”).– Örnek: Dağ bisikleti, bisiklet sınıfının “vites değiştir” işlevini, ek

vitesleri kullanmayı sağlayacak şekilde değiştirebilir.

• Kalıtım sadece tek seviyeli olmak zorunda değildir, birden çok seviyede tanımlanabilir.– Bir alt-sınıf her zaman, üstündeki tüm sınıfların özelliklerini ve

işlevlerini taşır.– Kalıtım ağacında (“inheritance tree”) aşağılara doğru inildikçe sınıfın

öznelliği artar.

Page 14: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım Mantığı -3• Sınıflar arasındaki kalıtım, uygulamada aşağıdaki avantajları

sağlar:– Alt-sınıflar, üst-sınıflarının özelliklerini ve işlevlerini

taşıdıklarından; programlama sırasında üst-sınıfların kodu defalarca tekrar kullanılabilir (“reuse”).

• Java’da (C++’da desteklenen) çoklu kalıtım (multiple inheritance) desteklenmez.

• Bir subclass’ın ancak bir tane direct super class’ı olabilir.• Çoklu kalıtım yerine çoklu arayüz (multiple interface)

kullanımı mevcuttur.• Üzerine yazma/çeşitleme (overriding) sayesinde türeyen

sınıflarda miras alınan metodlar ihtiyaçlara göre değiştirilebilir.

Page 15: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım Mantığı -4

• Bir sınıfın diğerindeki özellikleri miras olarak alması için kullanılan anahtar sözcük ‘extends‘ dir.

• Anlam olarak "Bu sınıf şu sınıfı genişletir” yani “ondaki özellik ve metodları alır ve yenilerini ekler“ demektir.

• Miras alınan sınıf - Superclass• Miras alan sınıf – Subclass• Herbir subclass, superclass olma adayıdır.• Bir sınıftan türeyen sınıfın yapılandırıcısı türediği sınıfın

yapılandırıcısını 'super()‘ şeklinde çağırabilir.

Page 16: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Java’da Kalıtım: Örnek - 1

Page 17: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Java’da Kalıtım: Örnek – 2.1

Page 18: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Java’da Kalıtım: Örnek – 2.2

Page 19: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Üzerine Yazma (“Method Overriding”)

• Bir alt sınıfta, üst sınıfa ait bir yöntemi; aynı isim, imza ve dönüş tipi ile tanımlarsak, üst sınıftaki yöntemin üzerine yazmış oluruz.– Alt sınıftan nesne oluşturulduğunda yöntem çağrılırsa, üst sınıfa

ait yöntem yerine, alt sınıfta tanımlanmış yöntem koşturulur.

Page 20: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Neden “Üzerine Yazma” ? - 1

• Genel sınıfta, kendinden türetilen tüm sınıflarda ortak olan işlevselliği tanımlamayı sağlar.

• Bir üst sınıftan alt sınıflara uzanan hiyerarşiyi tanımlamanın amacı, daha az detaydan daha çok detaya doğru işlevselliği oluşturmaktır.– Bu hiyerarşide üst sınıfın görevi, alt-sınıfların

doğrudan kullanabilecekleri (veya üzerine yazabilecekleri) genel özellikleri ve yöntemleri tanımlamaktır.

Page 21: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Neden “Üzerine Yazma” ? - 2

• Üst sınıf aynı zamanda, alt sınıfları için tutarlı bir arayüz oluşturur (ortak tip)

• Bu sınıfları kullanan programlar, alt sınıflardan oluşturulan nesnelerin yöntemlerini, üst sınıfın yöntemlerini kullanır gibi kullanabilirler. Hangi seviyedeki sınıfın yönteminin kullanılacağına koşturma zamanında karar verilebilir (“polymorphism”).– Bu özellik, “if” veya “switch” kullanımına gerek bırakmaz. Yeni bir

çalışan alt sınıfı eklendiğinde mevcut kodun değiştirilmesi gerekmez

Page 22: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Sınıflar Arasında Kalıtım İlişkisi

• Genel sınıf ile onun özel durumlarına karşılık gelen arasındaki ilişki– Ebeveyn-çocuk ilişkisi

(“inheritance”)– ( UML) Okun yönü genel sınıfı

gösterir

• Özel sınıflar genel sınıftan kalıtsal olarak özellikleri ve operasyonları alırlar.

• Özel sınıflar yeni özellikler ve operasyonlar tanımlayabilir veya kalıtsal yoldan aldıkları operasyonları yeniden tanımlayabilirler (“overriding”).

Page 23: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım Örnek Yapılandırıcılar

EKRAN ÇIKTISI

Hayvan SINIFI YAPICISIDortAyakli SINIFI YAPICISIOtcul SINIFI YAPICISI

Page 24: Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri

Kalıtım Örnek – super()

• Ucgen sınıfından bir nesne 3 parametre alan yapıcı metodu ile oluşturulduğunda ilk 2 parametre ana sınıftaki yapılandırıcıya aktarılmış, böylece Sekil sınıfından türetilen nesnelerin ortak özelliği olan Taban ve Yuksekliği türeyen sınıfın içinde tekrar bildirme zorunluluğu ortadan aldırılmıştır.