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

Benzer belgeler
YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

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

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

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

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

Nesne Yönelimli Programlama

BTEP243 Ders 3. class Yazım Kuralı:

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

BİL-141 Bilgisayar Programlama I (Java)

Kalıtım (Inheritance)

Ders 8 Konu Özeti ve Problemler

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

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

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

Sunum İçeriği. Programlamaya Giriş

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

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

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

C++ Dersi: Nesne Tabanlı Programlama

Nesneye Yönelik Programlama (OOP) 7.Hafta

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

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

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

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

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 TABANLI PROGRAMLAMA

YZM 2116 Veri Yapıları

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

public static int Toplam int x, int y

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

TASARIM KALIPLARI-DEVAM. Singleton Adapter

Java Programlamada Paket Yapısı Ve Import

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

Programlama Dillerinde Kullanılan Veri Tipleri

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

ALGORİTMA VE PROGRAMLAMA II

C++ Dersi: Nesne Tabanlı Programlama

Nesne Tabanlı Programlama. Ders Notları

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar

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

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

Nesne Yönelimli Programlama

Nesne Yönelimli Programlama

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

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

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

Bölüm 2 Varlık-İlişki Veri Modeli: Araçlar ve Teknikler. Fundamentals, Design, and Implementation, 9/e

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

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

NESNE TABANLI PROGRAMLAMA Temel Kavramlar

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

MOBIL UYGULAMA GELIŞTIRME

NESNEYE YÖNELİK PROGRAMLAMA

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

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

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:

7. HAFTA. Erişim Belirleyiciler

İç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.

NESNEYE YÖNELİK PROGRAMLAMA

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

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

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA II

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

Nesne Yönelimli Programlama ve Kalıtım

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

BİL-142 Bilgisayar Programlama II

Nesne Tabanlı Programlama

ALGORİTMA VE PROGRAMLAMA II

C# Metotlar ve Metot Tanımlama

Java Dersi. Altuğ Bilgin Altıntaş

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

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

Nesneye Dayalı 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

Operator Aşırı Yükleme (Operator OverLoading)

Erişim konusunda iki taraf vardır:

1 PROGRAMLAMAYA GİRİŞ

Nesneye Dayalı Programlama

C++ Dersi: Nesne Tabanlı Programlama

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Lambda İfadeleri (Lambda Expressions)

C++ Dersi: Nesne Tabanlı Programlama

SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA NESNE YÖNELİMLİ PROGRAMLAMA

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Ders 8: Metotlar. barisgokce.com

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

Nesneye Dayalı Programlama

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

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;

ALGORİTMA VE PROGRAMLAMA II

Nesne Yönelimli Programlama

Transkript:

YZM 2108 Yazılım Mimarisi ve Tasarımı Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1

BÖLÜM - 1 OOP Hatırlatma Bu bölümde Nesneye Yönelik Programlama ile ilgili genel hatırlatma yapılacaktır. Sınıf (Class) Nesneler (Object) Kapsülleme ve Arayüz (Encapsulation & Interface) Kalıtım (Inheritance) Çok Biçimlilik (Polymorphism) 2

Nesneye Yönelik Programlamaya Giriş Nesne yönelimli programlama (OOP), (Object Oriented Programming) nesneyi merkezine alan bir bilgisayar programlama yaklaşımıdır. Nesneye-yönelik programlamanın temel kavramları; büyük programlar yazmayı kolaylaştıran soyutlama, programları değiştirmeyi ve korumayı kolaylaştıran saklama ve programları kolayca genişletilebilir kılan sınıf hiyerarşisi dir. 3

Soyutlama Önemli özelliklere odaklanabilmek için ayrıntıları göz ardı etme sürecidir. 4

