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

Benzer belgeler
2. Bölüm Çok Şekillilik (Polymorphism) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

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

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

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

Sunum İçeriği. Programlamaya Giriş

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

BİL-141 Bilgisayar Programlama I (Java)

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

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

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

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.

YZM 2105 Nesneye Yönelik 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

HSancak Nesne Tabanlı Programlama I Ders Notları

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

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

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

Java ile Nesne Merkezli ve Fonksiyonel 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önelimli Programlama

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Java Dersi. Altuğ Bilgin Altıntaş

YZM 2105 Nesneye Yönelik Programlama

4. Bölüm Arayüzler (Interfaces) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

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

NESNEYE YÖNELİK PROGRAMLAMA

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

Kalıtım (Inheritance)

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

YZM 2105 Nesneye Yönelik Programlama

MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

19 Şubat 2016 Cuma

Nesne Yönelimli Programlama

YZM 2105 Nesneye Yönelik Programlama

Kapsülleme ( Encapsulation ) 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.

Java Programlama Interface ( Arayüzler )

Ders 8 Konu Özeti ve Problemler

MOBIL UYGULAMA GELIŞTIRME

Java Programlamada Paket Yapısı Ve Import

7. HAFTA. Erişim Belirleyiciler

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

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

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

NESNE TABANLI PROGRAMLAMA Temel Kavramlar

Nesneye Dayalı Programlama

Erişim konusunda iki taraf vardır:

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

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

public static int Toplam int x, int y

JAVA DA GİRİŞ/ÇIKIŞ İŞLEMLERİ. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 9 1

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

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

Ders 8: Metotlar. barisgokce.com

BMH-303 Nesneye Yönelik Programlama

Java Nitelemleri. Bölüm 1

Üst Düzey Programlama

Nesneye Dayalı Programlama

BİL-142 Bilgisayar Programlama II

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

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

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

Nesneye Yönelik Programlama (OOP) 7.Hafta

Decorator Tasarım Şablonu

TASARIM KALIPLARI-DEVAM. Singleton Adapter

Klavyeden Basit Giriş/Çıkış İşlemleri

// hataları işaret eden referans

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

YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

CBÜ Teknoloji Fakültesi, Yazılım Mühendisliği. Nesneye Yönelik Programlama

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

1. SINIFLAR Sınıf (Class) Mantığı

Akın Kaldıroğlu Java ile Nesne Merkezli Programlama

Lecture 11: Generics

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

Çizgilerin kalınlığını Dolguları Temel dönüşüm işlemlerini Bileşik nesne oluşturma işlemlerini kontrol etmemizi sağlar.

İÇİNDEKİLER VII İÇİNDEKİLER

7. Bölüm Sıra Dışı Durum Yönetimi (Exception Handling) Java ile Nesne Merkezli ve Fonksiyonel Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

Programlama Dillerinde Kullanılan Veri Tipleri

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

Nesne Yönelimli Programlama ve Kalıtım

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

C++ Dersi: Nesne Tabanlı Programlama

Üst Düzey Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

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

BTEP243 Ders 3. class Yazım Kuralı:

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

MOBİL UYGULAMA GELİŞTİRME

4. Bölüm Programlamaya Giriş

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

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

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

Spring Framework Eğitimi

BMH-303 Nesneye Yönelik Programlama

Transkript:

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

Küçük Ama Önemli Bir Konu Ø Bu dosya ve beraberindeki tüm, dosya, kod, vb. eğitim malzemelerinin tüm hakları Akın Kaldıroğlu na aittir. Ø Bu eğitim malzemelerini kişisel bilgilenme ve gelişiminiz amacıyla kullanabilirsiniz ve isteyenleri http://adresine yönlendirip, bu malzemelerin en güncel hallerini almalarını sağlayabilirsiniz. Ø Yukarıda bahsedilen amaç dışında, bu eğitim malzemelerinin, ticari olsun/olmasın herhangi bir şekilde, toplu bir eğitim faaliyetinde kullanılması, bu amaca yönelik olsun/olmasın basılması, dağıtılması, gerçek ya da sanal/internet ortamlarında yayınlanması yasaktır. Böyle bir ihtiyaç halinde lütfen benimle, akin@javaturk.orgadresinden iletişime geçin. Ø Bu ve benzeri eğitim malzemelerine katkıda bulunmak ya da düzeltme ve eleştirilerinizi bana iletmek isterseniz çok sevinirim. Ø Bol Java lı günler dilerim. 2

