Title: SINIFLAR GIRIS
1SINIFLARGIRIS
Yilmaz Kiliçaslan
2Sunum Plani
- Bu derste sinif mekanizmasini su yönleriyle
inceleyecegiz - Sinif kavraminin evrimine kisa bir bakis
- Bir ara form olarak C yapilari (structures).
- Sinif bildirimi
- Sinifa ait nesnelerin kullanimi
- Eleman sahalar ve eleman fonksiyonlar
- Yapici ve yikici fonksiyonlar
- const nesneler ve eleman fonksiyonlar
- Eleman nesneler
3Programlama Dillerinin Evrimi
- Most new industrial-strength software systems are
larger and more complex than their predecessors
were even just a few years ago. This growth in
complexity has prompted a significant amount of
useful applied research in software engineering,
particularly with regard to decomposition,
abstraction, and hierarchy. The development of
more expressive programming languages has
complemented these advances. The trend has been a
move away from languages that tell the computer
what to do (imperative languages) toward
languages that describe the key abstractions in
the problem domain (declarative languages).
(Booch, G. 1998)
4Siniflara Giden Soyutlama Süreci - 1
- Wegner (1976), yüksek-düzeyli programlama
dillerini, ilk kez kullandiklari dil
özelliklerine dayanarak, bir kusak siniflamasina
tabi tutmustur - Birinci-Kusak Diller (1954-1958)
-
- FORTRAN I Matematiksel ifadeler
- ALGOL 58 Matematiksel ifadeler
- Flowmatic Matematiksel ifadeler
- IPL V Matematiksel ifadeler
5Siniflara Giden Soyutlama Süreci - 2
- Ikinci-Kusak Diller (19591961)
- FORTRAN II Alt rutinler, bagimsiz derleme
- ALGOL 60 Blok yapilari, veri tipleri
- COBOL Veri tanimlama, dosya islemleri
- Lisp Liste isleme, isaretçiler, garbage
collection
6Siniflara Giden Soyutlama Süreci - 3
- Üçüncü-Kusak Diller (1962-1970)
- PL/1 FORTRAN ALGOL COBOL
- ALGOL 68 ALGOL 60in siki takipçisi
- Pascal ALGOL 60in gevsek takipçisi
- Simula Siniflar, veri soyutlama
7Siniflara Giden Soyutlama Süreci - 4
- Kusak Boslugu (1970-1980)
- Birçok farkli programlama dili türedi ama çok
azi varligini sürdürebildi. Bu dönemde ortaya
çikan dillerin sayisi binlerle ifade edilebilecek
miktardadir. Bugün neredeyse hiçbirimizin
hatirlamadigi veya bilmedigi birçok dil icat
edilmistir. Fred, Tranquil, Chaos bunlardan
birkaçidir. Bu sonuncusunun adi, dönemin kaotik
niteligiyle çok iyi örtüsmektedir.
8Programlama Dillerinin Topolojisi - 1
The Topology of First- and Early
Second-Generation Programming Languages
9Programlama Dillerinin Topolojisi - 2
The Topology of Late Second- and Early
Third-Generation Programming Languages
10Programlama Dillerinin Topolojisi - 3
The Topology of Late Third-Generation Programming
Languages
11Programlama Dillerinin Topolojisi - 4
The Topology of Small- to Moderate-Sized
Applications Using Object-Based and
Object-Oriented Programming Languages
12YAPILAR - 1
- Eger tarihler üzerine çok sik islem yapan bir C
programi yaziyorsaniz, tarihleri gösteren yeni
bir veri tipini yapi (structure) olarak
tanimlayabilirsiniz - struct tarih
-
- int ay
- int gun
- int yil
-
- //...
- struct tarih dogum
- dogum.ay 1
- dogum.gun 23
- dogum.yil 1985
13YAPILAR - 2
- printfe parametre olarak geçirmek suretiyle bir
tarih yapisini yazdiramazsiniz. Ya yapininin her
elemanini ayri ayri yazdirmalisiniz ya da yapiyi
bir bütün olarak yazdirmak için kendi
fonksiyonunuzu yazmalisiniz - void tarih_goruntule(struct tarih tr)
- static char isim
- zero,ocak,subat,mart,nisan,
- mayis,haziran,temmuz,agustos,
- eylul,ekim,kasim,aralik
- printf(s d d,isimtr-gtgun,
- tr-gtgun,tr-gtyil)
14YAPILAR - 3
- Tarihler üzerinde, iki tanesini karsilastirmak
gibi, benzer islemler yapmak için de, ya yapi
elemanlarini ayri ayri islemelisiniz ya da tarih
yapilarini parametre olarak kabul edip söz konusu
islemleri sizin için yapan fonksiyonlar
tanimlamalisiniz.
15YAPILAR - 4
- Tarihleri yapi olarak göstermenin çesitli
dezavantajlari vardir - Bir tarih yapisinin geçerli bir tarihi içerdigi
garanti edilemez. - Bir kez tarih veri tipini programlarinizda
kullandiginizda, kodlamasi üzerinde degisiklik
yapmak çok zorlasir.
16YAPILAR - 5
- Bu problemlerden kaçinmak için daha fazla
programlama eforu göstermelisiniz. Örnegin, - belirtilen degerlerin geçerliligini test eden bir
fonksiyon kullanabilirsiniz ve - yapinin eleman sahalarina dogrudan erismek
yerine, erisim fonksiyonlari tanimlayabilirsiniz.
17SINIF BILDIRIMI - 1
- C, tanimladiginiz yeni veri tiplerinin
güvenligini, bir veri tipi ve bu veri tipi
üzerindeki islemleri ayni anda tanimlamaniza
imkan veren siniflar araciligiyla saglar.
18SINIF BILDIRIMI - 2
- Bir sinif bildirimi, yalnizca verileri degil
eleman fonksiyonlari da içermesi haricinde, yapi
bildirimine benzer - class sinif_ismi
- özel korumali veri ve fonksiyonlar
- erisim_etiketi
- veri ve fonksiyonlar
- erisim_etiketi
- veri ve fonksiyonlar
- // ...
- erisim_etiketi
- veri ve fonksiyonlar
- nesne_listesi
19SINIF BILDIRIMI - 3
- Örnek
- // Tarih sinifi
- include ltiostreamgt
- using namespace std
-
- class Tarih
-
- public
- Tarih( int mn, int dy, int yr )
- void goruntule()
- Tarih()
- private
- int ay, gun, yil
-
-
20FONKSIYONLARIN TANIMLANMASI - 1
- // Bazi gerekli fonksiyonlar
- inline int max( int a, int b )
-
- if ( a gt b ) return a
- return b
-
- inline int min( int a, int b )
-
- if ( a lt b ) return a
- return b
-
21FONKSIYONLARIN TANIMLANMASI - 2
- // Yapici Fonksiyon
- TarihTarih( int mn, int dy, int yr )
-
- static int uzunluk 0,31,28,31,30,
31,30,31,31,30,31,30,31 - //366 gun iceren yillari ihmal ediyoruz.
- ay max( 1, mn )
- ay min( ay, 12 )
-
- gun max( 1, dy )
- gun min( gun, uzunlukay )
- yil max(1, yr )
-
22FONKSIYONLARIN TANIMLANMASI - 3
- // Tarih Bilgisi Goruntuleme Fonksiyonu
- void Tarihgoruntule()
-
- static char isim
-
- zero,ocak,subat,mart,nisan,
- mayis,haziran,temmuz,agustos,
- eylul,ekim,kasim,aralik
-
- cout ltlt isimay ltlt
- ltlt gun ltlt , ltlt yil
-
23FONKSIYONLARIN TANIMLANMASI - 4
- // Yikici Fonksiyon
- TarihTarih()
-
- // Hicbir sey yapma
-
24SINIFLARIN KULLANIMI-1
- // Tarih sinifinin kullanimina bir örnek
- int main()
-
- // Gecerli bir Tarih bildirimi
- Tarih dogum1(3, 12, 1985)
- // Gecersiz bir Tarih bildirimi
- Tarih dogum2(23, 259, 1966)
- dogum1.goruntule()
- cout ltlt \n
- dogum2.goruntule()
- cout ltlt \n
-
- return 0
-
25SINIFLARIN KULLANIMI-2
- Cde tarihleri görüntülemek için her bir yapinin
adresini ilgili fonksiyona göndermeniz
gerekecekti -
- // Cde tarihlerin goruntulenmesi
- goruntule(dogum1)
- goruntule(dogum2)
26SINIFLARIN KULLANIMI-3
- C her bir eleman fonksiyonu bir yapinin eleman
sahasina erismekte kullanilan sözdizimine benzer
bir sözdizim ile çagirir - dogum1.goruntule()
- dogum2.goruntule()
- Cdaki sözdizim bir veri tipi ile bu veri tipi
üzerinde islem yapacak fonksiyonlar arasindaki
siki iliskiyi vurgulamaktadir. Bu durum, sizin
goruntule fonksiyonunu Tarih sinifinin bir
parçasiymis gibi düsünmenize yol açar. Fakat,
gerçekte bu birlesme yalnizca sözdizimseldir Her
Tarih nesnesi goruntule fonksiyonunun bir
kopyasina sahip degildir her nesne yalnizca
kendi eleman sahalarini içerir.
27SINIFIN ELEMANLARI
- Görüldügü gibi, sinif bildirimi (int tipinde ay,
gun, yil sahalari gibi) eleman sahalara sahip
olmasi yönüyle yapi bildirimine benzemektedir.
Fakat, bazi yönlerden de Cdeki yapi
bildiriminden ayrilmaktadir. Örnegin - public ve private anahtar sözcüklerini,
- (goruntule gibi) fonksiyon bildirimlerini ve
- (Tarih ve Tarih gibi) yapici ve yikici olarak
adlandirilan özel fonksiyonlari - içermektedir. Simdi bu farklara ayri ayri
bakalim.
28ERISIM DÜZEYLERI (public ve private)-1
- public ve private etiketleri kendilerini takip
eden elemanlarin erisilebilirlik düzeyini
belirler. Belirlenen erisim düzeyi bir sonraki
etikete ya da sinif taniminin sonuna kadar devam
eder. - private elemanlara yalnizca eleman fonksiyonlar
erisebilir. (Daha sonra, bu ayricaliga arkadas
sinif veya fonksiyonlarin da sahip oldugunu
görecegiz.) - public elemanlara eleman fonksiyonlar disinda,
sinifa ait nesnenin kapsam alaninda olmasi
kosuluyla, programin herhangi bir fonksiyonundan
erisilebilir.
29ERISIM DÜZEYLERI (public ve private)-2
- Sinifa ait olmayan bir fonksiyon bir private
elemana erisme girisiminde bulunursa derleyici
hata üretir - int main()
-
- int i
- Tarih dogum1( 3, 12, 1985 )
-
- i dogum1.ay//Error private saha okunamaz
- dogum1.gun1//Error private saha
degistirilemez - return 0
-
- Fakat, public elemanlara (örn. goruntule
fonksiyonu) erisim mümkündür.
30ERISIM DÜZEYLERI (public ve private)- 3
- Birçok programcinin private elemanlari bir grupta
ve public elemanlari bir baska grupta toplamayi
tercih etmesine karsin, private ve public
etiketleri bir sinifin taniminda istenilen sayida
yinelenebilir. - Bütün sinif tanimlamalarinda varsayilan baslangiç
modu private erisim modudur. Fakat, yine de
okunurlugu artirmak için bütün bölümleri
etiketlemekte yarar vardir. - Tarih sinifinda da örneklendigi gibi, Cda
yaygin olan bir konvansiyon public arayüzün
bütünüyle fonksiyonlardan olusturulmasidir bir
private veriyi bu amaç için tasarlanmis public
bir eleman fonksiyon ile görüntüleyebilir ya da
degistirebilirsiniz.
31ELEMAN FONKSIYONLAR- 1
- Eleman fonksiyonlarin prototipi ait oldugu
sinifin bildirimi içinde yer alir. - Sinif disinda sinifa ait bir fonksiyon
tanimlanirken, fonksiyonun ismi, sinifin ismi ve
kapsam çözümleme operatörü birlikte kullanilir - Tarihgoruntule()
- Bu gösterim fonksiyonun bir sinifa ait oldugunu
ve isminin bu sinifin kapsam alaninda yer
aldigini ifade etmektedir. Bu kapsam alanin
disinda ayni isim, baska fonksiyonlari
adlandirmak için kullanilabilir. -
32ELEMAN FONKSIYONLAR- 2
- Her bir versiyonun parametre listesi ile
digerlerinden ayrilmasi kosuluyla, bir eleman
fonksiyonu, herhangi bir diger fonksiyon gibi
asiri yükleyebilirsiniz. - Eleman fonksiyonlar, siniflarinin diger
elemanlarina nesne ismi belirtmeksizin
erisebilirler.
33ELEMAN FONKSIYONLAR- 3
- Bir eleman fonksiyon, nesneye isaret eden bir
isaretçi araciligiyla da çagrilabilir - Tarih dogum1( 3, 12, 1985 )
- Tarih tarihPtr dogum1
- tarihPtr -gt goruntule()
34ELEMAN FONKSIYONLAR- 4
- Bir eleman fonksiyon bir nesne referansi
araciligiyla bile çagrilabilir - Tarih dogum1( 3, 12, 1985 )
- Tarih digerTarih dogum1
- digerTarih.goruntule()
35YAPICI FONKSIYONLAR - 1
- Cde kodladigimiz tarih structureinin geçerli
degerleri içermeyi dogrudan garanti edememek gibi
bir dezavantaji oldugunu görmüstük. Cda bu tür
bir dezavantaji gidermenin bir yolu yapici
fonksiyon yazmaktir. - Yapici fonksiyonlar sinifinizin herhangi bir
nesnesinin bildirimi yapildiginda, otomatik
olarak çagrilan özel türde ilk deger atama
fonksiyonlaridir ilk deger almamis nesnelerin
kullanimindan kaynaklanabilecek hatalari
engellerler.
36YAPICI FONKSIYONLAR - 2
- Yapici fonksiyonun ait oldugu sinif ile ayni isme
sahip olmasi gerekir. Örnegin, Tarih sinifinin
yapici fonksiyonu Tarih olarak adlandirilmistir. - Tarih yapici fonksiyonunun gerçeklemesine
baktigimizda (bkz. Slayt 21), fonksiyonun
yalnizca nesnenin eleman sahalarina ilk deger
atamakla kalmayip belirtilen degerlerin
geçerliligini de kontrol ettigini görüyoruz. Bu
yapici fonksiyonlar araciligiyla nesnelerin
anlamli degerler içermesini saglamanin bir diger
yoludur.
37YAPICI FONKSIYONLAR - 3
- Bir sinif nesnesinin kapsam alanina her girisinde
yapici fonksiyon kosturulur. - Nesne bildirimi tamsayi bildirimine benzer. Önce
veri tipi, ardindan da nesnenin ismi belirtilir - Tarih dogum1( 3, 12, 1985 )
- Fakat, nesnenin bildirimi parantez içinde bir
argüman listesi de içerebilir. Bu argümanlar
yapici fonksiyona parametre degeri olarak
gönderilir ve nesnenin ilk deger atamasinda
kullanilir.
38YAPICI FONKSIYONLAR - 4
- Bir yapici fonksiyon bildiriminde bulunurken,
void dahil, döndürülecek herhangi bir deger tipi
belirtemezsiniz. Dolayisiyla, bir yapici
fonksiyon herhangi bir return ifadesi de içermez.
- Yapici fonksiyonlarinizi asiri yükleyerek, bir
sinif için birden fazla yapici fonksiyon
bildiriminde bulunabilirsiniz. - Gerçekte, bir sinif tanimlarken herhangi bir
yapici fonksiyon tanimlama zorunlulugu yoktur.
Eger hiçbir yapici fonksiyon tanimlamazsaniz
derleyici otomatik olarak hiçbir parametre
almayan ve hiçbir sey yapmayan bir tane üretir.
39YIKICI FONKSIYONLAR - 1
- Yikici fonksiyonlar, tahmin edebileceginiz gibi,
yapici fonksiyonlarin zit islevselligine
sahiptirler Bir sinif nesnesi kapsam alaninin
disina çikinca otomatik olarak yikici fonksiyon
çagrilir. - Yikici fonksiyonun görevi bir nesne yok edilmeden
önce gerekli bütün temizlik islerini yapmaktir. - Yikici fonksiyonlarin baslarina almak zorunda
olduklari sembolü haricinde isimleri
siniflariyla aynidir.
40YIKICI FONKSIYONLAR - 2
- Yikici fonksiyonlari da açikça tanimlama
zorunlulugu yoktur. - Yikici fonksiyonlar asiri yüklenemez yalnizca
bir tane olmak zorundadirlar. - Yikici bir fonksiyon parametre alamaz ve deger
döndüremez.
41NESNELERIN YARATILMASI VE YOK EDILMESI - 1
- Örnek
- // DEMO.CPP
- include ltiostreamgt
- include ltcstringgt
- using namespace std
- class Demo
-
- public
- Demo( const char nm )
- Demo()
- private
- char isim20
-
42NESNELERIN YARATILMASI VE YOK EDILMESI - 2
- DemoDemo( const char nm )
-
- strncpy( isim, nm, 20 )
- cout ltltisimltlt icin yapici fonksiyon
cagrimi\n -
- DemoDemo()
-
- cout ltltisimltlt icin yikici fonksiyon
cagrimi\n -
- void fonk()
- Demo yerelFonkNesnesi( yerelFonkNesnesi )
- static Demo staticNesne( statikNesne )
- cout ltlt fonk icinde ltlt endl
-
43NESNELERIN YARATILMASI VE YOK EDILMESI - 3
- Demo globalNesne( globalNesne )
- int main()
-
- Demo yerelMainNesnesi( yerelMainNesnesi )
- cout ltlt fonk cagrimindan once, main icinde\n
- fonk()
- cout ltlt fonk cagrimindan sonra, main icinde\n
- return 0
-
44NESNELERIN YARATILMASI VE YOK EDILMESI - 4
- Yerel nesneler için, yapici fonksiyon nesnenin
bildirimi yapildiginda, yikici fonksiyon ise
program bildiriminin yapildigi bloktan çikarken
çagrilir. - Global nesneler için, yapici fonksiyon program
baslarken, yikici fonksiyon ise program sona
ererken çagrilir. - Statik nesneler için, yapici fonksiyon nesnenin
bildiriminin yapildigi fonksiyona ilk giriste,
yikici fonksiyon ise program sona ererken
çagrilir.
45NESNELERIN YARATILMASI VE YOK EDILMESI - 4
- Program çiktilari
- globalNesne icin yapici fonksiyon cagrimi
- yerelMainNesnesi icin yapici fonksiyon cagrimi
- fonk cagrimindan once, main icinde
- yerelFonkNesnesi icin yapici fonksiyon cagrimi
- statikNesne icin yapici fonksiyon cagrimi
- fonk icinde
- yerelFonkNesnesi icin yikici fonksiyon cagrimi
- fonk cagrimindan sonra, main icinde
- yerelMainNesnesi icin yikici fonksiyon cagrimi
- statikNesne icin yikici fonksiyon cagrimi
- globalNesne icin yikici fonksiyon cagrimi
46ELEMAN SAHALARA ERISIM - 1
- Su anki haliyle, Tarih sinifi gun, ay ve yil
bilesenlerine erisim izni vermemektedir örnegin,
bir Tarih nesnesinin ay degerini okuyup
degistiremezsiniz. Bu sorunu gidermek için Tarih
sinifi asagidaki gibi degistirilebilir - class Tarih
-
- public
- Tarih( int mn, int dy, int yr )
- int aySoyle()
- int gunSoyle()
- int yilSoyle()
- int ayBelirle( int mn )
- int gunBelirle ( int dy )
- int yilBelirle( int yr )
- void goruntule()
- Tarih()
- private
- int ay, gun, yil
-
-
-
47ELEMAN SAHALARA ERISIM - 2
- Erisim fonksiyonlari söyle tanimlanabilir
- inline int TarihaySoyle()
- return ay
- inline int TarihgunSoyle()
- return gun
- inline int TarihyilSoyle()
- return yil
- void TarihayBelirle( int mn )
- ay max( 1, mn )
- ay min( ay, 12 )
-
48ELEMAN SAHALARA ERISIM - 3
- void TarihgunBelirle( int dy )
- static int uzunluk 0,31,28,31,30,31,30,
- 31,31,30,31,30,31
- gun max( 1, dy )
- gun min( gun, uzunlukay )
- void TarihyilBelirle( int yr )
- yil max( 1, yr )
49ELEMAN SAHALARA ERISIM - 4
- Asagidaki örnekte main fonksiyonu yeni
tanimladigimiz erisim fonksiyonlarini
kullanmaktadir - int main()
-
- int i
- Tarih sonTarih( 3, 10, 2005 )
- i sonTarih.aySoyle()
- sonTarih.ayBelirle( 4 )
- sonTarih.ayBelirle( sonTarih.aySoyle() 1 )
-
- return 0
-
50ELEMAN inline FONKSIYONLAR
- Soyle fonksiyonlari çok kisa olmalari nedeniyle
ve çagrimlarinin overhead içermemesi nedeniyle
inline olarak bildirildiler. - Eleman fonksiyonlarin gövdesini sinif bildirimi
içine yerlestirmeniz halinde inline anahtar
sözcügünü kullanmadan inline bildirimlerini
saglamis olursunuz - class Tarih
-
- public
- Tarih( int mn, int dy, int yr )
- int aySoyle() return ay
- int gunSoyle() return gun
- int yilSoyle() return yil
- // ...
-
51YAPICI FONKSIYONLARIN ASIRI YÜKLENMESI - 1
- Yeni eleman fonksiyonlarimizla, bir Tarih
nesnesinin nasil yaratilacagini yeniden
belirleyebiliriz - class Tarih
- public
- Tarih()
- Tarih( int mn, int dy, int yr )
- // ...
- TarihTarih() ay gun yil 1
- TarihTarih( int mn, int dy, int yr )
- ayBelirle( mn )
- gunBelirle( dy )
- yilBelirle( yr )
-
52YAPICI FONKSIYONLARIN ASIRI YÜKLENMESI - 1
- void main()
- Tarih dogum1
- Tarih dogum2( 12, 25, 1990 )
- dogum1.ayBelirle( 3 )
- dogum1.gunBelirle( 12 )
- dogum1.yilBelirle( 1985 )
53REFERANS DÖNDÜRME - 1
- Bazen, C programlari public eleman sahalar gibi
davranan eleman fonksiyon bildirimleri içerirler.
Bu fonksiyonlar, private eleman sahalara referans
döndürürler - // KOTU TEKNIK
- class Tarih
- public
- Tarih( int mn, int dy, int yr )
- int ay()
- Tarih()
- private
- int ay_elemani, gun_elemani, yil_elemani
- int Tarihay()
- ay_elemani max( 1, ay_elemani )
- ay_elemani min( ay_elemani, 12 )
- return ay_elemani
- // ...
54REFERANS DÖNDÜRME - 2
- void main()
- int i
- Tarih sonTarih( 3, 10, 2005 )
- i sonTarih.ay()
- sonTarih.ay() 4
- sonTarih.ay()
55const NESNELER VE ELEMAN FONKSIYONLAR - 1
- Degiskenleri oldugu gibi nesneleri de const
olarak bildirebilirsiniz - const Tarih dogum1( 7, 4, 1776 )
- Bu tür bildirimler nesnenin sabit oldugu ve
dolayisiyla hiçbir eleman sahasinin
degistirilemeyecegi anlamina gelir. - Bir degiskeni const olarak bildirdiginizde,
derleyici bu degiskenin degerini degistirebilecek
islemleri tespit edip uygun hata mesajlarini
üretebilir. Ancak, derleyici bir eleman
fonksiyonun nesnenin eleman sahalarini degistirip
degistiremeyecegini belirleyemez. Bu nedenle,
hiçbir (siradan) eleman fonksiyon sabit bir nesne
için çagrilamaz.
56const NESNELER VE ELEMAN FONKSIYONLAR - 2
- Eger bir eleman fonksiyon nesnenin hiçbir eleman
sahasini degistirmiyorsa const olarak
bildirilebilir ve bu sekilde sabit nesneler için
çagrilabilir. - const anahtar sözcügü sabit fonksiyonlarin hem
bildiriminde hem de tanimlanmasinda, parametre
listesinden sonra, yer alir. - Sabit eleman fonksiyonlar ne nesnelerinin eleman
sahalarini degistirebilir, ne de sabit olmayan
eleman fonksiyonlari çagirabilirler. - Eleman fonksiyonlarinizi mümkün oldugunca sabit
olarak bildirmelisiniz. Bu, sinifinizi
kullananlarin sabit nesneler bildirmelerine izin
verecektir.
57const NESNELER VE ELEMAN FONKSIYONLAR - 3
- class Tarih
-
- public
- Tarih( int mn, int dy, int yr )
- int aySoyle() const
- int gunSoyle() const
- int yilSoyle() const
- int ayBelirle( int mn )
- int gunBelirle ( int dy )
- int yilBelirle( int yr )
- void goruntule() const
- Tarih()
- private
- int ay, gun, yil
-
- inline int TarihaySoyle() const return ay
- // ...
- int i const Tarih dogum1( 7, 4, 1776 )
- i dogum1.yilSoyle() // Legal
58ELEMAN NESNELER - 1
- Bir sinif, nesneleri eleman olarak içerebilir. Bu
sekilde diger siniflari bilesen olarak kullanma
suretiyle yeni bir sinif tanimlama islemine
composition denir - class KisiBilgisi
-
- public
- // Public eleman fonksiyonlar...
- private
- char isim30
- char adres60
- Tarih dogumTarihi
-
- dogumTarihi nesnesi KisiBilgisi sinifindan bir
nesne yaratilincaya kadar yaratilmaz. -
59ELEMAN NESNELER - 2
- Bir eleman nesne için yapici fonksiyon çagrimi,
eleman nesneye ilk deger atamalarinin yapilmasini
gerektirir. Bunun icin yapilmasi gereken asagida
örneklenmistir - class KisiBilgisi
-
- public
- KisiBilgisi(char nm, char adr,
- int mn, int dy, int yr)
- // ...
- private
- // ...
-
-
60ELEMAN NESNELER - 3
- KisiBilgisiKisiBilgisi(char nm, char adr,
- int mn, int dy, int yr)
- dogumTarihi( mn, dy, yr )
-
- strncpy( name, nm, 30 )
- strncpy( adres, adr, 60 )
-
- Ilk once Tarih sinifinin yapici fonksiyonu
çagrilir böylelikle dogumTarihi nesnesi ilk
degerlerini KisiBilgisi sinifinin yapici
fonksiyonu çalistirilmadan alir.
61Örnek
- include ltiostreamgt
- using namespace std
- define SIZE 100
- // Stack sinifi
- class stack
- int stckSIZE
- int tos
- public
- stack() // constructor
- stack() // destructor
- void push(int i)
- int pop()
62. . .
- // Yapici Fonksiyon
- stackstack()
-
- tos 0
- cout ltlt "Stack Initialized\n"
-
- // Yikici Fonksiyon
- stackstack()
-
- cout ltlt "Stack Destroyed\n"
-
63. . .
- void stackpush(int i)
-
- if(tosSIZE)
- cout ltlt "Stack is full.\n"
- return
-
- stcktos i
- tos
-
64. . .
- int stackpop()
-
- if(tos0)
- cout ltlt "Stack underflow.\n"
- return 0
-
- tos--
- return stcktos
-
65. . .
- int main()
-
- stack a, b // iki stack nesnesi yaratildi
- a.push(1)
- b.push(2)
- a.push(3)
- b.push(4)
- cout ltlt a.pop() ltlt " "
- cout ltlt a.pop() ltlt " "
- cout ltlt b.pop() ltlt " "
- cout ltlt b.pop() ltlt "\n"
- return 0
-
66. . .
- Program Çiktisi
- Stack Initialized
- Stack Initialized
- 3 1 4 2
- Stack Destroyed
- Stack Destroyed
67ÖZET
- Programlama dillerinin evriminde itici güç
makineden uzaklasip probleme yaklasmak yönünde
olmustur. - Yüksek düzeyli dillerin evrimi, algoritmik
soyutlama ile baslamis, veri soyutlamasi ile
devam etmistir. - Iki soyutlama süreci, sinif yapisinda
birlesmistir. - Cnin siniflari, Cnin structureindan
türetilmistir. - Siniflar, eleman saha ve fonksiyonlar içerirler.
- Sinif elemanlarinin erisim düzeyleri, etiketlerle
belirlenir. - Nesneler, varsa eleman sahalarina ilk degerlerin
atanmasi için, yapici fonksiyonlar ile
yaratilirlar. - Nesnelerin geride biraktiklarinin temizlenmesi
yikici fonksiyonlarin isidir. - Sabit nesnelerin eleman sahalarinin degeri
degistirilemez ve bu sahalara yalnizca sabit
olduklari bildirilmis eleman fonksiyonlarla
erisilir. - Eleman nesnelerin yapici fonksiyonlari, elemani
olduklari nesnenin yapici fonksiyonunun
çagrilmasindan hemen önce çagrilir.
68Kaynaklar
- Booch, G. 1998. Object-Oriented Analysis and
Design. Addison-Wesley. - Programmers Guides, Microsoft Visual C.
- Wegner, P. 1976. IEEE Transactions on Computers,
December, 1207-1225.