SINIFLAR GIRIS - PowerPoint PPT Presentation

1 / 68
About This Presentation
Title:

SINIFLAR GIRIS

Description:

SINIFLAR G R Y lmaz K l aslan – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 69
Provided by: RichCa8
Category:

less

Transcript and Presenter's Notes

Title: SINIFLAR GIRIS


1
SINIFLARGIRIS
Yilmaz Kiliçaslan
2
Sunum 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

3
Programlama 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)

4
Siniflara 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

5
Siniflara 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

6
Siniflara 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

7
Siniflara 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.

8
Programlama Dillerinin Topolojisi - 1
The Topology of First- and Early
Second-Generation Programming Languages
9
Programlama Dillerinin Topolojisi - 2
The Topology of Late Second- and Early
Third-Generation Programming Languages
10
Programlama Dillerinin Topolojisi - 3
The Topology of Late Third-Generation Programming
Languages
11
Programlama Dillerinin Topolojisi - 4
The Topology of Small- to Moderate-Sized
Applications Using Object-Based and
Object-Oriented Programming Languages
12
YAPILAR - 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

13
YAPILAR - 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)

14
YAPILAR - 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.

15
YAPILAR - 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.

16
YAPILAR - 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.

17
SINIF 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.

18
SINIF 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

19
SINIF 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

20
FONKSIYONLARIN 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

21
FONKSIYONLARIN 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 )

22
FONKSIYONLARIN 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

23
FONKSIYONLARIN TANIMLANMASI - 4
  • // Yikici Fonksiyon
  • TarihTarih()
  • // Hicbir sey yapma

24
SINIFLARIN 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

25
SINIFLARIN 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)

26
SINIFLARIN 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.

27
SINIFIN 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.

28
ERISIM 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.

29
ERISIM 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.

30
ERISIM 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.

31
ELEMAN 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.

32
ELEMAN 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.

33
ELEMAN 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()

34
ELEMAN FONKSIYONLAR- 4
  • Bir eleman fonksiyon bir nesne referansi
    araciligiyla bile çagrilabilir
  • Tarih dogum1( 3, 12, 1985 )
  • Tarih digerTarih dogum1
  • digerTarih.goruntule()

35
YAPICI 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.

36
YAPICI 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.

37
YAPICI 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.

38
YAPICI 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.

39
YIKICI 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.

40
YIKICI 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.

41
NESNELERIN 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

42
NESNELERIN 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

43
NESNELERIN 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

44
NESNELERIN 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.

45
NESNELERIN 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

46
ELEMAN 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

47
ELEMAN 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 )

48
ELEMAN 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 )

49
ELEMAN 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

50
ELEMAN 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
  • // ...

51
YAPICI 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 )

52
YAPICI FONKSIYONLARIN ASIRI YÜKLENMESI - 1
  • void main()
  • Tarih dogum1
  • Tarih dogum2( 12, 25, 1990 )
  • dogum1.ayBelirle( 3 )
  • dogum1.gunBelirle( 12 )
  • dogum1.yilBelirle( 1985 )

53
REFERANS 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
  • // ...

54
REFERANS DÖNDÜRME - 2
  • void main()
  • int i
  • Tarih sonTarih( 3, 10, 2005 )
  • i sonTarih.ay()
  • sonTarih.ay() 4
  • sonTarih.ay()

55
const 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.

56
const 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.

57
const 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

58
ELEMAN 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.

59
ELEMAN 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
  • // ...

60
ELEMAN 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.

68
Kaynaklar
  • 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.
Write a Comment
User Comments (0)
About PowerShow.com