İçerik ØBu bölüme soyut sınıflar (abstract classes) ele alacaktır. ØJava nın tipleri arasındaki mümkün dönüşümler incelenecektir. 3

Soyut Sınıf (Abstract Class) 4

Soyut Sınıf (Abstract Class) ØSoyut sınıflara (abstract classes) iki türlü yaklaşılabilir: Ø İlki nesneler üzerindendir, Ø İkincisi ise soyut metotlar üzerindendir. ØBu bölümde her iki yönden ele alacağız. 5

Soyut Sınıf Nesne Yaklaşımı - I ØYandaki nesne hiyerarşisini düşünün. ØBu hiyerarşideki Employee sınıfının hiç nesnesi olmayabilir. Ø Çünkü fabrikada çalışan herkes özel bir tip Employee dir. Ø Kimse sadece Employee değildir. 6

Soyut Sınıf Nesne Yaklaşımı - II ØBu durumda neden Employee sınıfına ihtiyaç vardır? ØÇünkü Employee sınıfı, alt sınıfları için bir kalıptır, şablondur. Ø Alt sınıfların ortak özelliklerini ve davranışlarını toplar, Ø Polymorphism için gerekli olan üst tipi temsil eder. ØBu gibi durumlarda sınıflar, nesnesinin yaratılması önlenecek şekilde kurgulanır. ØNesnesi oluşturulmayan sınıflara soyut sınıf (abstract class) denir. 7

Soyut Sınıf Nesne Yaklaşımı - III ØBu sınıflar soyutturlar, çünkü nesneleri yoktur, oluşturulamaz da. Ø Soyut sınıfları, singleton ile karıştırmayın! ØBu sınıfların nesnesi oluşturulamadığı için sadece kavramsal olarak ve hiyerarşinin en tepesinde, alt sınıfları için bir kalıp oluşturmak üzere vardırlar. ØBir sınıfı soyut yapmak için tanımlarken abstract anahtar kelimesi kullanılır. public abstract class Employee{... } 8

Employee.java ØSoyut olan Employee sınıfının nesnesinin yaratılamayacağını HR.java sınıfındaki getanemployee() metoduna bakarak gözlemleyin. 9

Soyut Metot (Abstract Method) 10

Soyut Sınıf Metot Yaklaşımı - I ØYandaki nesne hiyerarşisini ve bu hiyerarşideki soyut olan Employee sınıfının üzerindeki work() metodunu düşünün. ØBüyük bir ihtimalle, Employee sınıfının bütün alt sınıfları work() metodunu override etmişlerdir. 11

Soyut Sınıf Metot Yaklaşımı - II ØSoyut bir sınıfın bir metodu, o sınıfın tüm alt sınıfları tarafından override ediliyorsa bu durumda o metot sadece arayüz sağlıyor, gerçekleştirme sağlamıyor demektir. Ø Çünkü, sınıf soyut olduğundan o sınıfın hiç bir nesnesi oluşturulmuyor dolayısıyla da metodun bu sınıftaki gerçekleştirmesi hiç bir şekilde çağrılmıyor demektir. ØTüm alt sınıflar tarafından override edilen böyle metotlar, aslen bir kalıp ya da şablon olarak rol alırlar yani sadece arayüz sağlarlar. Ø Bu tür metotların davranışının olmasına da gerek yoktur. 12

