ÇOK BİÇİMLİLİK POLYMORPHISM

Slides:



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

Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç
Saatte V km hız ile giden bir aracın t zamanda aldığı yolu bulan metodu yazınız. Metodu kullanacak bir program yazınız. ( yol=hız*zaman, x=V*t) — Metot.
C# - Metotlar.
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Değişkenler ve bellek Değişkenler
Programlama-II (Java ile Bilgisayar Programlama)
Miras Alma EM-406 Java.
CHAIN OF RESPONSIBILITY
OOP UYGULAMA 5.
EDUTIME Java Day 4 Serdar TÜRKEL.
Sarma (Encapsulation) / Kalitim (Inheritance) /Final Terimleri
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Karar ifadeleri ve Döngüler
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
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Sınıfların Tekrardan Kullanılması
Java Programlama Koleksiyon(Collection) Sınıfları
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
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ı.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
METODLAR.
C# Metot Overloading (Aşırı yükleme)
Altuğ Altıntaş kitabından Dr. Mustafa Cem Kasapbaşı
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
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.
Metotlar.
JAVA İLE PROGRAMLAMAYA GİRİŞ
METOTLAR.
© Haluk Bingöl v2.23 Java Programlama Dili - 01 Tek Class ile Programlama Dr. Haluk Bingöl BÜ - CmpE BU-SWE.
Önceki Dersi Hatırlama !!
Kalıtım.
JAVA’DA DÖNGÜLER.
EDUTIME Java Day 8 Serdar TÜRKEL.
Numaralandırmalar(Enumaration)
Kalıtım , Sınıf Asli Ergün.
Polimorfizm.
Demet AYDIN METODLAR Demet AYDIN
Nesneye Dayalı Programlama
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)
KALITIM Yılmaz Kılıçaslan.
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.
Bilgisayar programlarının en büyük avantajı, kullanıcının işini kolaylaştırmalarıdır. Her bilgisayar programı bunu değişik metotlar kullanarak sağlar.
Ders 2- Veri türleri, Karar ve Döngü Yapıları, Görsel Kontröller
JAVA PROGRAMLAMA ORNEKLER
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; }
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,
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#
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
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Sunum transkripti:

ÇOK BİÇİMLİLİK POLYMORPHISM Computer Engineering Department Java Course Asst. Prof. Dr. Ahmet Sayar Kocaeli University - Fall 2014

Çok-Biçimlilik (Polymorphism) Dinamik baglama refer eder. Kalitimda ezilen method mu, yoksa ana sinifdaki metod mu cagirilicak calisma aninda belirlenir. Cok bicimlilik, kapsulleme ve kalitim nesneye yonelik programlamanin en temel ozellikleridir.

Çok-Biçimlilik (Polymorphism) Bir nesnenin davranış şekillerinin duruma göre değişebilmesidir. Eğer birdençok sınıfın ortak kullanacağı bir metod varsa, bu herbirinin temel alacağı bir anasınıf içerisinde tanımlanabilir. Davranış şekillerindeki farklılıklar her sınıfın kendi yapısı içinde ifade edilir. Örneğin bir selam() metodu ekrana, Turkler icin “selam” İngilizler için “hello” Almanlar için “hallo” yazdıracak biçimde çeşitlendirilebilir.

Çok-Biçimlilik (Polymorphism) Bir kalıtım ağacına ait sınıflarda aynı imza (dönüş tipi, ad, parametreler) ile tanımlanmış bir yöntem var ise; Java ortamı çalıştırma zamanında yöntemin hangi sınıfa ait tanımdan çalıştıracağını dinamik olarak belirleyebilir. Bu özelliğe çok-biçimlilik (“polymorphism”) denir. Bu özellik, “if” veya “switch” kullanımına gerek bırakmaz. Yeni bir işçi alt sınıfı eklendiğinde mevcut kodun değiştirilmesi gerekmez.

Örnek-1

Örnek-1