Soyutlama (devam...) Soyutlama temel olarak veri ve kontrol soyutlaması olarak yapılır. Bir veri tipinin nasıl yapılandığının ayrıntılarını göz ardı etmemize izin veren soyutlama tarzına veri soyutlaması denir. Kontrol soyutlaması ise yapısal programlama ile gelen altprogram, fonksiyon gibi kavramlar üzerinde yapılan soyutlamadır. 5

Nesne Kavramı Nesne, niteliklere ve davranışlara sahip somut bir varlıktır(entity). Bir nesnenin niteliği onun sahip olduğu özelliklerdir. Nesnenin bir niteliğinin değeri o nesnenin durumunu oluşturur. Bir nesnenin davranışları onun/onunla yapabildiği/yapılabilen şeylerdir. 6

Nesneye Yönelik Programlama Bir programlama dilinin Nesneye Yönelik Programlama dili olması için şu özelliklere sahip olması gereklidir: 1. Sınıf (Class) 2. Nesneler (Object) 3. Kapsülleme ve Arayüz ( Encapsulation & Interface ) 4. Kalıtım (Inheritance) 5. Çok Biçimlilik (Polymorphism) 7

Sınıf Kavramını Anlamak (devam ) Nesneye Yönelik programlama yaklaşımı ile düşündüğünüzde, her şey bir nesne ve her nesne bir sınıfın somutlaşmış bir örneğidir. Bir sınıf her nesne için farklı olan veri bileşeni, yani üye değişkenler barındırır. Ayrıca nesnelerin özellikleri, sınıf içerisinde kullanılan diğer değişkenler ile karışmaması için field olarak adlandırılır. 8

Sınıf Kavramını Anlamak (devam ) Nesnenin örnek değişkenlerinin içerikleri, o nesnenin durumunu belirler. Önceden yaratılmış bir sınıftan nesne türeten bir program ya da bir sınıfa class client(istemci sınıf) denir. 9

Sınıflardan Nesne Yaratmak Sınıfları tanımlarken öncelikle bir sınıf başlığı/tanımı yaratılmalıdır. Sınıf başlığı üç parçadan oluşur: 1. İsteğe bağlı bir erişim belirleyici, 2. class anahtar kelimesi, 3. Sınıfın adı [erişim belirleyici] class [sınıfadı] Örneğin; public class Isci Sınıf adları nesnelerin tipini tanımladığı için genellikle tek bir addan oluşur. 10

Sınıflardan Nesne Yaratmak (devam ) Sınıf Erişim Belirleyicisi Public Açıklama Sınıfa erişim sınırsızdır Protected Sınıfa erişim bulunduğu sınıf ve bu sınıftan türetilen sınıflar ile sınırlıdır. Internal Private Sınıfa erişim ait olduğu assembly ile sınırlıdır. Sınıfa erişim ait olduğu sınıf ile sınırlıdır. 11

Üye Değişkenleri ve Üye Metotları Sınıfların içerisinde private field ların kullanımı, nesneye yönelik dillerin bir özelliği olan information hiding örneğidir. Gerçek hayatta information hiding yöntemiyle sıkça karşılaşırız. Örneğin arabanın deposuna ne kadar yakıt kaldığını öğrenmek için depoya baktığımızda göremeyiz. Bunun yerine gerekli bilgiyi bize aracın gösterge panelindeki yakıt göstergesi vermektedir. 12

Üye Değişkenleri ve Üye Metotları (devam ) Benzer şekilde Nesneye Yönelik Programlama yaklaşımında veri field ları sıkça private olarak kullanılır fakat içerdikleri değerlere public metotlar aracılığıyla erişilir. 13

Nesne Yaratma (devam ) Isci benimasistanim = new Isci(); ifadesindeki new operatöründen sonra gelen Isci() bölümü bir metot gibi gözükmektedir. Aslında bu Isci nesnesinin constructor ı başka bir deyişle kurucu metodudur. Sınıfınız için bir constructor oluşturmadığınızda otomatik olarak varsayılan kurucu metot sağlanmaktadır. 14