Soyut Sınıf Metot Yaklaşımı - III ØArayüzü olan ama gerçekleştirmesi olmayan metoda soyut metot (abstract method) denir. ØSoyut bir metot, abstract anahtar kelimesiyle nitelenir. ØSoyut bir metot, kodu yani gerçekleştirmesi olmadığından, tanımında {} kullanmadan, sadece arayüz olarak ifade edilir ve ; ile sonlandırılır. public abstract class Employee{... public abstract void work(); } 13

Soyut Sınıf Soyut Metot ØSoyut metotlar ancak soyut sınıflarda bulunur. ØBir sınıfın soyut olması için soyut metoda sahip olmasına gerek yoktur. Ø Ama bir tane bile soyut metoda sahip olan bir sınıf, soyut olarak tanımlanmak zorundadır. Ø Tipik olarak bir sınıfın soyut olmasının sebebi, en az bir tane de olsa soyut metoda sahip olmasıdır. ØHiç bir metodu soyut olmayan bir sınıfı soyut olarak tanımlamanın ne gibi bir sebebi olabilir? 14

AbstractClassExample.java 15

Soyut Somut Sınıf ve Miras 16

Soyut Sınıf ve Miras ØAlt sınıflar, soyut sınıflardan extends anahtar kelimesiyle miras devralırlar. ØSoyut sınıfların devralınabilecek tüm özellikleri ve davranışları alt sınıfları tarafından devralınır. ØSoyut bir sınıftan miras devralan alt sınıfın, devraldığı soyut metotlara gerçekleştirilme sağlaması yani onları implement etmesi gereklidir. Ø Aksi taktirde alt sınıf da soyut olmalıdır. 17

Employee.java ve Manager.java ØManager sınıfının, soyut olan Employee sınıfından nasıl miras devraldığını ve soyut olan work() metoduna nasıl gerçekleştirme verdiğini gözlemleyin. ØEmployee sınıfının alt sınıflarının soyut olarak devraldıkları work() metodunu override etmediklerinde oluşan durumu gözlemleyin. ØManager in, devraldığı soyut olan work() metoduna bir gerçekleştirme verdiğinde, alt sınıfı Director un artık Manager den devraldığı work() metodunu override etmeden kullanabileceğini de gözlemleyin. 18

Soyut Sınıf Somut Sınıf - Farklılıklar ØNesneleri oluşturulabilen sınıflara somut (concrete) sınıf denir. ØSoyut sınıfları, somut sınıflardan ayıran en temel üç özellik şunlardır: Ø Nesneleri oluşturulamaz, Ø Soyut metotlara sahip olabilirler, Ø Devralındığında soyut metotlarına davranış sağlanması gereklidir. ØDolayısıyla soyut sınıf varsa, ondan miras devralıp, soyut metotlarına gerçekleştirme sağlayan alt sınıfları da var demektir. ØSomut sınıfların ise bir alt sınıfa ihtiyaçları yoktur. 19

Soyut Sınıf Somut Sınıf - Aynılıklar ØSoyut sınıflar, somut olanlar gibi devralınmak üzere bir duruma sahip olabilirler. ØSoyut sınıflar, devralınmak üzere somut olan, soyut olan ve olmayan (somut) metotlara sahiptirler. ØSoyut sınıfların, somut olanlar gibi bir ya da daha fazla sayıda kurucu metotları vardır. Ø Eğer hiç kurucu sağlanmazsa derleyici bir tane varsayılan (noarg constructor) kurucu sağlar. Ø Soyut sınıfların nesneleri oluşturulmasa bile, alt sınıflarının nesneleri oluşturulurken, soyut olan üst sınıfın kurucusuna ihtiyaç duyacaklardır. 20

