Download as pdf or txt
Download as pdf or txt
You are on page 1of 58

OOP’ye Giriş

2. Gün

Itero

Arkhé Köyü

Temmuz 2022

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 1 / 38


Bugünün Konuları

Sınıflar
Birim Testler
Konteynır Sınıfları
Listeler, Mapler ve Setler
Inheritance/Kalıtım
Veri Tipi Dönüştürme (Casting)
Metod Overridelama

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 2 / 38


Bugünün Konuları

Sınıflar
Birim Testler
Konteynır Sınıfları
Listeler, Mapler ve Setler
Inheritance/Kalıtım
Veri Tipi Dönüştürme (Casting)
Metod Overridelama

Önemli
Inheritance, OOP paradigmasının gücünü aldığı konsepttir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 2 / 38


OOP

Sayılar, karakterler gibi bilgileri int ve char veri tipleri ile temsil
edebiliyoruz ama ya programımızda araba gibi bir nesneyi temsil etmemiz
gerekirse?

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 3 / 38


OOP

Sayılar, karakterler gibi bilgileri int ve char veri tipleri ile temsil
edebiliyoruz ama ya programımızda araba gibi bir nesneyi temsil etmemiz
gerekirse?

İşte bu noktada sınıflar ve objeler, bizim için çok kullanışlı bir yazılım
aracı haline geliyor.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 3 / 38


Obje Nedir?

Yazılımdaki objeleri, günlük hayattaki objelere benzetebiliriz. Aynı günlük


hayattaki nesneler gibi, objelerin de özellikleri vardır. Bunlara objelerin
attribute’ları denir. Bunun yanında, nasıl nesneleri kullanıp bazı aksiyonlar
gerçekleştirebiliyorsak, objelere içerisindeki fonksiyonlar(metodlar)
aracılığıyla aksiyonlar yaptırabiliriz.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 4 / 38


Obje Sınıf İlişkisi

Sınıflar, objelerin oluşturulurken referans olarak alınacak bir şema görevi


görürler. Yani sınıflar, bir objenin hangi özellikleri olabileceğini ve objeyle
yapılabilecek şeyleri tarif eder. Yani, eğer araba analojisinden devam edecek
olursak, obje araba iken, sınıf o arabayı tarif eden şema görevi görür.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 5 / 38


Java Obje Örneği

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 6 / 38


Constructor

Bir obje ilk oluşturulurken çalıştırılacak bir kod parçası, ya da objenin


içerisine kaydedilecek parametereler, özel bir metod olan constructor ile
alınır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 7 / 38


Constructor

Bir obje ilk oluşturulurken çalıştırılacak bir kod parçası, ya da objenin


içerisine kaydedilecek parametereler, özel bir metod olan constructor ile
alınır.

class Araba{
String color;
// Constructorlarin return tipi yoktur, ve erisim modlari
public olmalidir
public Araba(String color){
// this keyword’u ile parametre olan "color" degiskenine
degil attribute olana erisiriz
this.color = color;
}
}

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 7 / 38


Constructor

// new keyword’u kullanarak sinifin yeni bir objesi olusturulur


// parametreler, constructor fonksiyonuyla aynidir
Araba tasit = new Araba("Siyah");

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 8 / 38


Sınıflarda Erişim İzinleri

public public olan fonksiyonlar ve attribute’lara her yerden


erişilebilir.
private private alanlara, sadece classın içerisinden erişiebilir
protected protected alanlara sınıfın içerisinden ya da alt sınıflarından
erişilebilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 9 / 38


Sınıflarda Erişim İzinleri

public public olan fonksiyonlar ve attribute’lara her yerden


erişilebilir.
private private alanlara, sadece classın içerisinden erişiebilir
protected protected alanlara sınıfın içerisinden ya da alt sınıflarından
erişilebilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 9 / 38


getter ve setter metodlar

Çoğu zaman sınıf yapısı tasarlanırken, attribute’lar, yani değişkenlere


private erişim izni atanır ve bu değişkenlere erişmek için public
erişim seviyesinde metodlar oluşturulur.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 10 / 38


getter ve setter metodlar

Çoğu zaman sınıf yapısı tasarlanırken, attribute’lar, yani değişkenlere


private erişim izni atanır ve bu değişkenlere erişmek için public
erişim seviyesinde metodlar oluşturulur.

Bunu yaparken amaç, yazılımcıya ileri dönük bir esneklik sağlamaktır.