interface Konus { String getAd(); String merhaba(); } abstract class Insan implements Konus { private final String ad; protected Insan(String pAd) { this.ad = pAd; public String getAd() { return this.ad; class Turk extends Insan { public Turk(String pAd) { super(pAd); public String merhaba() { return "Merhaba!"; class Ingiliz extends Insan { public Ingiliz(String pAd) { super(pAd); } public String merhaba() { return "Hello!"; public class Main { public static void main(String[] args) { Insan[] insanlar = { new Turk("Ahmet"), new Ingiliz("Marry"), new Turk("Ayse")}; for (int i = 0; i < insanlar.length; i++) { System.out.println("***"+insanlar[i].getAd()+": " +insanlar[i].merhaba());

Örnek-2

Ornek Polymorphism Calismasi -3-

abstract public class Calisan { private String ad; public Calisan(String ad) { setAd(ad); } public String getAd() { return new String(ad); private void setAd(String ad) { this.ad = new String(ad); abstract public double ode(); public String yaz() { return "ad: " + ad; public class Maasli extends Calisan { double maas; public Maasli(String ad, double maas) { super(ad); setMaas(maas); } public void setMaas(double maas) { this.maas = maas; public double getMaas() { return maas; public double ode() { public String yaz() { return super.yaz() + " (maas: " + maas + ")";

public class Saatli extends Calisan { private double oran; private double saat; public Saatli(String ad, double oran, double saat) { super(ad); setOran(oran); setSaat(saat); } public void setOran(double oran) { this.oran = oran; public void setSaat(double saat) { this.saat = saat; public double getOran() { return oran; } public double getSaat() { return saat; } public double ode() { return oran * saat; } public String yaz() { return super.yaz() + " (oran: " + oran + ", saat: " + saat + ')';

public class Main { public static final int MAX_CALISAN = 10; public static void main(String[] args) { Calisan[] calisanlar = new Calisan[MAX_CALISAN]; int csayi = 0; calisanlar[csayi++] = new Saatli("Ayse Durmuş", 75.00, 2.5); calisanlar[csayi++] = new Maasli("Mehmet Yalçın", 125.00); calisanlar[csayi++] = new Saatli("Veysel Doğru", 85.00, 3.0); calisanlar[csayi++] = new Maasli("Zehra Sümer", 150.00); calisanlar[csayi++] = new Saatli("Ahmet Kara", 65.00, 2.0); for (int i = 0; i < csayi; ++i) { System.out.println("calisan: " + calisanlar[i].yaz()); System.out.println("ode: " + calisanlar[i].ode()); System.out.println(); }

Lab Calismasi

Örnek-4: Kalıtım ve Çok Biçimlilik Örnek kalıtım ağacı: Kişi Çalışan Yönetici. ve bu sınıfları kullanan bir Şirket sınıfı Prog.Dil.2-Ders1

Örnek-4: Kişi sınıfı: package cokbicim3; public class Kisi { private String isim; public Kisi( String name ) { this.isim = name; } public String getIsim( ) { return isim; Prog.Dil.2-Ders1

Örnek-4: Bir çalışan nesnesinin ismini nasıl belirleyeceğiz? Çalışan sınıfı: package cokbicim3; public class Calisan extends Kisi { private int maas; public Calisan( String name, int maas ) { super( name ); this.maas = maas; } public int getMaas( ) { return maas; public void setMaas( int salary ) { this.maas = salary; Bir çalışan nesnesinin ismini nasıl belirleyeceğiz? İsimsiz kişi olmaz. Kişinin isim üyesi private. setIsim metodu da yok. Çözüm: Üst sınıfın yapılandırıcısına erişmek. Bunun için super anahtar kelimesi kullanılır. Prog.Dil.2-Ders1

Örnek-4: Benzer şekilde, yöneticinin maaşının doğru hesaplanması için tekrar super kullanarak, bu kez üst sınıfın normal bir üye metodunu çağırdık. package cokbicim3; public class Yonetici extends Calisan { private int bonus; public Yonetici( String name, int maas ) { super( name, maas ); bonus = 0; } public void setBonus( int bonus ) { this.bonus = bonus; public int getBonus() { return bonus; public int getMaas( ) { return super.getMaas( ) + bonus; Prog.Dil.2-Ders1

Örnek-4: Şirket sınıfı: package cokbicim3; public class Sirket { private Calisan[] calisanlar; public Sirket() { calisanlar = new Calisan[3]; Yonetici mudur = new Yonetici( "Oktay Orcun", 8000 ); mudur.setBonus( 1500 ); calisanlar[0] = mudur; calisanlar[1] = new Calisan( “Ali Ucar", 7500 ); calisanlar[2] = new Calisan( “Veli Kacar", 6000 ); } public void calisanlariGoster( ) { for( Calisan calisan : calisanlar ) if( calisan != null ) System.out.println( calisan.getIsim() + " " + calisan.getMaas( ) ); public static void main(String[] args) { Sirket sirket = new Sirket( ); sirket.calisanlariGoster( ); Çokbiçimlilik örneği Yöneticilere de Çalışan gibi erişilebilmesi, çokbiçimlilik örneğidir. 18 Prog.Dil.2-Ders1 18

OBJECT SINIFI java.lang.Object sınıfı, tüm sınıfların üst sınıfıdır. Siz isteseniz de, istemeseniz de. Yazsanız da, yazmasanız da. toString( ) : String metodunu yeniden tanımlayarak, nesneleri komut satırına daha kolay yazdırabilirsiniz. Örnek: package cokbicim3; public class Calisan extends Kisi { //önceki koda ek olarak: public String toString( ) { return getIsim() + " " + getMaas( ) ; } public class Sirket { //önceki kodda değişen kısım: public void calisanlariGoster( ) { for( Calisan calisan : calisanlar ) if( calisan != null ) System.out.println( calisan );