0% found this document useful (0 votes)
13 views32 pages

Object Oriented Programming Principles

Uploaded by

Artin Amiri
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views32 pages

Object Oriented Programming Principles

Uploaded by

Artin Amiri
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Nesne tabanlı programlama (NTP) özellikleri

Çokbiçimlilik - polimorphizm

Miras – inheritance

Soyutlama – abstraction

Kapsülleme – encapsulation
Dr. Öğr. Üyesi Emre Bendeş
Miras – inheritance
Bir sınıfın miras aldığı sınıfın özelliklerini ve metotlarını üzerinde toplaması
Var olan veri türlerini kullanarak yeni bir veri türü üretmek

Dr. Öğr. Üyesi Emre Bendeş


Miras – inheritance
• Ana sınıf – alt sınıf (base - child)
• Sınıflar arası is-a (generalization) ilişkisi kurar
• Sınıfların özelliklerini alt sınıflara bırakması
• Temel özellikler ana sınıfta toplanır
• Alt sınıflar temel özelliklere kendi özelliklerini eklerler
• Daha iyi organize edilmiş kod sağlar.
• Hiyerarşik tasarım sağlar
• Soyutlamanın önünü açar.

Dr. Öğr. Üyesi Emre Bendeş


public abstract class Hayvan {
int kilo;
public Hayvan(){}
void yemYe() {
kilo++; public class Hamsi extends Balik {
} int kilo;
abstract void hareketEt(); void yemYe() {
} kilo++;
}
void hareketEt() {
public class Balik extends Hayvan{ [Link]("kuyruk sallıyor .....");
public Balik() { kilo -=1;
süper(); }
yüz(); public Hamsi() {
} süper();
void hareketEt() { yüz();
[Link]("kuyruk sallıyor ....."); }
kilo -=1;
void yüz() {
}
[Link]("balık
[Link]("hamsi yüzüyor.");
void yüz() {
super.yüz();
[Link]("balık yüzüyor .....");
}
}
}
}

public class Hamsi extends Balik {


public Hamsi() {
yüz(); Hamsi ciciHamsi = new Hamsi();
}
void yüz() {
[Link]("hamsi yüzüyor."); Override
super.yüz();
}
}
Dr. Öğr. Üyesi Emre Bendeş
Neden Miras Kullanalım
• Doğru kod organizasyonu: Ana Sınıf

Tekrar eden
A sınıfı kod
B sınıfı
A Sınıfı B Sınıfı

• Nesneler hiyerarşisi oluşturma


• Çok biçimlilik Önünü Açar
• Downsampling

Dr. Öğr. Üyesi Emre Bendeş


Miras Çeşitleri

Görüntü kaynağı: [Link]

Dr. Öğr. Üyesi Emre Bendeş


Kapsülleme – encapsulation
Sınıf iç yapısını korumak

Dr. Öğr. Üyesi Emre Bendeş


Kapsülleme – encapsulation
• Sınıfın iç yapısına müdahaleyi düzenler
• Sınıfı tasarımı açısından düşünülmeli
• Erişim belirleyiciler (modifiers)
• Public
• Private
• Protected
• Default
• Getter ve Setter metodları
• Sınıf özelliklerine erişimin kontrollü olmasını sağlar

Dr. Öğr. Üyesi Emre Bendeş


Kapsülleme – encapsulation
Sınıfların amacı iyi
tespit edilmeli

Bu özellikler ile
Bir sınıf hangi
hangi
özellikleri
fonksiyonları
barındırmalı ?
yerine getirmeli ?

Her sınıfın bir amacı olmalı


Amaç ile ilgili bütün işlemler bu sınıfta gerçekleştirilmeli
İstense dahi işlemleri yapan metotlar dışarıdan erişime kapalı olmalı
Dr. Öğr. Üyesi Emre Bendeş
Kapsülleme – encapsulation
Sınıfların amacı iyi
tespit edilmeli

Bu özellikler ile
Bir sınıf hangi
hangi
özellikleri
fonksiyonları
barındırmalı ?
yerine getirmeli ?

A sınıfı B sınıfı A sınıfı B sınıfı

Dr. Öğr. Üyesi Emre Bendeş


Kod karmaşıklığı ortadan
kaldırılmış olur (spagetti kod)

Kapsülleme Modülariteye katkısı olur


ne sağlar ?
Doğru tasarım sağlar

Dr. Öğr. Üyesi Emre Bendeş


Soyutlama – abstraction
Nasıl çalıştığınla ilgilenmiyorum, bana sonuç ver

Dr. Öğr. Üyesi Emre Bendeş


Soyutlama – abstraction
Tanım:

• Soyutlama, yalnızca ilgili ayrıntıları belirleme ve gerekli olmayan ayrıntıları göz ardı etme sürecidir.
• Farklı kod parçalarının kompleks kısımlarını, sahip oldukları ortak davranışlar, amaçlar, karakteristik
özellikler arkasında saklamak sayesinde daha anlaşılır ve kolay kullanılabilir kod yazmaktır.

Ana amaç

• Karmaşıklığı ele almak


• Gereksiz detayları kullanıcıdan gizlemek
• Bağımlılıkları azaltmak

Sonuç:

• Kullanıcı alt planda yatan detayları bilmeden farklı problemlere odaklanabilir.

Dr. Öğr. Üyesi Emre Bendeş


Bir kahve makinasını nasıl çalıştığı ile ilgilenilmez, sadece
kullanılır.

Gerçek Araç kullanırken motorun hangi fizik kanunları ile çalıştığını

hayattan bilmek gerekmez

soyutlama Bir bankaya kredi kartı için başvurulduğunda arka planda geçen
brokrasiyi bilmek gerekmez.

örnekleri “Türkler” kelimesi bir soyutlamadır.


Tek tek insanlar sayılmıyor ortak ve kültürel özellikler ile
gruplandırılarak tek kelime ile milyonlarca insan ifade ediliyor.

Dr. Öğr. Üyesi Emre Bendeş


Sınıf kullanımı açısından düşünülmeli

NTP açısından soyutlama


• Sınıfın iç yapısını bilmeye gerek yok
Soyutlama • Kullanılabilir metodları bilmek yeterli

– Farklı seviyelerde soyutlama


• Sistem

abstraction • Komponent
• Sınıf
Kapsüllemeden farkı
• Kapsüllemenin amacı müdahaleyi düzenlemek
• Soyutlamanın amacı işlem detayını saklamak

Dr. Öğr. Üyesi Emre Bendeş


Soyutlama çeşitleri
1. Veri soyutlama
• Sınıf verileri ve işlenmesinin dış dünyaya kapalı olması
2. Süreç soyutlama
• Süreçlerin nasıl gerçekleştiğine dair detaylar bilinmez
• Sadece gerekli metotlar kullanılabilir

Sınıfı tasarlarken oluşturulan kapsülleme dış


dünyada soyutlama oluşturur

Görsel Kaynağı: [Link]

Dr. Öğr. Üyesi Emre Bendeş


public interface Car {
void turnOnCar();

Java’da Soyutlama
void turnOffCar();
String getCarType();
}

public class AutomaticCar implements Car {

• Interface private String carType = "Automatic";

• Abstract sınıflar
public void turnOnCar() {
[Link]("turn on the automatic car");
}

public void turnOffCar() {


[Link]("turn off the automatic car");
}

public String getCarType() {


return [Link];
public class CarTest { }
}
public static void main(String[] args) {
Car car1 = new ManualCar();
Car car2 = new AutomaticCar(); public class ManualCar implements Car {

[Link](); private String carType = "Manual";


[Link]();
[Link]([Link]()); public void turnOnCar() {
[Link]("turn on the manual car");
[Link](); }
[Link]();
public void turnOffCar() {
[Link]([Link]()); [Link]("turn off the manual car");
}
}
public String getCarType() {
return [Link];
}
} Dr. Öğr. Üyesi Emre Bendeş
public class CoffeeApp {
public static void main(String[] args) {

Soyutlama – abstraction // create a Map of available coffee beans


Map<CoffeeSelection, CoffeeBean> beans
= new HashMap<CoffeeSelection, CoffeeBean>();
• Her sınıf kendi soyutlamasını gerçekleştirir [Link]([Link],
new CoffeeBean("My favorite espresso bean", 1000));
[Link](CoffeeSelection.FILTER_COFFEE,
• Geliştiricisinin bilmesi yeterli new CoffeeBean("My favorite filter coffee bean", 1000));

// get a new CoffeeMachine object


CoffeeMachine machine = new CoffeeMachine(beans);

// brew a fresh coffee


Coffee espresso = [Link]([Link]);

}
}

Kaynak:[Link]

Dr. Öğr. Üyesi Emre Bendeş


Çok Biçimlilik – polymorphism
Aynı işlevin farklı nesnelerle yerine getirilmesi

Dr. Öğr. Üyesi Emre Bendeş


Çokbiçimlilik - polymorphism
Object x = null;
x = new Double(3.14);
[Link]();
x = new Date( );
[Link]();

Object x = new Something( );


[Link]( x );
println(x), [Link]() metodunu çağırır.

Object a = .?.; Çok biçimlilik için esas olan nesne tipini


[Link]( );
[Link]( );
bilmeden fonksiyonu çağırabilmektir.
Çalışır
Hata
verir

Dr. Öğr. Üyesi Emre Bendeş


Çokbiçimlilik - polymorphism
Çalışması için derleyicinin her zaman a nesnesinin run() metodunu
sağlayacağını bilmesi gerekir.

[Link]( );

Çağırdığımız farklı nesnelerin aynı metotlarının olduğunu garanti


etmeliyiz.

Dr. Öğr. Üyesi Emre Bendeş


Çokbiçimlilik - polymorphism
Java için metot varlığını garanti etmenin 2 yöntemi var:
1. Miras
Ana sınıfta ilgili metot bulundurulur.
Alt sınıflarda bu metodun varlığı garanti olur
2. interface
Yapısı gereği interface yi uygulayan sınıflar interface nin belirttiği metotları
gerçekleştirmek zorundadır.

Dr. Öğr. Üyesi Emre Bendeş


Bir örnek : println metodu

[Link]([Link](new Author(1, "Jon", "Johnson"), books));

• Her sınıf için println fonksiyonu yazılmıyor.


• println fonksiyonu her nesne için çalışıyor. (Gönderilen nesnenin sınıfını bilmeden )

Dr. Öğr. Üyesi Emre Bendeş


Çokbiçimlilik - polymorphism
• İleri uyumluluk (forward compatibility)
• Geçmişte yazılan kodları gelecekte yazılacak kodları desteklemesi
• Yeni kodlar eklenmesi gerektiğinde eski kodların değişmek zorunda kalmaması sağlar.
• Bir görevin yapılmasının farklı yolları olabilir
• Bu farklılıklar çevresel etkenler sebebiyle ya da problemin doğasından
kaynaklanabilir
• Aynı sınıf ya da metodun farklı biçimlerde çalışabilmesini sağlar.
• Farklı seviyelerde çok biçimlilik oluşabilir
• Miras
• Soyutlama
• Consructor overriding
• Metod overriding-Statik bağlama (Static binding)
• Aşırı yükleme (Overloading)-Dinamik bağlama (Dynamic binding)

Dr. Öğr. Üyesi Emre Bendeş


Çokbiçimlilik - polimorphizm
• Binding (Bağlama) : method çağrısı ile metot gövdesinin
ilişkilendirilmesini ifade eder

Static binding • Derleme zamanı


(early binding) • overload metotların bağlanması statiktir

Dynamic • Çalışma zamanı


binding (late • override metotların bağlanması dinamiktir
binding) • Miras alınan sınıfla kullanılır.
Dr. Öğr. Üyesi Emre Bendeş
public class StaticBinding { class Dynamic {
public void staticbind() { public void dynamicbind() {
[Link]("This is static binding"); [Link]("Original method dynamic bind of type
} Dynamic. ");
public void staticbind(String s) { }
[Link](s); }
} public class DynamicBinding extends Dynamic {
public void dynamicbind() {
public static void main(String[] args) { [Link]("This is Dynamic Binding");
StaticBinding sb = new StaticBinding(); }
[Link](); public static void main(String[] args) {
[Link]("Static binding occurred."); DynamicBinding db = new DynamicBinding();
} [Link]();
} }
}

Derleyici hangi metot un çağrıldığını


derlerken belirleyebiliyor. hangi metodun çağrıldığı çalışma
zamanı belirleyebiliyor.

Dr. Öğr. Üyesi Emre Bendeş


Çokbiçimlilik (polimorphizm) Çeşitleri
• Ad hoc polymorphism
• Parametric polymorphism
• Subtyping (inclusion)
• Operator

Dr. Öğr. Üyesi Emre Bendeş


Ad hoc polymorphism
• Aynı metodu farklı uygulamalar ve farklı argümanlarla
tanımlamak için kullanılan bir tekniktir.
• Aşırı yükleme kullanılır (static binding)
public class AdHocPolymorphismExample {

void sorting(int[] list) {


[Link](list);
[Link]("sıralamadan sonra tamsayılar: " + [Link](list) );
}
void sorting(String[] names) {
[Link](names);
[Link]("sıralamadan sonra isimler: " + [Link](names) );
}

public static void main(String[] args) {

AdHocPolymorphismExample obj = new AdHocPolymorphismExample();


int list[] = {2, 3, 1, 5, 4};
[Link](list);// Calling with integer array

String[] names = {"ahmet", "veysel", "filiz", "gökhan"};


[Link](names);// Calling with String array
}
} Dr. Öğr. Üyesi Emre Bendeş
Parametric polymorphism.
• Generik sınıflarla gerçekleştirilen çokbiçimlilik

Collection<Hayvan> hayvanlar = new ArrayList<Hayvan>();


Collection<Balik> baliklar = new ArrayList<Balik>();

Dr. Öğr. Üyesi Emre Bendeş


abstract class Animal {
abstract String talk();
}
Subtyping (inclusion ) class Cat extends Animal {
String talk() {
return "Miyaww!";
• Dinamik bağlama kullanılır }
}
• Override metotlar sayesinde farklı
class Dog extends Animal {
nesneler parametre olarak alınabilir. String talk() {
return "Havvv!";
}
}

class Demo {
static void letsHear(final Animal a) {
println([Link]());
}

static void main(String[] args) {


letsHear(new Cat());
letsHear(new Dog());
}
} Dr. Öğr. Üyesi Emre Bendeş
Operator overloading
#include<iostream>
using namespace std;

class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}

// This is automatically called when '+' is used with


// between two Complex objects
Complex operator + (Complex const &obj) {
Complex res;
[Link] = real + [Link];
[Link] = imag + [Link];
return res;
}
void print() { cout << real << " + i" << imag << endl; }
};

int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2; // An example call to "operator+"
[Link]();
}

Dr. Öğr. Üyesi Emre Bendeş


Neden Çok Biçimlilik Kullanılmalı
• Modülariteyi artırır
• Kod uyumu
• Kod esnekliği
• Standartta bağlı çeşitlilik

Dr. Öğr. Üyesi Emre Bendeş

You might also like