Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )



Benzer belgeler
BİL-141 Bilgisayar Programlama I (Java)

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Kalıtım ( Inheritance ) BBS-515 Nesneye Yönelik Programlama

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Nesne Yönelimli Programlama

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Kalıtım (Inheritance)

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

HSancak Nesne Tabanlı Programlama I Ders Notları

Programlama Dillerinde Kullanılan Veri Tipleri

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Java da İstemci Tarafı Uygulamalar

Sunum İçeriği. Programlamaya Giriş

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Nesneye Dayalı Programlama

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Operatörlerin Aşırı Yüklenmesi

Decorator Tasarım Şablonu

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

C++ Dersi: Nesne Tabanlı Programlama

MOBIL UYGULAMA GELIŞTIRME

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

Dizi ( Array ) ve Dizgi ( String )

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

public static int Toplam int x, int y

Lambda İfadeleri (Lambda Expressions)

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

7. HAFTA. Erişim Belirleyiciler

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 4. UYGULAMA

BMH-303 Nesneye Yönelik Programlama

Nesne Yönelimli Programlama

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Java Programlama Güz Dönemi CLASS YAPISI

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Yazılım Kodlama ve İ simlendirme Standartları v1.0

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

NESNE TABANLI PROGRAMLAMA

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

YZM 2108 Yazılım Mimarisi ve Tasarımı

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

Erişim konusunda iki taraf vardır:

Java Class Yapısında Finalize Metotunun Kullanımı

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

Üst Düzey Programlama

Java String İşlemleri

MOBİL UYGULAMA GELİŞTİRME

BİL-141 Bilgisayar Programlama I (Java)

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

YZM 2105 Nesneye Yönelik Programlama

BİL132 Bilgisayar Programlama II

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

// hataları işaret eden referans

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Nesneye yönelik: Javada herşey bir nesnedir. Java nesne yönelimli olduğu için kolayca geliştirilebilir.

JavaFX Temelleri (1)

C# Metotlar ve Metot Tanımlama

Nesneye Dayalı Programlama

Java Dersi. Altuğ Bilgin Altıntaş

HSancak Nesne Tabanlı Programlama I Ders Notları

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

Ders 8 Konu Özeti ve Problemler

Nesne Yönelimli Programlama

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

NESNEYE YÖNELİK PROGRAMLAMA

YZM 2105 Nesneye Yönelik Programlama

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Lecture 11: Generics

BMM3101 PROGRAMLAMA DİLLERİ

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

11- FONKSİYONLAR (FUNCTIONS)

Ders 8: Metotlar. barisgokce.com

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

NESNEYE YÖNELİK PROGRAMLAMA

Nesne Yönelimli Programlamaya Giriş - 2. Cem Ahmet MERCAN 16/04/2009

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

C++ Dersi: Nesne Tabanlı Programlama

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Nesne Yönelimli Programlama ve Kalıtım

Transkript:

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009)

Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts ) Java da Awt ve Swing kütüphane bileşenleri Örnekler İçerikç Bu ders: Soyutlama ( abstraction ) Arayüz ( Interface ) tanımlama Çok-biçimlilik ( polymorphism ) Örnekler -2- BBS-515-DN09 / 2

Soyutlama ( Abstraction )

Soyut ( Abstract ) Sınıf Alt sınıfların ortak özelliklerini ve işlevlerini taşıyan bir üst sınıf oluşturmak istersek ve gerçek dünyada bu sınıftan bir nesne yoksa, üst sınıfı soyut sınıf olarak tanımlarız. Örnek: Memeli sınıfından direkt bir nesne oluşturulmaz; ancak alt sınıfları tanımlanarak onlardan nesneler oluşturulur. Soyut sınıfın yöntemlerini, alt-sınıfları tarafından üzerine yazılmak üzere, sadece şablon olarak tanımlayıp içlerini boş bırakabiliriz veya soyut yöntem ( abstract method ) olarak tanımlayabiliriz. Çağıran sınıflar için arayüz oluşturur. Alt sınıflar üzerine yazarak işlevlerini tanımlar. -4- BBS-515-DN09 / 4

