Kalıtım.

Slides:



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

C# - Metotlar.
JAVA TEMELLERİ GİRİŞ JAVA TEMELLERİ GİRİŞ signalsec.com & mialkan.com.
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.
Değişkenler ve bellek Değişkenler
Zeynep Çelik Sunar….
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
Miras Alma EM-406 Java.
EDUTIME Java Day 4 Serdar TÜRKEL.
Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
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.
Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi Hazırlayan : Nuri AVCI
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Sınıfların Tekrardan Kullanılması
Java Programlama Koleksiyon(Collection) Sınıfları
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
NESNEYE YÖNELİK PROGRAMLAMA
DİZİLER.
P 2. Ünitede Nesneye Dayalı Programlama anlatılıyor. p Nesneye dayalı programlama yeni veri tiplerinin ve bu tipleri işletmek için gereken işlemleri oluşturmayı.
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
NESNE TABANLI PROGRAMLAMA -METOTLAR-
METODLAR.
C# Metot Overloading (Aşırı yükleme)
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
JAVADA PROGRAM DENET İ M İ VE OPERATÖRLER. int a ; a=4 ; // do ğ ru bir atama 4=a ; // yanlış bir atama!
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Java Sınıf ve Nesne Kavramı UML Gösterimi
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
FONKSİYONLAR.
JAVA İLE PROGRAMLAMAYA GİRİŞ
METOTLAR.
ÇOK BİÇİMLİLİK POLYMORPHISM
Önceki Dersi Hatırlama !!
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
JAVA’DA DÖNGÜLER.
EDUTIME Java Day 8 Serdar TÜRKEL.
Kalıtım , Sınıf Asli Ergün.
Polimorfizm.
Demet AYDIN METODLAR Demet AYDIN
Class KahveFincani { public KahveFincani() { System.out.println("KahveFincani..."); } } public class YapilandirciBasitOrnek { public static void main(String[]
JAVA’DA DİZİLER Dr.Galip AYDIN.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
Hata Ayıklama (Debugging), Arayüzler (Interfaces), Polimorfizm.
JAVA PROGRAMLAMA ORNEKLER
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.
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
Kompozisyon Bir Sınıf diğer sınıf nesne referanslarını içinde barındırabilir. Bu referanslar sınıfın üyeleridir.
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,
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#
C Programlama Dili Bilgisayar Mühendisliği.
Veri Tipleri 12/4/2018.
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
Sunum transkripti:

Kalıtım

Kalıtım Önceleri programcılar, var olan program kodlarına benzer kodlar yazarlardı. Örneğin: Bir insan kaynakları sistemi değişik çeşitlerde personelin bilgisini tutabilir. Ancak, bu değişik çeşitlerdeki personel aslında ortak birçok özelliğe de sahiptir. Bu, daha önceleri aynı program kodunu değişik yerlere kopyalama, yapıştırma ve üzerinde değişiklik yapma şeklinde yapılıyordu.

Kalıtım Doğal olarak , herhangi birşeyi organize etmede kullanılan hiyerarşi şu şekildedir: süper sınıf (superclass) Eleman Çalışan Gönüllü SaatÜcretli AylıkMaaşlı Danışman Eleman sınıfının alt sınıfı Çalışan sınıfının alt sınıfı SaatÜcretli sınıfının alt sınıfı İlişkileri “olmak” (is a) şeklinde düşünebilirsiniz. Bir çalışan aynı zamanda elemandır. Bir gönüllü de elamandır. Saat ücretli bir kişi aynı zamanda çalışandır. Bir danışman saat ücretli çalışan birisidir.

Sınıflar ve Alt Sınıflar “private” ve “public” konularına daha sonra geleceğiz class Hayvan { public String ad = ""; public String ses = ""; public int numTimesPerformed = 0; // constructors, accessors & modifiers go here public void identifySelf( ) { System.out.println(“Bemim adım “ + ad); } // of identifySelf public void perform( ) { doYourThing( ); numTimesPerformed++; } // of perform public void doYourThing( ) { ; // ‘no-op’ method } // of doYourThing } // of Animal Öyleyse hayvanlar, bir isme, sese sahiplerdir ve kendilerini tanımlayabilirler ve bunun yanında herhangi birşeyi yapabilirler. Hayvan harpo = new Hayvan(); harpo.setName(“Harpo”); harpo.doYourThing(); // hiçbir şey söylemez

Alt Sınıflar Hayvan (Köpek, Hayvandan türer Köpek Kedi İnek Örneğin: “Köpek bir hayvandır” ya da “Bütün köpekler hayvandır”) class Kopek extends Hayvan { public Kopek() { ses = “Hav”; } // yapılandırıcı sonu public void doYourThing ( ) { identifySelf(); System.out.println(“Ben bir köpeğim”); System.out.println(ses); } // of doYourThing } // Kopek sınıfının sonu Hayvan sınıfı hiç bir şey yapmayan doYourThing() metoduna sahiptir. Kopek pickles = new Kopek(); pickles.setName(“Pickles”); pickles.doYourThing(); // çıktı: // “Benim adım Pickles” // “Ben bir köpeğim” // “Hav”

Örneğin: “Kedi bir hayvandır” ya da “Bütün kediler hayvandır”) Köpek Kedi İnek Alt Sınıflar (Kedi, Hayvandan türer. Örneğin: “Kedi bir hayvandır” ya da “Bütün kediler hayvandır”) class Kedi extends Hayvan { public Kedi() { ses = “miyav”; } // yapılandırıcı sonu public void doYourThing ( ) { identifySelf(); System.out.println(“Ben bir kediyim”); System.out.println(ses); } // of doYourThing } // Kedi sınıfının sonu Kedi abby = Kedi Cat(); abby.setName(“Abby”); abby.doYourThing(); // çıktı: // “Benim adım Abby” // “Ben bir kediyim” // “miyav”

Örneğin: “İnek bir hayvandır” ya da “Bütün inekler hayvandır”) Köpek Kedi İnek Alt Sınıflar (İnek, Hayvandan türer. Örneğin: “İnek bir hayvandır” ya da “Bütün inekler hayvandır”) class Inek extends Hayvan { public Inek() { ses = “mö”; } // yapılandırıcı sonu public void doYourThing ( ) { identifySelf(); System.out.println(“Ben bir ineğim”); System.out.println(ses); } // of doYourThing } // Inek sınıfının sonu Inek descartes = new Inek(); descartes.setName(“Sarıkız”); descartes.doYourThing(); // çıktı: // “Benim adım Sarıkız” // “Ben bir ineğim” // “mö”

Sorular?

Kalıtım ve Görünürlük Alanı (scope) Super ve this kullanımı

Kalıtım ve Görünürlük alanı (Scope) Değişkenler (örneğin: ses): Java ilk önce, o anki metodu inceler, yerel değişkenleri ve parametreleri kontrol eder; Java daha sonra, o anki sınıfı inceler (örneğin: Kopek); Java daha sonra, süper sınıfı inceler (örneğin: Hayvan); Java hiyerarşi boyunca ilerleyerek hiç bir süper sınıf kalmayıncaya kadar incelemeye devam eder. Metodlar (örneğin: doYourThing() ya da identifySelf()): Java ilk önce o anki sınıfı inceler; Java daha sonra, süper sınıfı inceler;

Görünürlük alanının belirlenmesi Java size, görünürlük alanıyla ilgili kuralları yeniden belirlemenize izin verir. Hangi değişkene ya da metoda hitap ettiğinizi söyleyebilirsiniz: super deyimi: Süper sınıftan bir metoda ya da değişkene erişirken kullanılır. Örneğin, super.doYourThing( ) this deyimi: O anki aktif nesneye ait bir değişkene ya da metoda ulaşmak için kullanılır. Örneğin, this.doYourThing( )

Super ve this kullanımı Hayvan Köpek Kedi İnek Super ve this kullanımı (ama neden??) Buradaki durumda aşağıdaki ifadeler ile aynı anlamdadır: ses = “hav”; ve this.ses = “hav”; class Kopek extends Hayvan { public Kopek() { super.ses= “hav”; } // yapılandırıcı sonu public void doYourThing ( ) { super.identifySelf(); System.out.println(“Ben bir köpeğim”); System.out.println(ses); } // of doYourThing } // Kopek sınıfının sonu Buradaki durumda aşağıdaki ifadeler ile aynı anlamdadır: identifySelf(); or this.identifySelf();

Super ve this kullanımı class Hayvan { String ad; } class Kopek extends Hayvan { String ad; /* Just so I don't forget! */ void ikiAd() { System.out.println (“Benim köpek adım " + ad); (“Benim hayvan adım " + super.ad); Güzel bir fikir mi?

Super kullanımı Hayvan Köpek Kedi İnek Burada şu anlama geliyor: class Kopek extends Hayvan { // burada yapılandırıcı olduğunu // farzedin public void doYourThing() { identifySelf(); System.out.println(ses); } // of doYourThing public void identifySelf() { super.identifySelf(); System.out.println(“Ben bir köpeğim”); } // of identifySelf } // Kopek sınıfının sonu Burada şu anlama geliyor: this.identifySelf() (aşağıda tanımlanan şekilde) Burada şu anlama geliyor: identifySelf() (Hayvan sınıfında tanımlanan şekilde) Eğer kullanılmasaydı???

Geometri örneği Şekil Daire Dikdörtgen class Sekil { public String ad; public String adAl () { return (this.ad); } // adAl public int alan () { return (0); } // alan } // Sekil Şekil Daire Dikdörtgen Her yeni türeyen sınıf alan() metodunu yeniden tanımlaması gerekir.

Daire sınıfının tanımlanması alıştırma olsun diye size bırakıldı. Yapılandırıcı zinciri class Dikdortgen extends Sekil { private int uzunluk, genislik; Dikdortgen () { this(0, 0); } // yapılandırıcı sonu Dikdortgen (int l, int w) { this( l, w, “dikdörtgen”); } // yapılandrıcı sonu Dikdortgen (int l, int w, String n) { uzunluk = l; genislik = l; ad = n; public int alan () { return (uzunluk * genislik); } // alan public String adAl () { if (uzunluk == genislik) return “kare"; else return super.adAl()); } // adAl public String toString () { String s; s = new String (“Bir " + adAl() + " uzunluğu: " + uzunluk + " ve genişliği " + genislik); return (s); } } // toString } // Dikdortgen sınıfının sonu Daire sınıfının tanımlanması alıştırma olsun diye size bırakıldı.

Yapılandırıcılar ve Kalıtım Java kuralı: Eğer yapılandırıcının ilk satırında açıkça bir üst sınıfın yapılandırıcısı çağrılmamışsa Java, üstü kapalı olarak alt tarafta super() metodunu işletir ve süper sınıfın yapılandırıcısını çağırır. public Kopek() { strSes = “hav”; } // yapılandırıcı sonu Bunun bir istisnası: zincirleme yapıcı çağırma: this(parametreler) super( ) çağırımını erteler Süper sınıf yapılandırıcısını parametreleriyle birlikte çağırmak için açık olarak çağırma işlemini yapmalısınız: super(strAd) Üstü kapalı olarak Animal() yapılandırıcısı çağırılır.

Burada bir Sekil yapıcısı çağırmak istersem ne olur? Yakın bakış... class Dikdortgen extends Sekil { private int uzunluk, genislik; Dikdortgen () { this(0, 0); } // yapılandırıcı Dikdortgen (int l, int w) { this( l, w, “Dikdörtgen”); Dikdortgen (int l, int w, String n) { uzunluk = l; genislik = l; ad = n; public int alan () { return (uzunluk * genislik); } // alan Burada bir Sekil yapıcısı çağırmak istersem ne olur? Sekil(); Eğer Sekil() yoksa??? Hata

Kalıtım ve Faaliyet Alanları Örnekler super(xxx) // süper sınıfın yapılandırıcısını çağırır super.xxx // süper sınıfın değişkenine erişir super.xxx( ) // süper sınıfın metodu çağırılır this(xxx) // aktif haldeki sınıfın yapılandırıcısı // çağırılır this.xxx // aktif haldeki sınıfın değişkenine // erişilir this.xxx( ) // aktif haldeki sınıfın metodu çağırılır Not: Bunu yapamazsınız: super.super <herhangi birşey> (bunu aslında casting dediğimiz yöntemle yapabilirsniz ancak bu da çok nadir olur, zorunlu olmadıkça yapmamalısınız.)

Zincirleme (Chaining), süper sınıf örneği

class Parent { String name; public Parent() { setName("NONE"); cp(1); } public Parent(String name) { setName(name); cp(2); } public void setName(String name) { this.name = name; cp(3); } public void cp(int n) { System.out.println("At checkpoint "+n+" "+name); } public static void main(String args[]) { Child c = new Child(); } } // Parent class Child extends Parent { public Child() { this("NONAME"); cp(4); } public Child(String name) { cp(5); } } // Child Çıktı: At checkpoint 3 NONE At checkpoint 1 NONE At checkpoint 5 NONAME At checkpoint 4 NONAME

class Parent { String name; public Parent() { setName("NONE"); cp(1); } public Parent(String name) { setName(name); cp(2); } public void setName(String name) { this.name = name; cp(3); } public void cp(int n) { System.out.println("At checkpoint "+n+" "+name); } public static void main(String args[]) { Child c = new Child("Bob"); } } // Parent class Child extends Parent { public Child() { this("NONAME"); cp(4); } public Child(String name) { cp(5); } } // Child Çıktı: At checkpoint 3 NONE At checkpoint 1 NONE At checkpoint 5 Bob

Object Sınıfına geri dönüş Java Object adında temel bir tür sunar extends ifadesine sahip olamayan bütün sınıflar üstü kapalı olarak java.lang.Object sınıfından türerler. Bu gerçeğe ilişkin örnekler: public boolean equals (Object o); public boolean String toString (); Her ne zaman bir sınıfa ait kendi toString() metodunuzu yazsanız aslında Object sınıfı tarafından sağlanan toString( ) metodunu yeniden tanımlamış oluyorsunuz.

Nesne Hiyerarşisi Ya da buna ne dersiniz... Object Hayvan Köpek Kedi İnek Object Çalışan AylıkMaaşlı SaatlikÜcretli Object sınfının metodları: String toString() boolean equals(Object obj) ve diğerleri... Hayvan Köpek Kedi İnek Object Melez Ağır Hafif Ya da buna ne dersiniz...

Sorular?

Sarmalayıcı(Wrapper) Sınıflar Temel türler sınıf değildir (örneğin., int) Ancak bazen temel türleri nesne olarak kullanmamız gereken durumlar olabilir Örnek Toplama sınıfların (collection classes) çoğu Nesnelerden oluşur ve Object sınıfın alt sınıflarıdır Java, temel türlere nesne gibi davranmak için bir takım wrapper sınıfları sağlar (alternatif isimler: a.k.a.(also known as) type wrappers, a.k.a. envelope classes). Bu şöyle sağlanmaktadır: her temel türe ait, özel bir sınıf Bunlar java.lang paketinin içerisindedir, böylece isimler evrenseldir. İsimleri temel türlerin aynısıdır ancak tek farkı ilk harflerinin büyük olmasıdır.

Wrapper Sınıfları Boolean boolean sınıf ait olduğu temel tür Character char Byte byte Short short Integer int Long long Float float Double double Her biri: temel türlere nesne gibi davranmamızı sağlar yararlı çevirici (conversion) metodları içermektedir. Örneğin: Integer sınıfının içerdikleri arasında static Integer valueOf(String s) Integer.valueOf("27") tamsayı 27 ‘ye ait nesne yararlı utility metodlara sahiptir (örneğin, hashing amaçlı)

Wrapper Sınıfları Wrapper ‘ların nesneler ve temel türler arasında bağlantı oluştururken kullanımı // int oluşturma ve ilk değer atama int i = 7; // Bir Integer nesnesi oluşturma ve bir int temel türünü bu nesneye dönüştürme Integer intObject = new Integer( i ); // int temel türünü bu nesneden unwrapping yoluyla çıkarma System.out.println( intObject.intValue() ); // bir string ‘i Integer nesnesine dönüştürmek String strS = "27"; Integer intObject intObject = new Integer (strS); // sonra int temel türüne int a = intObject.intValue(); // birinci yol int b = Integer.parseInt(strS); // ikinci yol

Sorular?