Title: NESNEYE Y
1NESNEYE YÖNELIK PROGRAMLAMANIN TEMEL
ILKELERIGENEL BIR BAKIS
Yilmaz Kiliçaslan
2Sunum Plani
- Bir önceki derse baglanti
- Programlama yaklasimlari
- Nesneye-Yönelik Programlamanin Ilkeleri
- Soyutlama
- Saklama
- Kalitim
- Çok biçimlilik
SINIF
SINIF HIYERARSISI
3Bir Önceki Derse Baglanti
- Gerçegin bütün düzlemleri karmasikligin
üstesinden gelmek için, bölümleyerek soyutlama
ilkesini kullanir. - Dijkstranin belirttigi gibi, karmasiklikla nasil
bas edlecegi antik dönemden beri bilinmektedir
böl ve yönet (divide et impera divide and
rule).
4PROGRAMLAMA YAKLASIMLARI
- Bir programlama dili algoritmalar ve veri
yapilarindan olusur. - Programlama dilleri programlamaya yaklasim
açisindan 4 gruba ayrilabilir - Prosedür yönelimli diller (örn. Fortran, Pascal)
- Fonksiyon yönelimli diller (örn. Lisp)
- Nesne yönelimli diller (örn. C, C, Java)
- Mantik yönelimli diller (örn. Prolog)
5PROSEDÜR YÖNELIMLI DILLERE ALTERNATIF OLARAK
NESNE YÖNELIMLI DILLER
- Geleneksel prosedür yönelimli programlama
yaklasiminda, bir program gerçeklestirilecek bir
dizi islem adimini, yani bir algoritmayi,
tanimlar. - Nesneye-yönelik yaklasimda ise, bir program
birbiriyle etkilesim halinde olan bir nesneler
sistemini tanimlar. - Ci tümüyle prosedürel bir dil olarak
kullanabiliriz fakat, ancak nesneye-yönelik bir
yaklasimla bu dilin bütün potansiyelini açiga
çikarabiliriz.
6NESNEYE-YÖNELIK PROGRAMLAMANIN TEMEL KAVRAMLARI
- Nesneye-yönelik programlamanin temel kavramlari,
- büyük programlar yazmayi kolaylastiran soyutlama
ve programlari degistirmeyi ve korumayi
kolaylastiran saklama - kalitim ve çok biçimlige izin veren ve
programlari kolayca genisletilebilir kilan sinif
hiyerarsisidir. - Herhangi bir programlama dilinde bu kavramlari
uygulayabilirsiniz fakat, nesneye-yönelik
programlama dilleri salt bu amaçla
tasarlanmislardir.
7SOYUTLAMA - 1
Soyutlama , belirli bir bakis açisindan, önemli
özelliklere odaklanabilmek için ayrintilari göz
ardi etme sürecidir.
8SOYUTLAMA - 2
- Geleneksel olarak, bir programlama dili soyutlama
yapmaya izin verdigi ölçüde yüksek-düzeyli
(high-level) kabul edilir. - C (ve diger nesneye-yönelik programla dilleri)
verilen bir isi Cden daha soyut bir tarzda
tanimlama imkani verirken, C de Birlestirici
Dillerden daha soyut bir ortam sunar.
9PROSEDÜREL SOYUTLAMA-1
- Islemlere iliskin ayrintilari göz ardi etmemize
izin veren prosedürel soyutlama en yaygin
soyutlama tarzidir. - Belirli bir dilde bir program yazarken programci
kendisini bu dilin sunmus oldugu soyutlama
düzeyiyle sinirlamak zorunda degildir. Birçok dil
kullanici-tanimli fonksiyonlar (rutinler,
prosedürler) yardimiyla prosedürel soyutlama
düzeyini daha yukarilara tasimaya izin verir.
10PROSEDÜREL SOYUTLAMA-2
- Kendi fonksiyonlarinizi yazarak, programin
yaptigi bir dizi isleme bir isim vermis
olursunuz. Örnegin, iki karakter katarinin
ayniligini büyük-küçük harf ayrimi gözetmeksizin
test eden asagidaki kodu, - while (s ! \0)
- if ((s t)
- ((s gt A) (s lt Z) ((s32)
t)) - ((t gt A) (t lt Z) ((t32)
s)) ) - s t
- else break
- if (s \0) printf(esit \n)
- else printf(esit degil \n)
- bir fonksiyon içine yerlestirebiliriz
- if ( !_stricmp(s, t) ) printf(esit \n)
- else printf(esit degil \n)
11PROSEDÜREL DEKOMPOZISYON
- Yapisal programlama yaklasiminda,
- ilk tasarim adimi programdan beklenen
islevselligi belirlemektir. Yanitlanmasi gereken,
Bu program ne yapacak? sorusudur. - Ardindan, istenileni gerçeklestirmesi için
programin atmasi gereken temel adimlar
yüksek-düzeyli pseudo kodlar ya da akis
diyagramlari yardimiyla belirlenir. - Sonrasinda, her temel adim daha küçük adimlara
bölünerek tasarim daha rafine hale getirilir. - Bu yaklasima, prosedürel ayristirma (procedural
decomposition) denir.
12PROSEDÜREL DEKOMPOZISYON
"Structured programming appears to fall apart
when applications exceed 100,000 lines or so of
code" (Stein 1988)
13VERI SOYUTLAMASI-1
- Bir veri tipinin nasil yapilandiginin
ayrintilarini göz ardi etmemize izin veren
soyutlama tarzina veri soyutlamasi denir. - Örnegin, bilgisayardaki her tür veri ikili
sayilar olarak düsünülebilir. Fakat, birçok
programci ondalik sayilarla düsünmeyi tercih
ettigi için, dillerin çogu tam ve floating
sayilari destekler. - Basic dili karakter katari (string) tipini bir
veri soyutlamasi olarak destekler. Diger yandan,
C dili string soyutlamasini dogrudan desteklemez.
Bu dilde stringler ardisik bellek hücrelerini
isgal eden bir dizi karakter olarak
tanimlanmistir.
14VERI SOYUTLAMASI-2
- Prosedürel soyutlama kapasitelerinin aksine,
birçok dil yeni veri soyutlamasi düzeyleri
yaratmak konusunda sinirli destek saglarlar. - C kullanici tanimli veri tiplerini structurelar
ve typedefler araciligiyla destekler. - Birçok programci structurelari basit bir
degiskenler toplulugu olarak kullanir - struct KisiBilgisi
- char isim30
- long telefon
- char adres130
- char adrese230
15Nesne Prosedürel Soyutlama Veri Soyutlamasi
- Bir structurein bildirimini kendisini
kullanmamiz gereken fonksiyonlari belirtmeden
yapabiliriz. C dili, içsel olarak birbirlerine
bagli olmalarina ragmen, prosedürel soyutlamayi
ve veri soyutlamasini iki ayri teknik olarak
sunar. - Bu tekniklerin birlestigi noktada nesne-tabanli
ya da nesneye-yönelik programlama yaklasimi dogar.
16SINIFLAR
- Nesneye-yönelik programlama, prosedürel soyutlama
ve veri soyutlamasini siniflar biçiminde
birlestirir. - Bir sinifi tanimlarken, yüksek-düzeyli soyut bir
yapiya iliskin her sey belirlenir. - Bu sinifa ait bir nesneyi kullanirken, sinif
içinde bildirilmis veri tipleri ve onlar üzerinde
tanimlanmis islemler göz ardi edilebilir.
17SARMALAMA
- Programimizin tasarimini kendi islem kümelerine
sahip soyut veri tipleri etrafinda yaparak
kendimizi kodlama / gerçekleme detaylarindan daha
fazla arindiririz. Bu da bizi nesneye-yönelik
programlamanin bir diger avantajina, sarmalamaya,
götürür.
18Sarmalama Bilgi Saklama
- Sarmalama, soyutlamayi desteklemek yada
güçlendirmek için bir sinifin iç yapisinin
gizlenmesidir. Bu gizleme, bir sinifin görünür
arayüzü ile özel gerçeklemesi arasinda keskin
bir ayrim yapmamizi gerektirir. - Bir sinifin arayüzü o sinifin ne yapabilecegini,
gerçeklemesi ise bunu nasil yapabilecegini
gösterir.
19Verileri Fonksiyonlarla Gizleme
- Gerçek bir sarmalama, verileri fonksiyonlarla
gizlemeyi gerektirir
Fonk.
Erisilebilir verili nesne
Fonk.
VERI
Fonk.
Fonk.
Fonk.
Fonk.
Gizli verili nesne
VERI
Fonk.
Fonk.
Fonk.
20Parça bütün ve alt-sinif üst sinif hiyerarsileri
21SINIF HIYERARSISI
- Nesneye-yönelik programlamanin, prosedürel
programlamada bulunmayan, bir özelligi, tip
hiyerarsisi tanimlayabilme yetenegidir. - Örnegin, C Dili bütün veri tiplerini birbirinden
bagimsiz olarak ele alirken, C bir sinifin
baska bir sinifin alt-tipi olarak tanimlanmasina
siniflar arasi benzerlikleri bir ortak üst-sinif
altinda toplamaya izin verir. - Birkaç sinif için ortak bir üst-sinif tanimlama
da bir tür soyutlamadir. Siniflarin ortaklasa
tasidiklari bazi yönler üzerinde odaklanip
digerlerini göz ardi etmeye izin verir. - Bir sinif hiyerarsisi tanimlamanin 2 pratik
faydasi vardir - Türetilmis sinif üst-sinifin kodunu paylasabilir
- Türetilmis sinif üst-sinifin arayüzünü
paylasabilir.
22KOD KALITIMI
- Eger yeni bir sinif tanimliyorsaniz ve mevcut bir
sinifin islevselliginden yararlanmak
istiyorsaniz, yeni sinifinizi mevcut siniftan
türetirsiniz. Bu durumda kalitim mekanizmalari
size mevcut kodu yeniden kullanma imkani saglar.
23ARAYÜZ KALITIMI
- Bir diger kalitim stratejisi, türetilmis sinifin
üst-sinifinin eleman fonksiyonlarinin yalnizca
isimlerini kalitim yoluyla almasidir. Türetilmis
sinif bu fonksiyonlar için kendi kodunu kullanir.
- Arayüz kalitiminin temel faydasi çok-biçimlilige
izin vermesidir.
24ÖZET
- NYPde siniflar,
- Soyutlama
- Sarmalama
- Hiyerarsik veri yapilanmasi
- için gerekli destegi saglarlar.
-
25Kaynaklar
- Robert, L. 2002. Object-Oriented Programming in
C. SMS, Indianapolis, Indiana. - Stein, J. March 1988. Object-Oriented
Progran-iming and Database Design. Dr.
Dobb'sjoumal of Software Tbolsfor tbe
Professional Programmer, No. 137, p. 18.