UML de Soyut ( Abstract ) Sınıf Gerçekte nesnesi olmayan bir sınıf, kalıtım ağacında abstract (soyut) olarak tanımlanır. Sınıf ismi yatık ( italic ) yazılır Yeniden kullanma ( reuse ) amaçlı Üzerine yazma için şablon Şekil merkez Abstract (soyut) sınıf taşı() büyüt() göster() Dikdörtgen Çember köşe yarıçap Çokgen noktalar göster() -5- BBS-515-DN09 / 5

Soyutlama ( Abstraction): Örnek 1 public abstract class Sekil { Sekil Somut yöntemler ( concrete methods ) public int cevre() { // üzerine yazılacak return 0; public int alan() { // üzerine yazılacak return 0; cevre() alan() Dikdortgen boy : int Cember en : int yaricap : int public abstract class Sekil { EsUcgen kenar : int yukseklik : int VEYA ; Soyut yöntemler ( abstract methods ) public abstract int cevre(); public abstract int alan(); -6- BBS-515-DN09 / 6

Soyutlama ( Abstraction): Örnek 1 (devam) public class Dikdortgen extends Sekil { private int boy; private int en; public int cevre() { return (2 * (boy + en)); Sekil public int alan() { return (boy * en); cevre() alan() Dikdortgen boy : int en : int Cember yaricap : int EsUcgen kenar : int yukseklik : int -7- BBS-515-DN09 / 7

Soyutlama ( Abstraction): Örnek 1 (devam) public class Cember extends Sekil { private int yaricap; public int cevre() { return (2 * 3 * yaricap); public int alan() { return ( 3 * yaricap * yaricap); Sekil cevre() alan() Dikdortgen boy : int en : int Cember yaricap : int EsUcgen kenar : int yukseklik : int -8- BBS-515-DN09 / 8

Soyutlama ( Abstraction): Örnek 1 (devam) public class EsUcgen extends Sekil { private int kenar; private int yukseklik; public int cevre() { return (kenar * 3); public int alan() { return ((kenar * yukseklik) / 2); Dikdortgen boy : int en : int Sekil cevre() alan() Cember yaricap : int EsUcgen kenar : int yukseklik : int -9- BBS-515-DN09 / 9

Soyut Sınıf ve Yöntemlerin Kullanımı Soyut sınıflardan nesne oluşturulamaz. Soyut yönteme sahip bir sınıfın kendisi de otomatik olarak soyuttur ve öyle tanımlanmak zorundadır. Bir soyut sınıfın alt sınıfları, ancak üst sınıfın tanımladığı soyut sınıfların üzerine yazdığı ve onlara birer işlev tanımladığı zaman örneklenebilir ( instantiation ). Bu durumda alt sınıflar somut sınıf ( concrete class ) olarak adlandırılır. Bir soyu sınıf, soyut yöntemlere ek olarak, somut yöntemler de tanımlayabilir. Bir soyut sınıf sadece somut yöntemleri de içerebilir. Eğer bir soyut sınıfın alt sınıfı, o sınıfa ait tüm soyut yöntemleri gerçekleştirmezse; alt sınıf da soyut tanımlanmak zorundadır. static, final ve private olarak tanımlı yöntemler, üzerine yazılamadıklarından, soyut olarak a tanımlanamazlar. a a a a -10- BBS-515-DN09 / 10

Soyutlama ( Abstraction): Örnek - 2 abstract class A { abstract void benicagir (); void benidecagir () { System.out.println ( A nın somut metodu. ); class B extends A { void benicagir() { System.out.println ( B nin benicagir metodu. ); class SoyutDemo { public static void main (String args [] ) { Bb= new B (); b.benicagir (); b.benidecagir (); Çıktı: B nin benicagir metodu. A nın benidecagir somut metodu. // Somut ( concrete ) yöntemler de miras alınarak kullanılabilir. -11- BBS-515-DN09 / 11

Arayüz ( Interface )

Arayüz ( Interface ) Java da çoklu kalıtıma ( multiple inheritance ) izin verilmez. Bunu telafi etmek için arayüz ( interface ) kavramı tanımlanmıştır. Bir sınıfın bir üst-sınıfı olabilir ve birden çok arayüzü gerçekleştirebilir. Arayüzler soyuttur ve doğrudan örneklenemez. Arayüz tanımı sınıfa benzer; ancak sadece yöntem imzalarını ( method signatures ) ve sabit değişkenler ( constant variables ) içerebilir. Bir arayüzü gerçekleştiren her sınıf, arayüz içinde imzası tanımlanmış yöntemlerin kodlarını yazmak zorundadır (yöntem imzaları aynı olmalıdır.) Tüm yöntemlerin kodunu yazmıyorsa sınıf, soyut tanımlanmış olmalıdır. Tüm yöntemleri yazmıyor ve soyut tanımlanmadı ise derleyici hata verir. -13- BBS-515-DN09 / 13

Arayüz ( Interface ): Örnek - 1 public class Bisiklet { int vitessayisi; public Bisiklet (int v) { vitessayisi = v; public void print () { System.out.println ( Bu bisikletin +vitessayisi + vitesi var. ); Ekrana bisiklet çizdirmek istediğimizi varsayalım. (Bunun için java.awt.canvas sınıfını kullanmalıyız; l ancak çoklu kalıtım yapamayız.) public interface Arac { public class Bisiklet extends Canvas implements Arac { public void print (); int vitessayisi; public Bisiklet (int v) { vitessayisi = v; public void print () { System.out.println ( Bu bisikletin + vitessayisi + vitesi var. ); public void paint () { // bisikleti çizecek kod -14- BBS-515-DN09 / 14

Arayüz ( Interface ): Örnek 2 Aşağıdaki EsUcgen sınıfından oluşturulan nesnelerin şekil değiştirebileceğini varsayalım. Ancak bu yetenek tüm şekillere değil, sadece EsUcgen sınıfına özgü olsun. Sekil cevre() alan() Dikdortgen boy : int en : int Cevre yaricap : int EsUcgen kenar : int yukseklik : int pozx : int pozy : int <<Interface>> FizikselDegisim hareket() hareket() -15- BBS-515-DN09 / 15

Arayüz ( Interface ): Örnek 2 (devam) public interface FizikselDegisim { public void hareket(); public class EsUcgen extends Sekil implements FizikselDegisim { private int kenar; private int yukseklik; private int pozx; private int pozy; public void hareket() { Sekil int x,y; cevre() System.in.read(x); alan() System.in.read(y); pozx = x; EsUcgen pozy = y; Dikdortgen boy : int en : int Cevre yaricap : int kenar : int yukseklik : int pozx : int pozy : int <<Interface>> FizikselDegisim hareket() hareket() -16- BBS-515-DN09 / 16

Arayüz ( Interface ): Örnek - 3 java.awt.event. ActionListener.java -17- BBS-515-DN09 / 17

Çok Biçimlilik ( Polymorphism )

Çok-Biçimlilik 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. Calisan maashesapla() Bu özellik, if veya switch kullanımına gerek bırakmaz. Sekreter maashesapla() Yonetici maashesapla() Yeni bir işçi alt sınıfı eklendiğinde mevcut kodun değiştirilmesi gerekmez. -19- BBS-515-DN09 / 19

Çok-Biçimlilik ( Polymorphism ): Ö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; -20- BBS-515-DN09 / 20

Çok-Biçimlilik ( Polymorphism ): Örnek 1 (devam) 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!"; -21- BBS-515-DN09 / 21

public class Test { public static void main(string[] args) { Insan[] insanlar = { new Turk( Ahmet"), for (Insan n : insanlar) { Çok-Biçimlilik ( Polymorphism ): Örnek 1 (devam) new Ingiliz ( Marry"), new Turk ( Ayşe") ; System.out.println(n.getAd() + ": " + n.merhaba()); -22- BBS-515-DN09 / 22

Çalışan.java Maasli.java Saatli.java PolyDemo.java Çok-Biçimlilik ( Polymorphism ): Örnek - 2-23- BBS-515-DN09 / 23