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

Slides:



Advertisements
Benzer bir sunumlar
Programlama-II (Java ile Bilgisayar Programlama)
Advertisements

C# - Metotlar.
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Tuğba DEMİREL
İSİM UZAYLARI.
Nesneye Dayalı Programlama
İşletim Sistemlerine Giriş – 2 Kaynakların Paylaşımı
Erişim Kontrolü.  Değişebilir / Değişemez yapılar  Çok programcının dahil olduğu projeler  Kütüphaneler  Çözüm  Konvansiyonlar  Erişim kontrol sözcükleri.
Polymorphism.  Bir işlem birden fazla tip üzerinde çalışabilir  Metot temel tip arayüzünü kullanır  İşlem çalışan metot tarafından yapılır.
Miras Alma EM-406 Java.
İSİM UZAYLARI (Name Space)
OOP Tanımlar.
1.Yazılım Geliştirme Biligisayar techolojisinin iki bir birine bağalı konusu var: Donanım (hardware) Yazılım (software)
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
P AKET E RIŞIMLERI SıNıFLARıN YENIDEN KULLANıMı. P AKET ( P ACKAGE ) Paketler kütüphaneleri oluşturan elemanlardır. import java.io.BufferedReader; BufferedReader.
Sınıfların Tekrardan Kullanılması
Nesne Tabanlı Programlama
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
NESNEYE YÖNELİK PROGRAMLAMA
NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ
Erişim Denetimi, Fonksiyon
NESNE TABANLI PROGRAMLAMA -METOTLAR-
Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL KONU : KAPSÜLLEME.
METODLAR.
İSİM UZAYLARI (NAMESPACE)
Chapter 7: Using Methods. Metotları ve Kodlamayı Gizlemeyi Anlama Metot – Kapsüllenmiş ifadeler serisini gerçekleştiren bir görev – Kullanılan metodun.
Nesneye Dayalı Programlama
Sınıflar ve Fonksiyonlar
NESNE YÖNELİMLİ PROGRAMLAMA
Metotlar.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
METOTLAR.
Akış Kontrol Mekanizmaları
ÇOK BİÇİMLİLİK POLYMORPHISM
Önceki Dersi Hatırlama !!
Kalıtım.
Nesneye Yönelik Programlama (12. Sunu). İsim Uzayları (Namespaces) Sınıfınızda Deniz adında iki öğrenci olduğunu kabul ediniz. Böyle bir durumda bu öğrencileri.
NESNEYE-YÖNELİK PROGRAMLAMA
JAVA’DA DÖNGÜLER.
Kalıtım , Sınıf Asli Ergün.
Demet AYDIN METODLAR Demet AYDIN
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Nesneye Dayalı Programlama
KALITIM Yılmaz Kılıçaslan.
Ders İçerik Sunusu Maltepe Üniversitesi
Görsel C# ile Windows Programlama
ODTU-SEM Copyright (c) 2011 Kalıtım(Inheritance) Subclass lar tüm method ve attributes larının superclass ından alırlar. Bu işlem için extends keyword.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR programlama II
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
KALITIM(INHERITANCE) Öğr.Gör. Murat ASLANYÜREK. KALITIM KAVRAMINA GİRİŞ  Kalıtım, sınıflardan yeni sınıflar türetmeyi sağlar.  Türetilen yeni sınıflar,
10. NESNEYE YÖNELİK PROGRAMLAMA Öğr.Gör. Murat ASLANYÜREK.
Sakarya Üniversitesi Bilgisayar ve Bilişim Bilimleri Fakültesi Bilgisayar Mühendisliği Prof. Dr. Ümit Kocabıçak Prof. Dr. Cemil Öz Doç. Dr. Ahmet Turan.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Fonksiyonlar ve Diziler
SOYUT(ABSTRACT) SINIFLAR METODLAR
C Programlama Dili Bilgisayar Mühendisliği.
5- class & object Nesne Yönelimli Programlama - i
Nesne Yönelimli Yaklaşım
Nesneye Dayalı Kavramlar Uygulama 2
Nesneye Dayalı Programlama Temel Kavramlar Hüseyin ESKİ.
Bütün dünyayı nesneler (object) ve nesneler arası ilişki olarak gören model kullanılarak yapılan programlama. Bu programlama tekniğine göre her nesne.
Bilgisayar Bilimi Problem Çözme Süreci-2.
Nesneye Dayalı Programlama 1
NİŞANTAŞI ÜNİVERSİTESİ
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Sunum transkripti:

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