Örneğin, ileride bir noktada uzunluk değişkeni cm’den inç uzunluğuna
geçirilmek isterse o değişkenin tek erişim noktasını yazılımcı kontrol ettiği
için sadece o fonksiyonları değiştirmek yeterli olur.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 10 / 38


getter ve setter metodlar

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 11 / 38


static

static anahtar kelimesi, oluşturulan objelerden bağımsız olarak


erişilebilen bir metod ya da attribute tanımlamak için kullanılır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 12 / 38


static

static anahtar kelimesi, oluşturulan objelerden bağımsız olarak


erişilebilen bir metod ya da attribute tanımlamak için kullanılır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 12 / 38


final

final anahtar kelimesi, bir attributeün değerinin obje ilk


oluşturulduğunda atanması gerektiğini belirtir. final özelliğine sahip bir
attributeün değeri verildikten sonra değiştirilemez.

public final int mesafe;

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 13 / 38


final

final anahtar kelimesi, bir attributeün değerinin obje ilk


oluşturulduğunda atanması gerektiğini belirtir. final özelliğine sahip bir
attributeün değeri verildikten sonra değiştirilemez.

public final int mesafe;

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 13 / 38


toString ve equals

toString
toString methodu, zorunlu olmasa da birçok sınıfa yazılan bir
fonksiyondur. toString metodu aracılığıyla yazılan class’ın insanlar
tarafından okunabilen bir string’e (yazı dizisine) dönüşümü sağlanır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 14 / 38


toString ve equals

toString
toString methodu, zorunlu olmasa da birçok sınıfa yazılan bir
fonksiyondur. toString metodu aracılığıyla yazılan class’ın insanlar
tarafından okunabilen bir string’e (yazı dizisine) dönüşümü sağlanır.
equals
== operatörü sadece primitive tiplerin karşılaştırmasında istenen sonucu
verir. Bu yüzden objeleri karşılaştırmak için sınıfın içerisine bir equals
methodu yerleştirilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 14 / 38


toString ve equals

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 15 / 38


Kendin Dene : Kitapçı

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 16 / 38


Testler

Yazdığımız kodu test etmek, kodu yazmak kadar önemli bir aşamadır.
Yazılan testler, genelde 3 tipe ayrılabilir:
Birim Testleri Kodun parçalarının tek tek ve birbirinden izole bir şekilde
test edilmesidir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 17 / 38


Testler

Yazdığımız kodu test etmek, kodu yazmak kadar önemli bir aşamadır.
Yazılan testler, genelde 3 tipe ayrılabilir:
Birim Testleri Kodun parçalarının tek tek ve birbirinden izole bir şekilde
test edilmesidir.
Entegrasyon Testleri Kodun dış sistemlerle iletişime geçen parçalarının test
edlmesidir

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 17 / 38


Testler

Yazdığımız kodu test etmek, kodu yazmak kadar önemli bir aşamadır.
Yazılan testler, genelde 3 tipe ayrılabilir:
Birim Testleri Kodun parçalarının tek tek ve birbirinden izole bir şekilde
test edilmesidir.
Entegrasyon Testleri Kodun dış sistemlerle iletişime geçen parçalarının test
edlmesidir
Sistem Testleri Programın bir bütün olarak, gerçek durumlar simüle
edilerek test edilmesidir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 17 / 38


Birim Testleri

Birim testleri çoğunlukla en çok uygulanan test etme metodudur. Bunun


temel sebeplerinden bazıları:
1 Birim test yazmak diğer testlere göre daha kolaydır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 18 / 38


Birim Testleri

Birim testleri çoğunlukla en çok uygulanan test etme metodudur. Bunun


temel sebeplerinden bazıları:
1 Birim test yazmak diğer testlere göre daha kolaydır.
2 Birim testler diğer testlere göre daha hızlı çalışır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 18 / 38


Birim Testleri

Birim testleri çoğunlukla en çok uygulanan test etme metodudur. Bunun


temel sebeplerinden bazıları:
1 Birim test yazmak diğer testlere göre daha kolaydır.
2 Birim testler diğer testlere göre daha hızlı çalışır.
3 Birim testleri çalıştırmak için herhangi bir ekstra altyapıya gerek
yoktur.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 18 / 38


Birim Testler, Örnek

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 19 / 38


Konteynır Sınıfları

Konteynır sınıfları, bir classın birden fazla instance’ını tek bir yerde
toplamamızı sağlayan sınıflara denir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 20 / 38