Properties Sıklıkla, bir nesne ile çağırılan metotlar, o nesnenin fieldlarının durumunu değiştirmek için kullanılır. Daha sonra Isci sınıfından benimasistanim adında bir nesne yarattığınızda bu metodu aşağıdaki gibi çağırabilirsiniz: benimasistanim.kimliknoayarla(21); Bu teknik farklı dillerde de bu şekilde kullanılabilir Java da programlarken benzer işlemler için properties ler kullanılır. 15

Properties (devam ) Property, sınıfın bir fieldına erişim sağlayan bir sınıf üyesidir. Propertyler field ların nasıl ayarlanacağını ve erişimin nasıl olacağını tanımlar. Properties, private field ları ile public metotlar arasındaki en iyi özellikleri bir arada barındırır. Public metotlar gibi private verileri dışarıdan müdahalelere karşı korur, Field lar gibi adları basit değişken adlarının kullanıldığı gibi kullanılır. Properties yarattığınızda, kullandığınız sözdizimi daha kolay anlaşılabilir ve doğal olur. 16

Properties (devam ) Bir property, set erişimcisine sahipse yazılabilir, get erişimcisine sahipse okunabilir olmaktadır. Bir property sadece get erişimcisine sahipse bu property sadece okunabilir (ing.: read-only) olur. Eğer kullanılan field private yerine public olarak tanımlansaydı property kullanmamıza gerek kalmazdı. Fakat bu yöntem (Sınıfın fieldlarını private, onlara erişmeyi sağlayan metotları public tanımlanması), nesneye yönelik programlamanın tutarlı olması için genel olarak kullanılmaktadır. 17

Const Fieldlar Bir değişkeni const olarak tanımladığınızda, tanımlayıcısında static belirleyici anahtar kelimesi geçmese bile static olarak tanımlanır. Diğer bir deyişle bu field, bu sınıftan yaratılmış tek bir nesneye değil de, tamamıyla sınıfa aittir. Static bir field yarattığınızda, bu sınıftan ne kadar sayıda nesne türetilirse türetilsin, static field ın bir kopyası sınıfın tümü için saklanır. Bu field a o sınıftan nesne yaratmadan da ulaşılabilir. 18

this Referansı Bir sınıf yaratıldığında, sınıfın kaynak kodunun bir kopyası bilgisayarın hafızasında saklanmaktadır. Bununla birlikte, er ya da geç bu sınıftan defalarca nesne üretilecektir. Her yeni bir nesne ürettiğinizde, nesnenin her üye değişkeni için bellekte saklama alanı sağlanır. this referansı ile sınıfın o anki instance ına veya nesnesine ulaşabilirsiniz. 19

this Referansı Sadece nonstatic metotlar this referansını kabul etmektedir. Nonstatic metotlar üye metotları oldukları için her bir nesnede farklı çalışmaktadırlar ve bu this referansının kullanımını mantıklı kılmaktadır. this referansı kodda karışıklığı engellemek için kullanılabilir. 20

Kurucu Metotlar Herhangi bir sınıftan bir nesne yarattığınızda aşağıdaki gibi bir ifade kullanılır: Isci yeniisci = new Isci(); Kurucu metotlar(constructor) bir nesnenin oluşmasını sağlayan metotlardır. Bir sınıf için yazmamış olsanız bile, yarattığınız sınıflar için otomatik olarak parametre almayan public bir kurucu metot sağlanır. Parametresi olmayan kurucu metotlara sınıfın varsayılan kurucu metodu (default constructor) denir. 21

Kurucu Metotlar (devam ) Isci nesnesinin fieldlarının başlangıç değerlerinin varsayılan değerler olması istenmediğinde veya Isci sınıfından bir nesne yaratılırken ek işlemler yapmak istediğinizde varsayılan kurucu metot yerine kendi kurucu metodunuzu oluşturabilirsiniz. Sınıfın kurucu metotları sınıf ile aynı isme sahip olmak zorundadır. Kurucu metotların geri dönüş türleri yoktur. (int, float veya void olarak tanımlanmazlar) 22