Soyutluk, final ve private ØSoyut sınıflar final olamazlar. ØSoyut metotlar da private veya final tanımlanamazlar. ØBir soyut metot sadece ve sadece public ya da protected erişim niteleyicilerini (access modifier) alabilir. Ø Soyut metotlarda static, synchronized vb. niteleyiciler de kullanılamaz. ØBu durumlar, soyut sınıflar ve soyut metotların varlık sebeplerine aykırı bir durumdur. ØÖte taraftan bir soyut sınıf main metot içerebilir. 21

AbstractProblem.java 22

Uygulama - I ØShape sınıfının en tepede olduğu hiyerarşiyi düşünün. Ø Shape in üzerindeki draw(), erase(), calculatearea() ve calculatecircumference() metotlarının soyut olmalarını nasıl karşılarsınız? Ø Shape üzerindeki metotları soyut yaparak hşeyrarşiyi tekrardan düzenleyin. ØCircle, Rectangle, Square ve Triangle ise Shape in alt sınıflarıdır ve bu metotları override ederler. Ø Metotları override ederken mümkünse super i kullanın. 23

Uygulama - II ØShapeFactory isimli bir başka sınıfın üzerindeki createshape() isimli metodun da random olarak Shape sınıfının alt sınıflarının bir nesnesini yaratıp döndürmesini sağlayın. ØTest sınıfında da random Shape nesneleri üretirken artık Shape sınıfının nesnesinı üretemeyeceğinizi de gözlemleyin. 24

Neden Soyut Sınıf? 25

Somut Sınıf ØSomut (concrete) sınıflar, alt sınıflarına hem arayüz hem de gerçekleştirme sağlarlar, Ø Çünkü bütün metotları somuttur, somut metotların hem arayüzü hem de gerçekleştirmesi vardır. ØSomut bir sınıftan miras devralan alt sınıfların önünde iki seçenek vardır: Ø Hem arayüzü hem de gerçekleştirmeyi devralmak: Bu durumda alt sınıf, devraldığı metotları override etmez. Ø Sadece arayüzü devralmak: Bu durumda alt sınıf, devraldığı metotları override eder. 26

Soyut Sınıf ØSoyut sınıfların soyut metotları ise gerçekleştirme sağlamadan sadece arayüz sağlarlar, ØDolayısıyla soyut sınıfların, soyut metotlarından dolayı sadece arayüz sağlamaları da söz konusudur. ØSoyut sınıfın hangi oranda sadece arayüz sağladığı hangi oranda hem arayüz hem de gerçekleştirme sağladığı, sahip olduğu soyut-somut metot dengesiyle ilgilidir. 27

Neden Soyut Sınıf? ØŞu iki durumda soyut sınıf kullanmak anlamlıdır: Ø Sınıfın nesnesinin oluşturulması istenmediğinde. Ø Bu durumda hiç bir metodu soyut olmadan bir sınıf soyut olabilir. Ø Bu daha nadir görülen bir durumdur. Ø Daha yaygın halde, sınıftaki bazı metotlara gerçekleştirme verilmek istenmediğinde. Ø Bunun iki sebebi olabilir: Ya baştan bazı metotlar için, tüm alt sınıflara uygun bir gerçekleştirme bulunamaz. Ya da başta bazı metotlar için, tüm alt sınıflara uygun bir gerçekleştirme bulunduğu düşünülse bile bir müddet sonra tüm alt sınıfların bu metodu override ettiği görülür. 28

Java API sindeki Soyut Sınıflar ØJava API sinde pek çok soyut sınıf vardır; Ø java.io paketinde InputStream, OutputStream, Reader ve Writer Ø java.util paketinde Calendar ve AbstractList 29

Özet ØBu bölümde, çok şekillilik (polymorphism) ele alındır. ØTipler arasındaki çevrimler (conversion) ele alındı. 30

Ödevler 31

Ödevler I Ø 2. Bölüm uygulamalarında kurguladığınız yandaki hiyerarşide Student sınıfını ve üzerindeki study() ve register() metotlarını abstract yapın. Ø Bu metotları alt sınıflarda gerçekleştirin. 32