Konteynır Sınıfları

Konteynır sınıfları, bir classın birden fazla instance’ını tek bir yerde
toplamamızı sağlayan sınıflara denir.

İçerisinde kitap objelerinin listesini/array’ini tutan bir kitapçı objesi, ya da


araba arrayi tutan bir otopark objesi örnek olarak verilebilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 20 / 38


Konteynır Sınıfı Örneği

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 21 / 38


Genel Geçer Konteynırlar

Hatırlayalım: Yazılımcılar tembel varlıklardır.


Dolayısıyla her bir sınıfın birden fazla instance’ını gruplamak istediğimizde
yeni bir sınıf oluşturmak da bizim için ideal bir sonuç degildir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 22 / 38


Genel Geçer Konteynırlar

Hatırlayalım: Yazılımcılar tembel varlıklardır.


Dolayısıyla her bir sınıfın birden fazla instance’ını gruplamak istediğimizde
yeni bir sınıf oluşturmak da bizim için ideal bir sonuç degildir.

Bu yüzden de java standart kütüphanesi bize, fazladan kod yazmadan


herhangi bir class için kullanılabilen bazı veri tipleri sunar. Önümüzdeki
slidelarda bu veri tiplerini inceleyeceğiz.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 22 / 38


List

1 Kullanılan sınıflarından bazıları ArrayList, LinkedList ve Stack’tir


2 İçerisindeki objeler sırasını korur.
3 Bir objenin birden fazla kopyasını tutabilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 23 / 38


Set

1 Kullanılan sınıflarından bazıları HashSet ve TreeSet’tir


2 İçerisindeki objeler sırasını kaybeder.
3 Bir objenin sadece bir kopyasını tutar.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 24 / 38


Map

1 Kullanılan sınıflarından bazıları HashMap ve TreeMap’tir


2 Bir objeyi başka bir objeye bağlamak için kullanılır.
3 Arama yapmak için kullanılan objeye anahtar, aranılan objeye değer
denir.
4 Bir anahtar sadece bir objeye bağlanabilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 25 / 38


Hazır Konteynır Sınıflarına Bir Örnek

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 26 / 38


Kalıtım

Bazı sınıflar arasında, yapısal bir benzerlik, temsil ettikleri ya da yaptıkları


şeyden dolayı gelen bir ilişki vardır. Bu ilişki, programda da temsil
edildiğinde hem yazılımcıyı kod tekrarlamaktan kurtarır, hem de tasarlanan
kodun mimarisinin çok daha anlaşılabilir olmasını sağlar.

Örneğin, kuş, horoz ve güvercin arasındaki ilişkiyi inceleyelim. Birbirinden


bağımsız olarak 3 farklı sınıf oluşturmak yerine bu 3 sınıf arasındaki ilişkiyi
temsil etmek için inheritance kullanılır

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 27 / 38


Kalıtım Örneği

Kus.java
class Kus{
public void ot(){
// Buraya kod yazilacak
}
}

Horoz.java Guvercin.java
class Horoz extends Kus{ class Guvercin extends Kus{
public void dovus(){ public void uc(){
// Buraya kod yazilacak // Buraya kod yazilacak
} }
} }

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 28 / 38


Kalıtım ve Constructorlar

1 Eğer bir sınıfın constructor’ı boş ise, alt sınıflarını etkileyen herhangi
bir kısıtlama yoktur

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 29 / 38


Kalıtım ve Constructorlar

1 Eğer bir sınıfın constructor’ı boş ise, alt sınıflarını etkileyen herhangi
bir kısıtlama yoktur
2 Ancak eğer constructor’ı parametre alıyorsa, o zaman alt sınıfların
constructorlarında ilk önce super() kullanarak üst sınıfın
constructorını çağırması gerekir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 29 / 38


Kalıtım ve Constructorlar

1 Eğer bir sınıfın constructor’ı boş ise, alt sınıflarını etkileyen herhangi
bir kısıtlama yoktur
2 Ancak eğer constructor’ı parametre alıyorsa, o zaman alt sınıfların
constructorlarında ilk önce super() kullanarak üst sınıfın
constructorını çağırması gerekir.

Guvercin.java
Kus.java
class Guvercin extends Kus{
class Kus{
public Guvercin(String isim,
public Kus(String isim,
String renk, String adres){
String renk){
super(isim, renk);
// code
// code
}
}
}
}

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 29 / 38


Abstract Sınıflar