Kurucu Metotlar (devam ) Kurucu metotlara aktarılan parametrelerin değerlerini kullanarak yaratılan nesnenin propertylerinin ya da fieldlarının değerlerini her bir nesne için ayarlamak mümkündür. Sınıf için yeni bir kurucu metot yarattığınızda otomatik olarak yaratılan kurucu metot erişilemez olur. Kurucu metotlar aşırı yüklenebilir.(ing.: overloading: Aynı adda birden fazla metot tanımlanması). Sınıflara birden fazla kurucu metot tanımlamak, bu sınıfı kullanacak olan kullanıcılar için esneklik sağlamaktadır. 23

Kurucu Metot Başlatıcıları Kurucu metotlar içerisindeki kod tekrarlarına alternatif olarak, kurucu metot başlatıcılarını (constructor initializers) kullanılabilir. Kurucu metot başlatıcıları kurucu metotların gövdelerinden önce yazılan ve içerisindeki ifadenin gövdedeki ifadelerden önce uygulanan bir deyimdir. 24

Nesne Başlatıcılarını Kullanmak Nesne başlatıcısı, bir sınıftan nesne yaratırken o nesnenin yaratılması sırasında erişilebilir üyelerine veya property lerine değer atanmasına izin verir. Örnek: Parametresiz bir kurucu metot içeren ve ve KimlikNumarasi adında public bir property içeren bir sınıfta, aşağıdaki ifadede olduğu gibi nesne başlatıcısı(object initializers) kullanılabilir: Isci yeniisc = new Isci { KimlikNo = 104 }; 25

Nesne Başlatıcılarını Kullanmak Bu ifade çalıştırıldığında, ilk olarak sınıfın varsayılan kurucu metodu çalışır ve sonrasında ise nesne başlatıcısı ile KimlikNo propertysine değer ataması yapılır. Çoklu değer atamalar nesne başlatıcısı ile aralarına virgül, konularak aşağıdaki ifadedeki gibi yapılabilir: Isci yeniisc = new Isci { KimlikNo = 104, Maas = 970}; 26

Nesne Başlatıcılarını Kullanmak Nesne başlatıcılarının kullanımı, farklı başlangıç değerlerine sahip çoklu nesne yaratılmasına izin vermektedir. Bunu yaparken çoklu kurucu metotların kullanılmasını gereksizleştirmiştir. Ek olarak nesne başlatıcılarının kullanımı farklı propertyleri için farklı başlangıç değerleri atanmasına izin verir. 27

Yıkıcı Metotlar Yıkıcı metot, o sınıftan yaratılmış bir nesne yok edildiğinde yapılacak olan eylemleri içeren metotlara denir. Genellikle sınıftan yaratılmış olan nesne kapsam dışında kaldığında yok edilmektedir. Kurucu metotlarda olduğu gibi, sınıf için bir yıkıcı metot tanımlanmadığında otomatik olarak bir yıkıcı metot sağlanmaktadır. 28

Yıkıcı Metotlar (devam...) Yıkıcı metot tanımlamak için, ~ (Tilda) işareti ile sınıfın adı olarak tanımlanır. ~ [sınıfınadı] () { } Yıkıcı metotlara herhangi bir parametre geçirilemez. Yıkıcı metotlar aşırı yüklenemezler(overload). Geri dönüş değerine sahip olmazlar. 29

Yıkıcı Metotlar (devam...) Yıkıcı metotlar çağırılmaya gerek kalmadan otomatik olarak uygulanırlar. En son yaratılan nesne ilk olarak yok edilir. Sınıftan yaratılmış bir nesne, kodda onunla yapılacak bir işi olmadığında yok edilmeye uygun hale gelir. Yıkıcı metotlar program kapatılırken yapmak istediklerimizi (bağlantı kapatma, geçici dosya silme vb.) yapmamızı sağlarlar. 30

