yzm 2118 yazılım mimarisi ve tasarımı · •nesneye yönelik programlama yaklaımı ile...

58
YZM 2118 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 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Upload: others

Post on 24-Dec-2019

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

YZM 2118

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 Celal Bayar Üniversitesi - YZM 2118 Yazılım

Mimarisi ve Tasarımı

Page 2: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

BÖLÜM - 1

OOP Hatırlatma

2

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)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 3: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Nesneye Yönelik Programlamaya Giriş

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 4: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Önemli özelliklere odaklanabilmek için

ayrıntıları göz ardı etme sürecidir.

4

Soyutlama

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 5: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Soyutlama (devam...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 6: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Nesne Kavramı

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 7: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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 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

Nesneye Yönelik Programlama

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 8: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

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 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 9: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

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 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 10: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

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 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 11: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Sınıflardan Nesne Yaratmak (devam…)

11

Sınıf Erişim Belirleyicisi Açıklama

Public 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 Sınıfa erişim ait olduğu assembly ile sınırlıdır.

Private Sınıfa erişim ait olduğu sınıf ile sınırlıdır.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 12: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Ü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 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 13: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Ü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 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 14: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

14

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 15: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

15

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 16: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

16

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 17: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

17

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 18: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

18

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 19: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

19

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 20: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

20

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 21: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

21

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 22: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

22

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)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 23: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

23

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 24: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

24

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 25: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

25

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 };

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 26: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

26

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};

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 27: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

27

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 28: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

28

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 29: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

29

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 30: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

30

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.

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 31: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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ı

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 32: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 33: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 34: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 35: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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ı 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 36: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Kalıtım (Inheritance) Kavramı (devam...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 37: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Sekil

Dortgen

Dikdortgen

Kare

Ucgen Daire

37

Sınıfların Genişletilmesi (devam...) GENELLEŞTİR

ME

ÖZELLEŞTİR

ME

• Parent

• SuperClass

• BaseClass

• Child

• SubClass

• DerivedClass

Daha Özel Sınıflar…

Daha Genel Sınıflar…

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 38: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Temel Sınıfın

Metotlarını Ezme (Override)

ve

Çok Biçimlilik (Polymorphism)

38 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 39: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• Ö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

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 40: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• Ç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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 41: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Temel Sınıfın Metotlarını Ezme (devam...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 42: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Soyut Sınıflar

(Abstract Class)

42 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 43: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 44: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 45: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 46: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 47: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 48: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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

Soyut Sınıflar (devam...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 49: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Arayüzler

(Interfaces)

49 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 50: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 51: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 52: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 53: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 54: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

• 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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 55: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

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...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 56: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

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

Arayüzler (devam...)

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 57: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

Yararlanılan Kaynaklar

57

• 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/

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı

Page 58: YZM 2118 Yazılım Mimarisi ve Tasarımı · •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

58

İYİ ÇALIŞMALAR…

Yrd. Doç. Dr. Deniz KILINÇ

[email protected]

Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı