Bölüm 12 Nesneye Yönelik Programlama

Transkript

Bölüm 12 Nesneye Yönelik Programlama
Bölüm 12
Nesneye Yönelik Programlama (NYP)
Object Oriented Programming (OOP)
Object-Oriented
Bölüm 12 Başlıklar
ş
„
„
„
„
„
„
Giriş
Nesneye Yönelik Programlama (NYP)
Nesneye Yönelik Programlama Dillerinde Tasarım Konuları
C++ Nesneye Yönelik Programlama
J
Java
N
Nesneye
Yö
Yönelik
lik P
Programlama
l
C# Nesneye Yönelik Programlama
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
2
Girişş
„
NYP destekleyen dillerin kategorileri:
1. NYP desteği
ğ eklenmiş
ş diller
… C++ (ayrıca yordamsal ve veriye yönelik programlamayı da destekler)
… Ada 95 (ayrıca yordamsal ve veriye yönelik programlamayı da destekler)
… CLOS (Lisp NYP sürümü 1988) (ayrıca fonksiyonel programlamayı da destekler)
… Scheme (ayrıca fonksiyonel programlamayı da destekler)
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
3
Girişş
2. NYP desteklenir, fakat buyurgan dillerin tipik özellikleri de bulunur
Eiffel ((Daha önceki herhangi
g bir dile dayanmaz)
y
)
… Java (C++ kaynaklı)
…
3. Saf NYP Dilleri
…
S llt lk 80
Smalltalk
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
4
Paradigma
g
Evrimi
„
Paradigma Evrimi (Paradigm Evolution)
((Paradigma:
g
Bir süreç yya da model için esas olan örnek yya da örüntü))
1. Yordamsal (Procedural) - 1950-1970 (yordamsal soyutlama)
2. Veriye Yönelik (Data-Oriented) - erken 1980ler (Veri soyutlaması)
3 NYP – geç 1980’ler
3.
1980 ler (SVT,
(SVT Kalıtım (inheritance) ve dinamik bağlama)
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
5
Nesneye
y Yönelik Programlama
g
„
Kalıtımın başlangıcı
… 1980lerin ortalarından gözlemler :
„
„
„
Yazılımcılar üzerinde üretkenliğin artması yönünde büyük baskı vardı.
Üretkenlik artışı tekrar kullanımla elde edilebilirdi.
N yazıkk ki,
Ne
ki
…
…
„
Soyut veri tiplerinin (SVT) yeni problemlerde tekrar kullanılması zor.
Bütün SVT bağımsız ve aynı seviyede.
Kalıtım bu iki problemi de çözer-SVT’yi küçük değişikliklerle tekrar kullan ve
sınıfları (class) hiyerarşi ile tanımla.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
6
Nesneye
y Yönelik Programlama
g
„
NYP Tanımları:
…
…
…
…
…
…
…
…
SVT’lere class ((sınıf)) denir.
“Class” somutlaşmış örneklerine objects (nesne) denir.
Kalıtımla başka bir sınıfın özelliklerini alan “class”a derived class (türetilmiş sınıf)
veya subclass denir.
denir
Kalıtımla başka bir sınıfa özelliklerini veren“class”a parent class (ebeveyn sınıf)
veya superclass (süpersınıf) denir.
N
Nesneler
l ü
üzerinde
i d yapılacak
l
k iişlemleri
l l i ttanımlayan
l
altprogramlara
lt
l
metot
t t denir.
d i
Metotların çağrılmasına message (mesaj) denir.
Bir nesnenin bütün metot setine nesnenin message protocol (mesaj protokolü)
veya message interface (mesaj arayüzü) denir.
Temelde bir sınıf ebeveyninin bütün öğelerini kalıtımla alır (In the simplest case,
a class inherits all of the entities of its parent))
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
7
Nesneye
y Yönelik Programlama
g
„
Kılıflanmış öğelere erişim kontrolü ile kalıtım zor olabilir.
Bir sınıf alt sınıflarından öğelerini
ğ
saklayabilir.
y
… Bir sınıf öğelerini kullanıcılarından saklayabilir.
… Bir sınıf öğelerini kullanıcılarından saklarken alt sınıflarına açabilir.
…
„
Metotların
M
t tl
kkalıtımla
l t l alınması
l
yanında,
d bi
bir sınıff kalıtımla
k l t l alınan
l
bir
bi metodu
t d
değiştirebilir.
…
Yeni olan kalıtımla geleni overrides çürüterek üstüne çıkar.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
8
Nesneye
y Yönelik Programlama
g
„
Bir sınıfta iki tip değişken bulunur:
1. Sınıf değişkeni (Class variables) – bir/sınıf
2. Somutlaşan örnek değişkeni (Instance variables) – bir/nesne
„
Bir sınıfta iki tip metot bulunur:
1. Sınıf metodu(Class methods) – sınıfa gelen mesajları kabul eder
2. Somutlaşan örnek değişkeni (Instance methods) – nesnelere gelen mesajları
kabul eder
„
„
Tek e karşı çoklu kalıtım
Tek’e
Kalıtımın tekrar kullanım için dezavantajı:
…
Bakımı zorlaştıran karşılıklı bağımlılıklar yaratır.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
9
Nesneye
y Yönelik Programlama
g
„
„
„
Bir abstract method (soyut metot) protokolü (parametreleri, döndüğü değer)
tanımlı ve fakat kendisi tanımlı olmayan
y sınıftır.
Bir abstract class( soyut sınıf) en az bir sanal metot barındıran sınıftır.
Soyut sınıf somutlaştırılamaz.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
10
C++
„
Genel özellikler:
Karışık
ş tipli
p sistem: C’den türetildiğinden,
ğ
, onun özellikleri korunmak istenmiştir.
ş
Bu nedenle hem buyurgan dillerin tiplerini hem de sınıf yapısını destekler.
… Yapıcılar ve yok ediciler (constructors/destructors).
… Sınıf öğelerine ayrıntılı erişim kontrolü
…
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
11
C++
„
Kalıtım
… Bir
sınıf bir başka sınıfın alt sınıfı olmak zorunda
değil.
… Üyelerin erişim hakları
1. “Private” (sadece “class” ve “friends” erişebilir)
2. “Public” (altsınıflardan ve kullanıcılardan erişilebilir)
3. “Protected” (sınıf içinden veya altsınıflardan erişilebilir fakat kullanıcılar erişemez)
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
12
Example
p
class base_class {
p
private:
int a;
float x;
protected:
int b;
float y;
public:
int c;
float z;
};
class
l
subclass_1
b l
1 : public
bli b
base_class
l
{ … }
};
// - burada, b ve y protected ve
//
c ve z public
class subclass_2 : private base_class { … };
// - burada,
burada b,
b y
y, c
c, ve z private
private,
//
ve türetilecek hiçbir sınıf ebeveyn sınıfa erişemez.
// örneğin “c”ye erişilebilmesi için aşağıdaki yöntem kullanılır
class subclass_3 : private base_class {
base_class :: c;
}
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
13
C++
„
Değerlendirme
gelişmiş erişim kontrolü sağlar
… çoklu kalıtım mümkün
… Programcı metotların statik veya dinamik bağlanmasına tasarım aşamasında
karar vermelidir.
…
„
Statik bağlanma daha hızlı!
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
14
Java
„
„
C++’a çok benzediğinden bazı farklılıklardan bahsedelim
Genel özellikler
…
Temel tipler hariç her türlü veri nesne. Sadece boolean, character ve sayısal
tipler nesne değil. Bu durum kimi zaman problemler de yaratır. Örneğin ArrayList
sınıfının somutlaşmış örneği “array”dir
array dir ve eleman olarak sadece nesneler alır ve
bu durumda örneğin sayılar doğrudan yerleştirilemez. Bu durum Java 5.0 a kadar
myArray.add(new Integer(10));
şeklinde çözülürken
çözülürken, 5
5.0’dan
0’dan sonra örtülü olarak düzenlenmiştir
myArray.add(10);
Bütün nesneler yığın dinamik, referans değişkenlerle erişilebilir ve new ile üretilir.
Açık bir silici yok, çöp toplama ile işi biten nesneler sisteme iade ediliyor.
… “finalize” metodu ç
çöp
p toplamadan
p
önce örtülü olarak ççağrılarak
ğ
bazı başka
ş
temizlik işleri yaptırılabiliyor. Problem ne zaman çalışacağının belli olmaması.
… Bütün sınıflar bir sınıfın alt sınıfı olmak zorunda. En üstteki sınıfın adı “Object”.
…
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
15
Java
„
Kalıtım (Inheritance)
Tek kalıtım desteklenir. Ancak,, “interface” isimli soyut
y sınıfla ççoklu kalıtıma
destek sağlanır. Bu sınıfın tipik kullanımı ebeveynden kimi metot ve özellikleri
alarak bunlara ebeveyne arayüz hazırlamaktır.
… Bir “interface”
interface sadece isimli sabitler ve metot tanımlamaları içerebilir. Örneğin
Java “Arrays” sınıfı dizilim sıralama metodu içerir. Bunun için aşağıdaki gibi bir
arayüzün tanımlanması gerekir. Daha sonra “CompareTo” metodunu tanımlayan
her sınıf bu metoda g
göre sıralama yapabilir.
y p
…
public interface comparable {
public int compareTo(Object b);
}
…
Metotlar final tanımlanabilir. Bu tanım, metodun takip eden kalıtımsal
takipçilerinde değiştirilemeyeceğini belirler. Eğer sınıf tanımında kullanılırsa, bu
sınıfın
f hiçbir sınıfın
f ebeveyni olamayacağını gösterir.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
16
Java
„
Dinamik bağlanma
…
Bütün mesajlar
j ((metot ççağrıları)
ğ
) metotlara dinamik olarak bağlıdır.
ğ
Bunun
istisnası final metotlardır çünkü bunlar tekrardan tanımlanamayacakları için
dinamik bağlanmanın bir anlamı yoktur.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
17
Java
„
Kılıflama
İki şekilde yapılır, class ve package
… Package ilişkili sınıfları birleştirir (isimli veya isimsiz olabilir)
… Bir kapsamda tanımlanmayan bütün öğeler isimsiz “package” yapısı altında
tanımlanmış sayılırlar, bu paket içinde görünebilirdirler.
…
„
„
Paket içindeki her sınıf paket içindeki diğer öğelerin “friend”idir.
Bu nedenle paket kapsamı C++ friend uygulaması ile benzeşir.
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
18
C#
„
General characteristics
NYP desteği
ğ Java g
gibidir.
… class ve struct yapılarını destekler
… Sınıflar Java sınıflarına benzer
…
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
19
C#
„
Kalıtım
Sınıf tanımlamak için
ç C++ sözdizimi kullanılır
public class NewClass : ParentClass { … }
… Ebeveynden kalıtım kalmış metot, türetilmiş sınıfta tanımı new ile işaretlenerek
değiştirilebilir.
değiştirilebilir
…
…
Ebeveyn sınıfı metodu hala açıkça aşağıdaki örnekte olduğu gibi çağrılabilir:
base.Draw();
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
20
C#
„
Dynamic binding
…
Metotların dinamik bağlarla
ğ
ççağrılabilmesi
ğ
için:
ç
„
„
Temel sınıf metodu “virtual” işaretlenir.
Türetilmiş sınıflardaki metotlar ise “override ” tanımlanırlar.
Soyut metotlar “abstract
abstract ” olarak işaretlenmeli ve bütün altsınıflarda
tanımlanmalıdır.
… Bütün C# sınıfları Object sınıfından türetilmiştir.
…
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
21
C#
„
Değerlendirme
C# en yyeni C tabanlı nesneye
y yönelik
y
programlama
p g
dilidir.
… C# ve Java arasında NYP açısından çok az fark bulunur.
…
5 Mayıs 2011
Tuğrul Yılmaz - Pamukkale Üniversitesi
22

Benzer belgeler