Kalıtım (Inheritance) Kavramı Sınıfları anlamak gerçek hayatta nesneleri düzenlemenize yardımcı olur. Kalıtımı anlamak onları daha net bir şekilde organize etmenizi sağlar. Tüm "object-oriented" programlama dilleri kalıtımlardan aynı sebep için faydalanmaktadır: Programlarda kullanılan nesneleri düzenlemek, Kalıtımla bildiklerinizi kullanarak yeni nesneleri yaratmak. 31

Kalıtım (Inheritance) Kavramı (devam...) Kalıtım, sizin genel bir kategori hakkındaki bildiklerinizi daha spesifik bir kategoriye uygulamanıza olanak sağlayan prensiptir. class [childsinifadi] extends [parentsinifadi] { } 32

Kalıtım (Inheritance) Kavramı (devam...) Nesneye Yönelik programlama dillerinde yaratılan sınıflar, verisini ve metotlarını daha önceden var olan bir sınıftan kalıtabilir. Farklı bir sınıftan kalıtarak bir sınıf yaratıldığında, yeni sınıfın metotları ve veri fieldları sağlanmış olur. Böylece önceden yazılmış ve test edilmiş metotlar ve fieldlar kullanılabilir. 33

Kalıtım (Inheritance) Kavramı (devam...) Sınıf diyagramlarında sırasıyla 3 ayrı bölüm bulunur: Sınıf ismi, Sınıfın verisi ve metotları. Sınıfların arasındaki yukarıyı gösteren ok alttaki sınıfın üstteki sınıftan kalıtılarak oluşturulduğunu belirtir. Oku bu şekliyle düzenleme Unified Modelling Language (UML) diyagramlarında kullanılır. UML analistlerin ve programcıların sistemi açıklamak için kullandığı grafiksel araçtır. 34

Kalıtım (Inheritance) Kavramı (devam...) Bir sınıfı bir diğer sınıftan kalıtarak yaratılması aşağıdaki faydalar sağlar: Zaman tasarrufu: Aynı sınıfı tekrar yaratmadan onun property ve metotlarını kullanarak yeni bir sınıf oluşturulduğunda zamandan tasarruf edilir. Hata payında azalma: Child sınıf önceden kullanılmış ve test edilmiş bir sınıf olan Parent sınıftan kalıtılmıştır. İşleri kolaylaştırması: Parent sınıfı önceden kullanmış herhangi birisi için Child sınıfı anlamak ve kullanmak kolay olmakta ve böylece sadece sınıfın yeni özelliklerine odaklanabilmektedir. 35

Kalıtım (Inheritance) Kavramı (devam...) Kısaca kalıtımı kullanabilme kabiliyeti, programı daha kolay yazma, anlama ve daha az hata ile karşılaşmayı sağlar. Kalıtımı kullanarak, düzgün bir şekilde, hızlıca yeni sınıflar yaratılabilir. Kalıtılmış bir sınıf daha fazla genişletilebilir. Diğer bir deyişle, yavru sınıflar kendi içerisinde yavru sınıflara sahip olabilirler. Kalıtım tek yönlü çalışmaktadır: Yavru sınıf, ana sınıftan kalıtılarak oluşturulur, ters yönde oluşturulamaz. 36

G E N E L L E Ş T İ R M E Ö Z E L L E Ş T İ R M E Sınıfların Genişletilmesi (devam...) Daha Genel Sınıflar Sekil Parent SuperClass BaseClass Dortgen Ucgen Daire Dikdortgen Kare Child SubClass DerivedClass Daha Özel Sınıflar 37

Temel Sınıfın Metotlarını Ezme (Override) ve Çok Biçimlilik (Polymorphism) 38

