yzm 2118 yazılım mimarisi ve tasarımı · •nesneye yönelik programlama yaklaımı ile...
TRANSCRIPT
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ı
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ı
• 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ı
Ö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ı
• 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ı
• 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ı
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ı
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ı
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ı
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ı
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ı
Ü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ı
Ü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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
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ı
• 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ı
• 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ı
• 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ı
• 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ı
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ı
• 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ı
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ı
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ı
• Ö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ı
• Ç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ı
• 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ı
Soyut Sınıflar
(Abstract Class)
42 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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ı
• 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ı
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ı
• 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ı
• 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ı
• 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ı
Arayüzler
(Interfaces)
49 Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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ı
• 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ı
• 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ı
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ı
• 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ı
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ı
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ı
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ı
58
İYİ ÇALIŞMALAR…
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi - YZM 2118 Yazılım Mimarisi ve Tasarımı