Icerik Sarma (Encapsulation) Erişim Düzeyleri Sıralaması “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? Bilgi saklama Kullanıcıyı gereksiz detaylardan uzak tutma Oluşabilecek hataları önleme “Kendimizi kendimizden korur!"

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.

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.

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.

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.

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.

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.

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.

Kalıtım

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.

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.

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.

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.

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

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

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

Ü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.

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.

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

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”).

Kalıtım Örnek Yapılandırıcılar EKRAN ÇIKTISI Hayvan SINIFI YAPICISI DortAyakli SINIFI YAPICISI Otcul SINIFI YAPICISI

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.

FINAL DEYIMI

Final Deyimi Nesne yönelimli programlamanın getirdiği yeni kavramlarla birlikte metodlar ve sınıflar içinde değişmeyen yapılar tanımlama ihtiyacı doğmuştur. Java’da değişkenlerin, metodların ve sınıfların özelliklerinin değişikliğe uğramasını engellemek için bu yapılara final niteliği atanır. Final değişkenler Final sınıflar Final metodlar

Final değişkenler Bir değişken final niteliği ile tanımlanırsa, ilk değeri atandıktan sonra bir daha değeri değiştirilemez. Final değişkenlere ilk tanımlandığı anda değerinin atanması gerekmektedir. Örn. final float pi=3.14; final static tbmm = “Turkiye Buyuk Millet Meclisi”;

Final sınıflar Nesneye yönelimli programlamanın en önemli özelliklerinden birisi bir sınıfın niteliklerini yeni bir sınıfa aktarabilmektir. Bu yönteme kalıtım denilmektedir. Ancak, bir sınıf final deyimiyle oluşturulduğunda bu sınıftan yeni sınıflar türetilmesi engellenmiş olur.

Final metodlar Kalıtım yöntemiyle bir sınıfın özellikleri ve işlevleri yeni sınıflara aktarılabildiği gibi yeni sınıfta metodların üzerinde değişiklik yapabilektedir. Eğer bir metodun, türeyen sınıflarda değiştirilmesi istenmiyorsa final deyimi kullanılarak bu engellenebilir.

Bellek temizleme Java’da bellek yönetimi otomatiktir. Eğer bir nesne hiçbir nesne değişkeni tarafından gösterilmiyorsa bu nesneye erişim mümkün değildir. Erişilemiyor olması, nesnenin bellekte yer kaplamasını engellemez. Çöp toplayıcısı bu şekilde erişilemeyen/sahipsiz nesneleri tespit ederek bellekten siler. Programcı çöp toplayıcısının çalışmasına müdahale edemez. Ancak çağırabilir. Bunun için; System.gc(); komutu kullanılır.

finalize() metodu Bazı programlama dillerinde nesneyi sonlandırmak için imha düzenekleri (destructor) mevcuttur. Bu yapılar genellikle belleğin temizlenmesi, diğer nesnelerle ilişkilerin sonlandırılması, açık dosyaların kapatılması gibi işlemleri içermektedir. Java nesneyi yoketmek için çöp toplayıcı mekanizması kullandığı için ayrıca bir imha düzeneğine ihtiyaç yoktur. Ancak, yine de programcının nesne sistemden silinirken yapılmasını istediği işlemler olursa bunları yazabilmesi için finalize() metodu kullanılmaktadır.