Temel Sınıfın Metotlarını Ezme Önceden var olan bir sınıftan kalıtarak, genişletilmiş yeni bir sınıf oluşturduğunuzda, yeni sınıf içerisinde temel sınıfın tüm özellik ve metotları tanımlanmış olur. Bazen parent sınıfın fieldları, propertyleri ve metotları tam olarak child sınıftan yaratılan nesneler için uygun olmayabilir. Farklı işlemler yapan fakat aynı isimdeki özellik veya metotların kullanımına çokbiçimlilik (polymorphism) denmektedir 39

Temel Sınıfın Metotlarını Ezme (devam...) Çokbiçimlilik, birçok form içeren anlamına gelmektedir. Aynı adda olmalarına rağmen farklı işlemlerin yer aldığı metotlar için kullanılır. Override anahtar kelimesi kullanılarak parent sınıfın metotları ezilebilir. 40

Temel Sınıfın Metotlarını Ezme (devam...) Kalıtılarak yaratılmış olan sınıfta sanal bir metodu(virtual metot) ezmek zorunlu değildir; Kalıtılarak oluşturulmuş bu sınıf, temel sınıfın versiyonunu da kullanabilir. Yavru sınıf, temel sınıfın metotlarına (Java da) super anahtar sözcüğü ile erişebilir. 41

Soyut Sınıflar (Abstract Class) 42

Soyut Sınıflar Kalıtım kavramını anladıktan sonra, sınıfların yaratılması daha da kolaylaşmaktadır. Superclassları düşünmenin bir diğer yolu ise, subcasslarının ortak özelliklerinin tümünü düşünmek olabilir. Kalıtılmış sınıf incelendiğinde, ebeveyn sınıfının daha da genel olduğu gözlenir. 43

Soyut Sınıflar (devam...) Bazen child sınıfların daha genel bir örneğini oluşturmak için ebeveyn sınıf oluşturulur. Örneğin, önceden bir Sanatci yaratmamış olabilirsiniz; herbir Sanatci bir Ressam ın, Sair in ya da Muzisyen in daha özel halidir. 44

Soyut Sınıflar (devam...) Sonradan genişletilmek üzere yaratılan fakat kendisinden nesne oluşturulmayan sınıflara soyut sınıf (abstract class ) denir. Soyut sınıfları tanımlarken abstract anahtar kelimesi kullanılır. Soyut sınıflar da normal sınıflar gibi fiedlar ve metotlar içermektedir. Normal sınıflardan farklı olarak bu sınıflardan new operatörünü kullanarak nesne yaratılamaz. Bunun yerine, soyut sınıflar basitçe farklı nesnelerin kalıtımla yaratılması için bir ana sınıf sağlar. Metotlar gerekli olmasa da soyut sınıflar genellikle soyut metotlar(abstract methods) içerirler. Soyut bir metot hiçbir metot ifadesi içermez; bu sınıftan türetilen sınıflar da bu metotlara uygun bir şekilde uyarlanmalıdır. Diğer bir deyişle kalıtılmış sınıfta bu metotlar ezilmelidir. 45

Soyut Sınıflar (devam...) Soyut bir metodun başlığında, isteğe bağlı erişim belirleyicisi, abstract anahtar kelimesi, istenilen metodun tipi ve adı bulunur: public abstract string Analiz(); Soyut metotlara kıvırcık parantez sağlamasına gerek yoktur. Bu metotların gövdeleri kalıtılan sınıfta tanımlanır. Soyut bir sınıftan kalıtılarak yeni bir sınıf yaratıldığında, yeni sınıfta override anahtar kelimesini kullanarak soyut metotların gövdeleri oluşturulmalıdır. 46

Soyut Sınıflar (devam...) virtual anahtar kelimesi ile tanımlanan metot child sınıfta ezilmesi zorunlu değildir. Fakat abstract tanımlanmış metot ezilmek zorundadır. 47