Bazı sınıflar, kendi başlarına instance oluşturamayacak kadar soyut kalırlar.


Örneğin, okulları düşünürsek, ilkokul, ortaokul ya da lise olmayan bir okul
tek başına olamaz. Buradaki okul, diğer alt sınıfların takip etmesi gereken
bir taslak çizer.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 30 / 38


Abstract Sınıflar

Bazı sınıflar, kendi başlarına instance oluşturamayacak kadar soyut kalırlar.


Örneğin, okulları düşünürsek, ilkokul, ortaokul ya da lise olmayan bir okul
tek başına olamaz. Buradaki okul, diğer alt sınıfların takip etmesi gereken
bir taslak çizer.

Taslak olarak davranan sınıflar abstract sınıflardır ve abstract sınıfların


bir objesi oluşturulamaz. Bunun yanında, abstract sınıfların içerisinde
abstract methodlar oluşturulabilir. Abstract methodların tanımı sınıfı
inheritleyen alt sınıflara bırakılır. Bu sınıfların o methodları implement
etmesi zorunludur.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 30 / 38


Abstract Sınıflar Örnek

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 31 / 38


Kalıtım ve Veri Tipleri

Aynı üst sınıfa uzanan alt sınıf objeleri, tipi üst sınıf olan bir değişkene
atanabilir. Bu şekilde, farklı sınıfların objeleri aynı array altında toplanabilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 32 / 38


Kalıtım ve Veri Tipleri

Aynı üst sınıfa uzanan alt sınıf objeleri, tipi üst sınıf olan bir değişkene
atanabilir. Bu şekilde, farklı sınıfların objeleri aynı array altında toplanabilir.

Kus[] kuslar = new Kus[5];


kuslar[0] = new Tavuk();
kuslar[1] = new Guvercin();

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 32 / 38


Kalıtım ve Veri Tipleri

Aynı üst sınıfa uzanan alt sınıf objeleri, tipi üst sınıf olan bir değişkene
atanabilir. Bu şekilde, farklı sınıfların objeleri aynı array altında toplanabilir.

Kus[] kuslar = new Kus[5];


kuslar[0] = new Tavuk();
kuslar[1] = new Guvercin();

Bunun yanında, tip dönüştürmelerini yapmanın bir yolu da şöyledir:


Kus[] kuslar = new Kus[5];
kuslar[0] = (Kus)new Tavuk();
kuslar[1] = (Kus)new Guvercin();

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 32 / 38


Çoklu Kalıtım

Java, çoklu kalıtıma izin vermez.


D foo = new D();
foo.do_something(); // B’deki mi C’deki mi
metod cagrilacak?

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 33 / 38


Interfaceler

Interface’ler, abstract sınıflara çok benzerler. Aynı abstract sınıflar gibi,


implementasyonu alt sınıfa bırakılan metodlar tanımlayabilirler.
Interfacelerin abstract sınıflardan temel farkı, içerisinde tanımlanan
herhangi bir metodun implement edilememesidir. Ayrıca, bir class, birden
fazla interface’e extend edebilir. Interface’lere extend edilirken,
implements anahtar kelimesi kullanılır.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 34 / 38


Overloading

Bir class’ın içerisindeki iki metodun aynı ismi paylaşması mümkündür.


Bunun olması halinde, metodların tanımındaki parametreler farklı olmalıdır.
Böylece compiler(derleyici) yazılımcının iki metoddan hangisini çağırmak
istediğini anlayabilir.

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 36 / 38


Overloading

Bir class’ın içerisindeki iki metodun aynı ismi paylaşması mümkündür.


Bunun olması halinde, metodların tanımındaki parametreler farklı olmalıdır.
Böylece compiler(derleyici) yazılımcının iki metoddan hangisini çağırmak
istediğini anlayabilir.

class EPosta {
public void yolla(String mesaj, String adres){
// Code
}

public void yolla(String mesaj, String adres, Dosya eklenti){


// Code
}
}

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 36 / 38


Overloading Örneği

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 37 / 38


Overriding vs Overloading

Önemli
Overrideing Overridelama islemi, alt sınıflardan birinin üst sınıftaki bir
metodu tekrar implement etmesidir
Overloading Overloadlama islemi, aynı isimli ama farklı parametreler alan
fonksiyonlar oluşturmaktır

Itero (Arkhé Köyü) OOP’ye Giriş 2. Gün Temmuz 2022 38 / 38

You might also like