Soyut Sınıflar (devam...) Soyut sınıflar, birden fazla child sınıf için ortak özelliklerin ve/veya metotların ihtiyaç olduğu durumlarda ortak kısımları toparlama amacı ile kullanılabilirler. Soyut sınıf kullanımları önemlidir, ancak zorunlu değildir. Soyut sınıftan nesne türetilemez. Soyut sınıflar private olamazlar. Soyut sınıflar sealed olamazlar. 48

Arayüzler (Interfaces) 49

Arayüzler (devam...) Soyut sınıflar gibi arayüzler, herhangi bir sınıfın üyelerinin ya da metotlarının koleksiyonudur. Bu metotlar herhangi bir sınıf tarafından, arayüzün soyut metotlarının tanımı sağlandığı sürece (override edildiği sürece) kullanılabilirler. Soyut sınıfların içerisinde bazı metotlar soyut olmayabilirdi. Fakat bir arayüzün içerisindeki tüm metotlar soyut olmalıdır. 50

Arayüzler (devam...) Bir arayüz tanımlanırken interface anahtar kelimesi kullanılır. Arayüz adlandırmaları, başına I harfi eklenerek adlandırılır. interface IHareketEdebilen { } int HareketEt(); Herhangi bir sınıf IHareketEdebilen arayüzünü implemente ettiğinde, ayrıca geriye int ifadesi döndüren HareketEt() metodunu da içermiş olur. 51

Arayüzler (devam...) Arayüzlerden nesne yaratılamamaktadır. Soyut sınıfların arayüzlerden farkı ise soyut olmayan metotlar barındırabilmeleridir. Arayüzlerin barındırdığı tüm metotlar soyut olmalıdır. 52

Arayüzler (devam...) Bir sınıf sadece bir sınıftan türetilebilir fakat birden fazla arayüzü implemente edebilir. Örneğin Cocuk sınıfını ele aldığımızda, Yetiskin sınıfından türetilerek oluşturulmuştur. Aynı zamanda iki arayüzü de implemente etmektedir: ICalisabilen ve IOynayabilen. class Cocuk implements Yetiskin, ICalisabilen, IOynayabilen Diğer uygulamalarda bulunan bir metodu barındıran bir sınıf yaratmak için önceden var olan bir arayüz implemente edilir. 53

Arayüzler (devam...) Arayüzler bir sözleşme olarak düşünülebilir. Bir sınıf bu arayüzü implemente ediyorsa sözleşmeye uymak zorundadır. 54

Arayüzler (devam...) Başlangıçta ne zaman arayüz (Interface) ne zaman soyut sınıf (Abstract Class) kullanılacağına karar vermek zordur. Abstract bir sınıfın bütün metodlarını abstract yaparak onu da aynı bir interface gibide kullanabiliriz. Tipik olarak, child sınıflara bazı verilerin ve metotların aktarılması isteniyor ve bunlardan bazılarının ezilmesi gerekiyorsa soyut sınıflar kullanılır. Her bir metot ezilmek istenilirse arayüz oluşturulur. 55

Arayüzler (devam...) Nesnelerin daha spesifik bir örneğini oluşturmak istiyorsak soyut sınıflar, davranışlarının benzemesini istiyorsak arayüzler yaratılır. Abstract sınıfların genellikle IS-A (dır,dir) ilişkilerinde, kalıtım(inheritance) özelliğini kullanarak kod tekrarını azaltmak için kullanılır. Interface sınıfların ise daha çok CAN-DO (yapabilir..) tarzı ilişkilerde değişen kavramları uygulamadan soyutlamak için kullanılır. 56

Yararlanılan Kaynaklar Aykut Taşdelen, C++, Java ve C# ile UML ve Dizayn Paternleri, Pusula Yayıncılık, İstanbul, 2014 Eric Freeman, Head First Design Patterns, O'Reilly Media,2004 Stephen Stelting & Olav Maassen, Applied Java Patterns, Prentice Hall PTR,2001 http://www.algoritmaveprogramlama.com http://www.tutorialspoint.com/ 57

İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr 58