bas5e bol 03_turkce_tamami

72
1 2006 Pearson Education, Inc. All rights rese 3 Sınıflara ve Nesnelere Giriş

Upload: muratgulenc

Post on 23-Jun-2015

111 views

Category:

Software


1 download

DESCRIPTION

Sınıflara ve Nesnelere Giriş

TRANSCRIPT

Page 1: Bas5e bol 03_turkce_tamami

1

2006 Pearson Education, Inc. All rights reserved.

33

Sınıflara ve Nesnelere Giriş

Page 2: Bas5e bol 03_turkce_tamami

2

2006 Pearson Education, Inc. All rights reserved.

3.1 Giriş

3.2 Sınıflar, Nesneler, Üye fonksiyonları ve data üyeler

3.3 Bu bölümdeki örnekler

3.4 Üye fonksiyonlu bir sınıfın tanımlanması

3.5 Parametreli bir üye fonksiyonun tanımlanması

3.6 Data Üyeler, set Fonksiyonları and get Fonksiyonları

3.7 Yapılandırıcılarla nesnelere ilk değer verilmesi

3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek

3.9 Arabirimi uygulamadan ayırmak (Separating Interface from Implementation )

3.10 set fonksiyonuyla Data değerini değiştirmek

Page 3: Bas5e bol 03_turkce_tamami

3

2006 Pearson Education, Inc. All rights reserved.

3.1 Giriş

• Bölüm 2 deki programlarda tüm komutlar main fonksiyonunun içindedir. Genellikle böyle değildir.

• Tipik bir program main fonksiyon ve bir veya daha fazla sınıf’dan oluşur. Her sınıf data üyeler ve üye fonksiyonlardan oluşur

Page 4: Bas5e bol 03_turkce_tamami

4

2006 Pearson Education, Inc. All rights reserved.

3.2 Sınıflar, Nesneler, Üye fonksiyonlar ve Data üyeler

• Sınıflar:

• Örnek: Araba– Fonksiyonlar bir görevi olan mekanizmaları tarif eder.

Vites gibi• Karmaşık işler kullanıcıdan gizlenir. Ör. Kullanıcı arabayı

hareket ettiriken pedala basmak zorundadır ama arabanın çalışma mekanizmasını bilmesi gerekmez.

– Sınıflar kullanılmadan önce tanımlanmalıdır. Araba çalıştırılmadan önce imal edilmelidir.

– Bir sınıfdan bir çok araba nesnesi üretilebilir, mühendisin çizdiği bir plandan bir çok araba üretilebildiği gibi.

Page 5: Bas5e bol 03_turkce_tamami

5

2006 Pearson Education, Inc. All rights reserved.

3.2 Sınıflar, Nesneler, Üye fonksiyonlar ve Data üyeler

• Araba örneğinde,– Üye fonksiyonu çağırmak nesneye işlem yapması için

bir mesaj gönderir. Gaz pedalına basmak arabaya hareket etmesi için bir mesaj gönderir.

– Nesnelerin olduğu gibi arabaların da nitelikleri vardır. Renk ve gidilen mesafe gibi

Page 6: Bas5e bol 03_turkce_tamami

6

2006 Pearson Education, Inc. All rights reserved.

3.3 Bu bölümdeki örnekler

• Yedi basit örnek– GradeBook sınıfını oluşturacak örnekler

• İçinde kullanılanlar:– Üye fonksiyonlar

– Data üyeler

– Sınıfı kullananlar • Bu sınıfın nesnelerinin üye fonksiyonlarını çağıran diğer sınıflar

veya fonksiyonlar.

– Uygulama ile arabirimi ayırmak

– Data tanımlama• Bir nesnedeki data özel bir formatta ve arlıkta olmak zorundadır.

Page 7: Bas5e bol 03_turkce_tamami

7

2006 Pearson Education, Inc. All rights reserved.

3.4 Üye fonksiyonu olan bir sınıf tanımlama

• Sınıf tanımlama– Derleyiciye sınıfa ait hangi üye fonksiyonlar ve data üyeler

olduğunu bildirmektir.

– class anahtar kelimesinin ardından sınıf adı yazılır.

– Bir sınıfın gözdesi küme parantrezleri içinde kalır ({})• Data üyeleri ve üye fonksiyonları belirler

• public:

– Üye fonksiyon veya data üyesinin, diğer fonksiyonlar ve başka sınıflara ait üye fonksiyonlar tarafından erişilebilir olduğunu gösterir.

Page 8: Bas5e bol 03_turkce_tamami

8

2006 Pearson Education, Inc. All rights reserved.

1 // Fig. 3.1: fig03_01.cpp

2 // displayMessage üye fonksiyonu olan GradeBook sınıfının tanımlanması;

3 // Bir GradeBook nesnesi oluşturup displayMessage fonksiyonunun çağırılması.

4 #include <iostream>

5 using std::cout;

6 using std::endl;

7

8 // GradeBook sınıf tanımlaması

9 class GradeBook

10 {

11 public:

12 // GradeBook kullanıcısına ‘hoşgeldin’ mesajı yazan üye fonksiyonu

13 void mesajYaz()

14 {

15 cout << " Grade Book hosgeldiniz!" << endl;

16 } // displayMessage fonksiyonunun

17 }; // GradeBook sınıfının sonu

18

19 // main fonksiyonuyla program çalışmaya başlıyor

20 int main()

21 {

22 GradeBook notDefterim; // myGradeBook adında GradeBook nesnesi oluşturalım

23 notDefterim.displayMessage(); // nesnenin displayMessage fonksiyonunu çağırması

24 return 0;

25 } // main sonu

Welcome to the Grade Book!

GradeBook sınıfının tanımının başlangıcı

Sınıf gövdesinin başlangıcı

Sınıf gövdesinin sonu

public erişim kelimesi üyeleri herkese açık hale geitirir.

mesajYaz üye fonksiyonu hiç bir şey döndürmez.

GradeBook sınıfının üye fonksiyonunu kullanmak için nokta kullanılır.

Page 9: Bas5e bol 03_turkce_tamami

9

2006 Pearson Education, Inc. All rights reserved.

3.4 Üye fonksiyonu olan bir sınıf tanımlama

• Üye bir fonksiyonun tanımlanması• void displayMessage() • {

– Fonksiyonun döndürme tipi• Fonksiyon görevini tamamladığında döndüreceği değerin tipini

gösterir.• void fonksiyonun hiç bir şey döndürmediğini gösterir.

– Fonksiyon adı kurallara uygun yazılmalıdır. (Değişkenlere benzer)

– Fonksiyon adından sonra gelen parantezler, bunun bir fonksiyon olduğunu gösterir.

– Fonksiyonun gövdesi, o fonksiyonun görevini yapması için gereken komutları içerir.• {} küme parantezleri içine yazılır.

Page 10: Bas5e bol 03_turkce_tamami

10

2006 Pearson Education, Inc. All rights reserved.

Genel hatalar 3.2

Döndürme tipi void olan bir fonksiyonun bir değer döndürmesi derleyici hatası verir.

Page 11: Bas5e bol 03_turkce_tamami

11

2006 Pearson Education, Inc. All rights reserved.

Genel hatalar 3.3

Bir fonksiyonun içinde başka bir fonksiyon tanımlamak hatadır.

Page 12: Bas5e bol 03_turkce_tamami

12

2006 Pearson Education, Inc. All rights reserved.

3.4 Üye fonksiyonu olan bir sınıf tanımlama

• Sınıf kullanma– Programcının tanımladığı bir sınıf

• Nesne oluşturmak için kullanılabilir– O sınıfın tipinde değişkenler gibi tanımlanırlar

• kullanılarak C++ dili genişletilebilir.

– Nokta operatörü (.)• Nesnenin data üyelerine ve üye fonksiyonlarına erişmek için

kullanılır. • Örnek

– myGradeBook.displayMessage()• GradeBook nesnesi myGradeBook, displayMessage() üye fonksiyonunu çağırıyor.

Page 13: Bas5e bol 03_turkce_tamami

13

2006 Pearson Education, Inc. All rights reserved.

Fig.3.2 | UML sınıf diyagramı GradeBook sınıfının public displayMessage operasyonu var.

Page 14: Bas5e bol 03_turkce_tamami

14

2006 Pearson Education, Inc. All rights reserved.

3.4 Üye fonksiyonu olan bir sınıf tanımlama

• UML sınıf diyagramı– 3 bölmeli bir dikdörtgendir.

• En üst bölmeye sınıfın adı yazılır. • Orta bölmeye sınıfın nitelikleri yazılır. • En alt bölmeye sınıfın operasyonları yazılır.

– Operasyonun önündeki + işareti operasyonun public olduğunu gösterir.

Page 15: Bas5e bol 03_turkce_tamami

15

2006 Pearson Education, Inc. All rights reserved.

3.5 Parametreli bir üye fonksiyonun tanımlanması

• Fonksiyon parametreleri– Fonksiyonun görevini yapması için gereken bilgidir.

• Fonksiyonun argümanları– Her fonksiyon parametresine karşılık, çağırma sırasında

gönderilen değerlerdir. • Argüman değerleri fonksiyonun parametresine kopyalanır.

Page 16: Bas5e bol 03_turkce_tamami

16

2006 Pearson Education, Inc. All rights reserved.

3.5 Parametreli bir üye fonksiyonun tanımlanması

• string – Karakter dizisi demektir– String olarak tanımlanmış bir değişken aslında C++

kütüphanesinin string sınıfının bir nesnesidir. std::string• <string> öncü dosya olarak tanımlanmıştır.

•getline kütüphane fonksiyonu – input olarak gelen bilgileri return tuşuna basılana kadar

alır. – Örneğin

• getline( cin, nameOfCourse );– Standart girişten bir satır okur ve okuduğu bilgiyi, bir

string nesnesi olan nameOfCourse a yazar.

Page 17: Bas5e bol 03_turkce_tamami

17

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_03.cpp

(1 of 2)

1 // Fig. 3.3: fig03_03.cpp

2

3

4 #include <iostream>

5 using std::cout;

6 using std::cin;

7 using std::endl;

8

9 #include <string> // C++ standard string sınıfı kullanılıyor

10 using std::string;

11 using std::getline;

12

13 // GradeBook sınıfı

14 class GradeBook

15 {

16 public:

17 // GradeBook kullanıcısına hosgeldin mesajı yazan fonksiyon

18 void mesajYaz( string dersAdi )

19 {

20 cout << dersAdi << " dersine hosgeldiniz !\n"<< endl;

21

22 } // fonksiyonun sonu

23 }; // GradeBook sınıfının sonu

24

25

26 int main()

27 {

28 string ders; // dersin adını tutan değişken

29 GradeBook notDefterim; // notDefterim adında bir GradeBook nesnesi oluşturmak

30

string sınıfının dahil edilmesi

Üye fonksiyonun parametresi

Fonksiyon parametresinin değişken olarak kullanılması

Page 18: Bas5e bol 03_turkce_tamami

18

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_03.cpp

(2 of 2)

31 // dersin adını kullanıcının girmesi için mesaj

32 cout << "lütfen dersin adını giriniz :" << endl;

33 getline( cin, ders ); // dersin adının okunması

34 cout << endl;

35

36// mesajYaz ın çağırılması ve ders değişkeninin argüman olarak gönderilmesi

37

38 notDefterim.mesajYaz( ders );

39 return 0;

40 } lütfen dersin adını giriniz : Bilm 219 C++ Programlama Bilm 219 C++ Programlama dersine hosgeldiniz !

Üye fonksiyona bir argüman göndermek

Page 19: Bas5e bol 03_turkce_tamami

19

2006 Pearson Education, Inc. All rights reserved.

3.5 Parametreli bir üye fonksiyonun tanımlanması

• Parametre Listesi– Fonksiyon tarafından istenen bilgi

– Fonksiyon adından hemen sonra gelen parantezler içine yazılır.

– Fonksiyonun herhangi bir sayıda parametresi olabilir. • Parametreler arasına virgül konur.

– Fonksiyon çağırılırken argümanların sayı, sıra ve tipleri fonksiyonun tanımındaki sayı, sıra ve tiple aynı olmalıdır.

– UML ile modellenir.• Üye fonksiyonun parantezleri içinde; parametre adı, iki

nokta üstüste ve parametrenin tipi bulunur.

Page 20: Bas5e bol 03_turkce_tamami

20

2006 Pearson Education, Inc. All rights reserved.

Genel hatalar 3.4

Fonksiyon tanımındaki parantez kapandıktan hemen sonra noktalı virgül konması yazılım hatası verir.

Page 21: Bas5e bol 03_turkce_tamami

21

2006 Pearson Education, Inc. All rights reserved.

Genel hatalar 3.5

Fonksiyon parametresini fonksiyonun içinde tekrar değişken olarak tanımlamak derleyici hatası verir.

Page 22: Bas5e bol 03_turkce_tamami

22

2006 Pearson Education, Inc. All rights reserved.

İyi programcı uygulaması 3.1

Belirsizliği ortadan kaldırmak için, fonksiyonu tanımlarken kullandığınız parametre adlarının aynısını fonksiyonu çağırırken kullanmayın .

Page 23: Bas5e bol 03_turkce_tamami

23

2006 Pearson Education, Inc. All rights reserved.

İyi programcı uygulaması 3.2

Fonksiyona ve değişkene görevine uygun isim verilirse, programı sonradan anlamak kolay olur (Programın okunabilirliği artar.) Aynı zamanda fazla açıklama satırı koymak gerekmez.

Page 24: Bas5e bol 03_turkce_tamami

24

2006 Pearson Education, Inc. All rights reserved.

Fig.3.4 displayMessage() fonksiyonu string tipinde ve courseName adında bir parametre alıyor.

Page 25: Bas5e bol 03_turkce_tamami

25

2006 Pearson Education, Inc. All rights reserved.

3.6 Data üyeler, set Fonksiyonları ve get Fonksiyonları

• Yerel değişken– Değişkenler fonksiyonun gövdesinde tanımlanır

• Fonksiyonun dışında kullanılmazlar.

– Bir fonksiyon bittiğinde• Yerel değişkenlerin değerleri yok olur.

• Nitelikler (attributes)– Nesnenin yaşamı boyunca var olurlar.

– Data üye olarak gösterirler• Sınıf tanımındaki değişkenler

– Sınıfın her nesnesi niteliklerin kendi kopyasını tutar.

Page 26: Bas5e bol 03_turkce_tamami

26

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_05.cpp

(1 of 3)

1 // Fig. 3.5: fig03_05.cpp

2 // courseName’i data üye olarak tutan GradeBook

3 // sınıfının set ve get fonksiyonları

4 // set ve get fonksiyonları data üyeyi değiştirmek ve okumak için kullanılır.

5 #include <iostream>

6 using std::cout;

7 using std::cin;

8 using std::endl;

9

10 #include <string> // C++ standard string sınıfı

11 using std::string;

12 using std::getline;

13

14

15 class GradeBook

16 {

17 public:

18 // dersin adına değer atayan fonksiyon

19 void setDersAdi( string isim)

20 {

21 dersAdi = isim ;

22 }

23

24 // dersin adını döndüren fonksiyon

25 string getDersAdi()

26 {

27 return dersAdi;

28 }

29

set fonksiyonu private data ‘ya değer atar

get fonksiyonu private datayı döndürür.

Page 27: Bas5e bol 03_turkce_tamami

27

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_05.cpp

(2 of 3)

30

31 void mesajYaz()

32 {

33 // Dersin adının gerektiği bölümde getdersAdi çağırılır

34

35 cout << getDersAdi() << " dersine hosgeldiniz !\n" << endl;

36

37 }

38 private:

39 string dersAdi;

40 };

41

42

43 int main()

44 {

45 string ders; // ders adını kaydetmek için karakter dizisi

46 GradeBook notDefterim; // notDefterim adında bir GradeBook nesnesi oluşturur

47

48 // ders’in ilk değerini gösterir

49 cout << "Dersin ilk ismi : " << notDefterim.getDersAdi()

50 << endl;

51

Set ve get fonksiyonları sınıfın içinde bile kullanılır

Sınıf tanımlasının dışından private data’ya erişim

private üyelere sadece sınıfın üye fonksiyonları tarafından erişilebilir.

Page 28: Bas5e bol 03_turkce_tamami

28

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_05.cpp

(3 of 3)

52 // ders adının kullanıcıdan alınması

53 cout << "\n Lutfen ders adini giriniz:" << endl;

54 getline( cin, ders );

55 notDefterim.setDersAdi( ders ); //ders adının değiştirilmesi

56

57 cout << endl;

58 notDefterim.mesajYaz(); // yeni ders adının gösterilmesi

59 return 0;

60 } // main’in sonu Dersin ilk ismi : Lutfen ders adini giriniz: Bilm 219 C++ Programlama Bilm 219 C++ Programlama dersine hosgeldiniz !

private data’nın sınıfın dışında değiştirilmesi

Page 29: Bas5e bol 03_turkce_tamami

29

2006 Pearson Education, Inc. All rights reserved.

İyi programlama örneği 3.3

Üye fonksiyonların tanımlamaları arasına birer boş satır koyunuz. Bu programın okunabilirliğini arttırır.

Page 30: Bas5e bol 03_turkce_tamami

30

2006 Pearson Education, Inc. All rights reserved.

3.6 Data üyeler, set Fonksiyonları ve get Fonksiyonları

•private – Kendisinden sonra gelen data üyeye sadece o sınıfın üye

fonksiyonlarının erişmesini sağlar.

– Sınıf üyelerinin varsayılan erişimi private’dır

– Data gizleme

• Fonksiyonun değer döndürmesi– Bir fonksiyonun void’ den başka bir return tipi varsa

• Kendisini çağıran fonksiyona bir değer döndürür.

Page 31: Bas5e bol 03_turkce_tamami

31

2006 Pearson Education, Inc. All rights reserved.

Yazılım mühendisliği ipucu 3.1

Genel kural olarak, data üyeler private ve üye fonksiyonlar public tanımlanır. (Eğer sadece üye fonksiyonların çağırması gereken fonksiyonlar olursa, bunlar private, tanımlanır.)

Page 32: Bas5e bol 03_turkce_tamami

32

2006 Pearson Education, Inc. All rights reserved.

Genel hatalar 3.6

Bir fonksiyon üyesi olmadığı bir sınıfın private üyesine ulaşmaya çalışırsa derleme hatası olur.

Page 33: Bas5e bol 03_turkce_tamami

33

2006 Pearson Education, Inc. All rights reserved.

İyi programlama örneği 3.5

Bir sınıfı tanımlarken önce private üyeleri listeleyip private belirteci (varsayılan olmasına rağmen) kullanılırsa, programın açıklığı artar.

Page 34: Bas5e bol 03_turkce_tamami

34

2006 Pearson Education, Inc. All rights reserved.

Genel Hatalar 3.7

Değer döndürmesi gereken fonksiyonun değer döndürmemesi derleme hatasına sebep olur.

Page 35: Bas5e bol 03_turkce_tamami

35

2006 Pearson Education, Inc. All rights reserved.

3.6 Data üyeler, set Fonksiyonları ve get Fonksiyonları

• set ve get fonksiyonları– public üye fonksiyonlardır. private data üyelere

erişmeyi sağlarlar.

– set fonksiyonları bazen değiştirici olarak ve get fonksiyonları da bazen erişim fonksiyonu olarak adlandırılır.

– Programcının yazdığı sınıfın private data üyesine erişim kontrolunu sağlamasına yardım eder.

– Aynı sınıfın diğer üye fonksiyonları tarafından da çağırılabilirler.

Page 36: Bas5e bol 03_turkce_tamami

36

2006 Pearson Education, Inc. All rights reserved.

3.6 Data üyeler, set Fonksiyonları ve get Fonksiyonları

• UML diyagramı– Bir operasyonun döndürdüğü değerin tipini gösterir

• Operasyon adından sonra gelen parantezlerden sonra iki nokta üsüste ve tip yazılır.

– private üyeler için – işareti kullanılır

Page 37: Bas5e bol 03_turkce_tamami

37

2006 Pearson Education, Inc. All rights reserved.

3.7 Yapılandırıcılarla nesnelere ilk değer verilmesi

• Yapılandırıcılar– Yapılandırıcılar, bir nesne oluşturulduğunda bu nesnenin

datalarına ilk değerlerini veren fonksiyonlardır.• Nesne oluşturulduktan hemen sonra çağrılırlar.

• Yapılandırıcı ismi , sınıf ismi ile aynı olmalıdır.

• Geriye hiçbir veri döndürmezler. (void de olamazlar)

– Varsayılan (nesne oluşturulduğunda otomatik olarak çağrılan) yapılandırıcının herhangi bir parametresi yoktur.

– Programcı tarafından sınıf için herhangi bir yapılandırıcı oluşturulmamış olsa bile , derleyici bu sınıfa otomatik olarak bir yapılandırıcı sağlayacaktır.

Page 38: Bas5e bol 03_turkce_tamami

38

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_07.cpp

(1 of 3)

1 // Fig. 3.7: fig03_07.cpp

2 // GradeBook sınıfından birden fazla nesnenin oluşturulması ve her

3 // GradeBook nesnesi üretildiğinde bu nesnelerin ders adı değerinin

4 // yapılandırıcılar vasıtasıyla atanması.

5 #include <iostream>

6 using std::cout;

7 using std::endl;

8

9 #include <string> // program C++ standard string sınıfını kullanır

10 using std::string;

11

12 // GradeBook sınıf tanımlaması.

13 class GradeBook

14 {

15 public: 16 // Yapılandırıcı, parametre olarak sağlanan karakter dizisi değeri ile // dersAdi ‘nın ilk değerini atar. 17 GradeBook( string isim )

18 {

19 setDersAdi ( isim ); // dersAdi data üyesininin set fonksiyonunu çağır.

20 } // GradeBook yapılandırıcısı sonu

21

22 // ders adını atayan fonksiyon

23 void setDersAdi( string isim )

24 {

25 dersAdi=isim; // ders adını nesne içerisinde sakla.

26 } // setDersAdi fonksiyonunun sonu

27

Yapılandırıcının adı sınıfın adı ile aynıdır ve hiçbir dönüş tipi

yoktur.

Bu sınıfın data üyesi olan dersAdi degiskenine ilk

değerini ata.

Page 39: Bas5e bol 03_turkce_tamami

39

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_07.cpp

(2 of 3)

28 // dersin adını döndüren fonksiyon

29 string getDersAdi()

30 {

31 return dersAdi; // nesnenin dersAdi ‘nı döndür

32 } // getDersAdi fonksiyonunun sonu

33

34 // GradeBook kullanıcısına bir hoşgeldin mesajı göster.

35 void mesajYaz()

36 {

37 // dersAdi değerini almak için getDersAdi fonksiyonunu çağır.

38 cout << getDersAdi() << "dersine hoşgeldiniz !\n" << endl;

39

40 } // mesajYaz fonksiyonunun sonu

41 private:

42 string dersAdi; // GradeBook sınıfı için ders adı değişkeni.

43 }; // GradeBook sınıfının sonu

44

Page 40: Bas5e bol 03_turkce_tamami

40

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_07.cpp

(3 of 3)

45 // main fonksiyonu programın çalışmasını bağlatır.

46 int main()

47 {

48 // iki GradeBook nesnesi oluştur.

49 GradeBook defter1( "BILM219 C++ Programlama" );

50 GradeBook defter2( "BILM101 C Programlama" );

51

52 // GradeBook nesnelerinin derAdi degerlerini görüntüle.

53 cout << “defter1 " << defter1.getDersAdi() << ” dersi içindir.”

54 << "\ndefter2 ” << defter2.getDersAdi() <<" dersi içindir.”

55 << endl;

56 return 0; // başarılı bir bitiş olduğunu belirt.

57 } // main fonksiyonunun sonu defter1 BILM219 C++ Programlama dersi içindir. defter2 BILM101 C Programlama dersi içindir.

Nesneler oluşturulduğu anda yapılandırıcıları çağrılır.

Page 41: Bas5e bol 03_turkce_tamami

41

2006 Pearson Education, Inc. All rights reserved.

Hataları engelleme 3.2

Sınıfınızdaki data üyelerine ilk değer atama ihtiyacınız olmasa bile, sınıfınızdan üretilen

her nesnenin data üyelerinin anlamlı değerlere sahip olduğundan emin olmak için sınıfınıza bir

yapılandırıcı sağlayın.

Page 42: Bas5e bol 03_turkce_tamami

42

2006 Pearson Education, Inc. All rights reserved.

Yazılım Mühendisliği Görüşü 3.5

Data üyelerinin ilk değerleri yapılandırıcı vasıtasıyla ya da nesne üretildikten sonra set fonksiyonları ile atanabilir. Ancak, sınıftan üretilen nesneleri kullanan programın nesnenin üye fonksiyonlarını çağırmasından önce bu nesnenin ilk değerlenin hepsinin düzgün bir biçimde atandığından emin olmak iyi bir yazılım mühendisliği uygulamasıdır.Nesnenin ilk değerlerinin düzgün bir şekilde atandığından emin olmak için , ilk değerlerin atanması işlemi bu nesneyi kullanan programa(istemci uygulama) bırakılmamalı , sınıf içerisinde yapılandırıcılar vasıtasıyla sağlanmalıdır..

Page 43: Bas5e bol 03_turkce_tamami

43

2006 Pearson Education, Inc. All rights reserved.

3.7 Yapılandırıcılar ile İlk değer atama (Devam.)

• UML sınıf diyagramında yapılandırıcılar– Üye fonksiyonları ile beraber üçüncü bölmede bulunur.

– Bir yapılandırıcıyı sınıfın diğer üye fonksiyonlardan ayırabilmek için;

• UML, yapılandırıcının adından önce <<constructor>> ibaresini yerleştirir.

• - <<constructor>> GradeBook()

– Genellikle üçüncü bölmedeki diğer fonksiyonlardan önce yerleştirilir.

Page 44: Bas5e bol 03_turkce_tamami

44

2006 Pearson Education, Inc. All rights reserved.

Fig.3.8 | GradeBook sınıfının String tipindeki name parametresine sahip yapılandırıcısını belirten UML sınıf diyagramı.

Page 45: Bas5e bol 03_turkce_tamami

45

2006 Pearson Education, Inc. All rights reserved.

3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek •.cpp dosyası kaynak kodu dosyası olarak bilinir.• Header dosyaları

– Genellikle .h dosya uzantısına sahiptirler.– İçerisinde sınıf tanımlamaları bulunan dosyaları ayırır.

• Sınıflar başka yerlerde kullanıldığında, derleyicinin bunları tanımasını sağlar.

• Bir .cpp dosyası içerisinde tanımlanan bir sınıf sadece o dosya içerisinde kullanılabilir, fakat .h dosyaları içerisindeki sınıflar bu .h dosyasını ekleyen (#include “benimSinifim.h”) her dosyada kullanılabilir.

• Sürücü dosyaları– Sınıfları (ya da yazılımları) test etmek için kullanılan

programlardır.– main fonksiyonları vardır , dolayısıyla çalıştırılabilirler.

Page 46: Bas5e bol 03_turkce_tamami

46

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_09.cpp

(1 of 2)

1 // Fig. 3.9: GradeBook.h

2 // GradeBook sınıf tanımlaması (main fonksiyonu içeren dosyanın dışında) 3 #include <iostream>

4 using std::cout;

5 using std::endl;

6

7 #include <string> // GradeBook sınıfı C++ standard string sınıfını kullanır.

8 using std::string;

9

10 // GradeBook sınıf tanımlaması

11 class GradeBook

12 {

13 public: 14 // parametre olarak sağlanan bir karakter dizisi ile ders adini atayan yapılandırıcı. 15 GradeBook( string isim )

16 {

17 setDersAdi( isim ); // ders adini atayan fonksiyonu cagir.

18 } // GradeBook yapılandırıcısının sonu

19

20 // ders adına değer atayan fonksiyon.

21 void setDersAdi( string isim )

22 {

23 dersAdi = isim; // ders adını nesne içerisine sakla

24 } // setDersAdi fonksiyonunun sonu

25

Sınıfın tanımlaması header dosyasının içinde.

Page 47: Bas5e bol 03_turkce_tamami

47

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_09.cpp

(2 of 2)

26 // ders adını döndüren fonksiyon

27 string getDersAdi()

28 {

29 return dersAdi; // nesnenin dersAdi data üyesinin değerini döndür.

30 } // getDersAdi fonksiyonunun sonu

31

32 // GradeBook kullanıcısına bir hoşgeldin mesajı yaz.

33 void mesajYaz()

34 {

35 // ders adını almak için getDersAdi fonksiyonunu çağır.

36 cout << getDersAdi() << ” dersine hoşgeldiniz !” << endl;

37

38 } // mesajYaz fonksiyonunun sonu

39 private:

40 string dersAdi; // GradeBook sınıfının ders adı değişkeni.

41 }; // GradeBook sınıfının sonu

Page 48: Bas5e bol 03_turkce_tamami

48

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_10.cpp

(1 of 1)

1 // Fig. 3.10: fig03_10.cpp 2 // main fonksiyonunda kullanabilmek için GradeBook.h dosyasından GradeBook sınıfını ekler. 3 #include <iostream>

4 using std::cout;

5 using std::endl;

6

7 #include "GradeBook.h" // GradeBook sınıfının tanımlamasını ekle.

8

9 // main fonksiyonu programın çalışmasını başlatır.

10 int main()

11 {

12 // iki GradeBook nesnesi oluştur.

13 GradeBook defter1( "BILM219 C++ Programlama" );

14 GradeBook defter2( "BILM101 C Programlama" );

15

16 // GradeBook nesnelerinin ders adlarını yaz.

17 cout << "defter1 " << defter1.getDersAdi() << “ dersi için oluşturuldu”

18 << "\ndefter2 " << defter2.getDersAdi() << “ dersi için oluşturuldu”

19 << endl;

20 return 0; // başarılı bir bitiş olduğunu belirt.

21 } // main fonksiyonu sonu defter1 BILM219 C++ Programlama dersi için oluşturuldu defter2 BILM101 C Programlama dersi için oluşturuldu

Header dosyasını ekleyerek, içerisindeki sınıf tanımlamasını bu dosyaya

kopyalamış oluruz.

Page 49: Bas5e bol 03_turkce_tamami

49

2006 Pearson Education, Inc. All rights reserved.

3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek (Devam.)

• #include önişlemci komutu– Header(öncü) dosyalarını eklemek için kullanılır.

• C++ önişlemcisiden belirtilen dosya içeriğini bu komutun kullanıldığı yere kopyalamasını ister.

– Çift Tırnak (“) işareti kullanıcı-tanımlı header(.h) dosyalarını belirtir.

• Ön işlemci bu dosyayı bulmak için öncelikle programın bulunduğu dizine bakar.

– Eğer .h dosyası bu dizinde değilse, C++ Standart kütüphanesinin dizinine bakar.– #include “BenimDosyam.h”

– Küçük-Büyük (< >) işaretleri C++ Standart kütüphanelerini belirtir.

• Önişlemci sadece C++ Standart kütüphane dizinine bakar.• - #include <iostream>

Page 50: Bas5e bol 03_turkce_tamami

50

2006 Pearson Education, Inc. All rights reserved.

3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek (Devam.)

• Nesnelerin oluşturulması– Derleyici nesnenin boyutunu (hafıza içerisinde kaplayacağı

alanı) bilmek zorundadır.• C++ nesneleri tipik olarak sadece data üyelerini içerirler.

• Derleyici, sınıfın üye fonksiyonlarının bir kopyasını oluşturur.

– Bu kopya sınıfın tüm nesneleri arasında paylaştırılır.

Page 51: Bas5e bol 03_turkce_tamami

51

2006 Pearson Education, Inc. All rights reserved.

Hataları Engelleme 3.3

Önişlemcinin header dosyalarını bulmasını garantiye almak için, kullanıcı-tanımlı header dosyaları #include önişlemci komutunda tırnak içinde (örn: "GradeBook.h"), ve C++ Standart Kütüphane dosyaları ise <> işaretleri içinde(örn: <iostream> ) belirtilmelidir.

Page 52: Bas5e bol 03_turkce_tamami

52

2006 Pearson Education, Inc. All rights reserved.

3.9 Arabirimi Uygulamadan Ayırmak

• Arabirim– Sınıfı kullanacak programın (istemci) bu sınıfın hangi işlemlerini

kullanacağını ve bu işlemler için nasıl istekte bulunacağını tanımlar.• Fakat sınıfın bu işlemleri nasıl yerine getirdiğini belirtmez.

• Arabirim, sadece üye fonksiyonlarının adlarını, dönüş tiplerini ve parametre tiplerini listeleyen sınıf tanımlamasıdır.

– Fonksiyon prototiplerini içerir.

– Bir sınıfın arabirimi , sınıfın public üye fonksiyonlarını içerir. (işlemler)

• Arabirimi uygulamadan ayırmak– Bazen uygulamada bazı üye fonksiyonların içeriği değişebilir (.cpp

dosyasında), ancak, arabirim (.h dosyası) aynı kaldığı sürece (prototipler değişmedikçe), istemci uygulamasının değiştirilmesine gerek yoktur.

– int topla(int ,int ) ; //fonksiyon prototipi

– int topla(int a,int b) { return a+b;}

– int topla(int sayi1,int sayi2){ int c=sayi1+sayi2; return c;}

Page 53: Bas5e bol 03_turkce_tamami

53

2006 Pearson Education, Inc. All rights reserved.

3.9 Arabirimi Uygulamadan Ayırmak(Devam.)

• Arabirimi Uygulamadan Ayırmak (Devam.)– Üye fonksiyonların yapacağı işlemleri, sınıf

tanımlamasının olduğu (.h) dosyasından ayrı bir kaynak kodu dosyasında(.cpp) tanımlayın.

• Bir sınıfın kaynak kodu dosyasında, işlemlerini tanımlayacağınız üye fonksiyonu belirlemek için kapsam çözünürlük operatörünü( :: ) kullanın.

• <sınıf Adı> :: <üye fonksiyonu>• Sınıfınızı kullanacak olan programın sınıftaki üye

fonksiyonlarının içerisindeki işlemlerin detayını bilmesine ihtiyaç yoktur. Bunun için, .h dosyalarındaki sınıf tanımlamalarında sadece üye fonksiyonların prototipleri bulunur. Bu prototipler sınıfın umumi(public) arabirimini oluştururlar.

Page 54: Bas5e bol 03_turkce_tamami

54

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_11.cpp

(1 of 1)

1 // Fig. 3.11: GradeBook.h

2 // GradeBook sınıf tanımlaması. Bu dosya GradeBook sınıfının public arabirimini

3 // temsil eder.Bu dosyada sadece GradeBook sınıfının üye fonksiyonlarının

4 // prototipleri bulunur, fonksyionların uygulaması GradeBook.cpp içerisindedir.

5 #include <string> // GradeBook sınıfı C++ standard string sınıfını kullanır.

6 using std::string;

7

8 // GradeBook sınıf tanımlaması

9 class GradeBook

10 {

11 public: // Üye Fonksiyonlarının Prototipleri;

12 GradeBook( string ); // dersAdi değişkenine ilk değerini veren yapılandırıcı.

13 void setDersAdi( string ); // ders adını atayan fonksiyon.

14 string getDersAdi(); // ders adını döndüren fonksiyon

15 void mesajYaz(); // hoşgeldin mesajı görüntüleyen fonksiyon

16 private:

17 string dersAdi; // GradeBook sınıfı için dersAdi değişkeni

18 }; // GradeBook sınıfının sonu

Arabirim data üyeleri ve üye fonksiyonlarını içerir.

Page 55: Bas5e bol 03_turkce_tamami

55

2006 Pearson Education, Inc. All rights reserved.

Genel Programlama Hataları 3.8

Fonksiyon prototiplerinin sonlarına noktalı virgül( ; ) işaretinin konulmaması bir yazım hatasıdır.

Page 56: Bas5e bol 03_turkce_tamami

56

2006 Pearson Education, Inc. All rights reserved.

İyi programlama örneği 3.7

Fonksiyon prototiplerinde parametre isimlerinin yazılması mecburi olmamasına rağmen (derleyici açısından yazılıp yazılmamasını bir önemi yoktur) , birçok programcı dökümantasyon amacıyla parametre isimlerini yazarlar.

Page 57: Bas5e bol 03_turkce_tamami

57

2006 Pearson Education, Inc. All rights reserved.

Hataları Engelleme 3.4

Fonksiyon prototiplerinde parametre isimlerini yazmak istiyorsanız , yanlış anlamalara veya kafa karışıklığına neden olmamak için ilk önce kaynak kodu dosyasında fonksiyonu kodlayın , daha sonra fonksiyonun ilk satırını kopyalayarak , sınıf arabiriminin tanımlandığı yerdeki public bölümüne yapıştırın ve sonuna (;) koyun.

Böylece, fonksiyon prototipi ile fonksiyonun kendisi arasında herhangi bir parametre ismi farklılığı oluşmayacaktır.

Page 58: Bas5e bol 03_turkce_tamami

58

2006 Pearson Education, Inc. All rights reserved.

Genel Programlama Hataları 3.9

Bir sınıfın üye fonksiyonlarını , sınıfın tanımlandığı yerden başka bir yerde tanımlarken kapsam çözünürlük operatörünü (::) kullanmamak derleme hatasına neden olur.

Page 59: Bas5e bol 03_turkce_tamami

59

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_12.cpp

(1 of 2)

1 // Fig. 3.12: GradeBook.cpp

2 // GradeBook üye fonksiyon tanımlamaları. Bu dosya GradeBook.h dosyasında

3 // prototipleri bulunan fonksiyonların uygulamalarını içerir.

4 #include <iostream>

5 using std::cout;

6 using std::endl;

7

8 #include "GradeBook.h" // GradeBook sınıf tanımlamasını dahil et.

9

10 // parametre olarak verilen string ile dersAdini atayan yapılandırıcı

11 GradeBook::GradeBook( string isim )

12 {

13 setDersAdi( isim ); // dersAdi’nı atamak için set fonksiyonunu çağır.

14 } // GradeBook yapılandırıcısının sonu

15

16 // ders adına değer atayan fonksiyon

17 void GradeBook::setDersAdi( string isim )

18 {

19 dersAdi = isim; // nesne içerisinde ders adını sakla.

20 } // setDersAdi fonksiyonunun sonu

21

Kapsam çözünürlük operatörü( :: ) sağında bulunan üye fonksiyonunun , solundaki sınıfa ait olduğunu belirtir.

<Sınıf> :: <Üye fonksiyon>

GradeBook uygulaması ayrı bir kaynak kodu dosyasındadır.

GradeBook sınıfına ulaşabilmek için , header dosyasını dahil et.

Page 60: Bas5e bol 03_turkce_tamami

60

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_12.cpp

(2 of 2)

22 // ders adını döndüren fonksiyon

23 string GradeBook::getDersAdi()

24 {

25 return dersAdi; // nesnenin ders adını döndür.

26 } // getDersAdi() fonksiyonunun sonu

27

28 // GradeBook kullanıcı için bir hoşgeldin mesajı yaz.

29 void GradeBook::mesajYaz()

30 {

31 // ders adını almak için getDersAdı fonksiyonunu çağır.

32 cout << getDersAdi() << " dersine hoşgeldiniz ” << endl;

33

34 } // mesajYaz fonksiyonunun sonu

Page 61: Bas5e bol 03_turkce_tamami

61

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_13.cpp

(1 of 1)

1 // Fig. 3.13: fig03_13.cpp

2 // Arabirim ve uygulamanın ayrılmasından sonra GradeBook sınıfının

3 // kullanılmasının gösterilmesi.

4 #include <iostream>

5 using std::cout;

6 using std::endl;

7

8 #include "GradeBook.h" // GradeBook sınıf tanımlamasını dahil et.

9

10 // programın çalışmasını başlatan main fonksiyonu

11 int main()

12 {

13 // iki GradeBook nesnesi oluştur

14 GradeBook defter1( "BILM219 C++ Programlama" );

15 GradeBook defter2( "BILM101 C Programlama" );

16

17 // her GradeBook nesnesinin ilk değerlerini göster.

18 cout << "defter1 ‘in ders Adi : " << defter1.getDersAdi()

19 << "\ndefter2 ‘nin ders Adi : " << defter2.getDersAdi()

20 << endl;

21 return 0; // başarılı bir bitiş olduğunu belirt

22 } // main fonksiyonunun sonu

defter1 ‘in ders Adi : BILM219 C++ Programlama defter2 ‘nin ders Adi : BILM101 C Programlama

Page 62: Bas5e bol 03_turkce_tamami

62

2006 Pearson Education, Inc. All rights reserved.

3.9 Arabirimi Uygulamadan Ayırmak (Devam)

• Derleme ve Bağlantı (link) işlemi– Kaynak-Kodu dosyası sınıfın nesne kodunu oluşturmak için

derlenir. (Kaynak kodu dosyası header dosyasını dahil etmelidir. (#include)

• Sınıf uygulama programcısı istemciye nesne kodunu ve header dosyasını sağlamalıdır.

– İstemci, header dosyasını kendi koduna dahil etmelidir (#include)

• Böylece, derleyici main fonksiyonunun sınıfın nesnelerini doğru biçimde oluşturup kullandığından emin olabilir.

– Çalıştırılabilir(Executable) uygulamalar oluşturma• İstemci kodundan oluşturulan nesne kodu , sınıf için oluşturulan

nesne kodu ve uygulamada kullanılan C++ Standart Kütüphanelerinin nesne kodları ile birleştirilmelidir.

• Çalıştırılabilir uygulama = İstemci nesne kodu + sınıf nesne kodu + Standart Kütüphane nesne kodu

Page 63: Bas5e bol 03_turkce_tamami

63

2006 Pearson Education, Inc. All rights reserved.

Fig.3.14 | Çalıştırılabilir bir uygulama üretmek için gereken derleme ve bağlantı işlemleri.

Page 64: Bas5e bol 03_turkce_tamami

64

2006 Pearson Education, Inc. All rights reserved.

3.10 set fonksiyonuyla Data değerini değiştirmek

• set fonksiyonları ,verileri(data) doğrulayabilir.– Doğruluk kontrolünü yapar. – Nesnelerin her zaman tutarlı datalara sahip olmasını sağlar.

• Data üyeleri her zaman doğru değerlere sahip olmalıdır.

– Data üyelerine geçersiz değerler atanmaya çalışıldığında , bunu belirtmek için geriye değer döndürebilirler.

– int setDakika(int d){

– if (d>59) return -1; //geçersiz değer girildiğini belirt.

– dakika=d;– return 0; //geçerli değer girildiğini belirt.– }

– string üye fonksiyonları– length : string (karakter dizisi) içindeki karakter sayısını döndürür.– Substr : bir string içindeki belirlenen alt stringi döndürür.

Page 65: Bas5e bol 03_turkce_tamami

65

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_15.cpp

(1 of 1)

1 // Fig. 3.15: GradeBook.h

2 // Sınıfın public arabirimini temsil eden GradeBook sınıf tanımlaması.

3 // Üye fonksiyon uygulamaları GradeBook.cpp içerisindedir.

4 #include <string> // program C++ standart string sınıfını kullanır

5 using std::string;

6

7 // GradeBook sınıf tanımlaması

8 class GradeBook

9 {

10 public:

11 GradeBook( string ); // GradeBook nesnesine ilk değerini veren yapılandırıcı.

12 void setDersAdi( string ); // ders adını atayan set fonksiyonu

13 string getDersAdi(); // Ders adının döndüren fonksiyon

14 void mesajYaz(); // Hoşgeldin mesajı görüntüleyen fonksiyon

15 private:

16 string dersAdi; // GradeBook sınıfının ders adı

17 }; // GradeBook sınıfının sonu

Page 66: Bas5e bol 03_turkce_tamami

66

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_16.cpp

(1 of 2)

1 // Fig. 3.16: GradeBook.cpp

2 // GradeBook üye fonksiyonlarının uygulamaları..

3 // setDersAdi fonksiyonu doğrulama işini yürütür.

4 #include <iostream>

5 using std::cout;

6 using std::endl;

7

8 #include "GradeBook.h" // GradeBook sınıfı tanımlamasını dahil et.

9 10 // Parametre olarak sağlanan string ile dersAdi’ nailk değerini veren yapılandırıcı. 11 GradeBook::GradeBook( string isim )

12 {

13 setDersAdi( isim ); // dersAdi ‘nı doğrula ve kaydet.

14 } // GradeBook yapılandırıcısının sonu

15

16 // ders adını atayan fonksiyon. Ders adının en fazla 25 karakter olmasını

17 // sağlar.

18 void GradeBook::setDersAdi( string isim )

19 {

20 if ( isim.length() <= 25 ) // eğer isim 25 veya daha az karakterliyse.

21 dersAdi = isim; // ders adını kaydet. (Problem Yok)

22

setDersAdi fonksiyonu dersAdi data üyesinin her zaman doğru değerlere sahip

olmasını garantiye alır.

Yapılandırıcı , doğrulama kontrolü için set

fonksiyonunu çağırır.

Page 67: Bas5e bol 03_turkce_tamami

67

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_16.cpp

(2 of 2)

23 if ( isim.length() > 25 ) // eğer isim 25 karakterden fazlaysa

24 {

25 // ismin ilk 25 karakterini al.

26 dersAdi = isim.substr( 0, 25 ); // 0 dan başla , 25 karakter al.

27

28 cout << "isim \"" << isim << "\" (25) karakterden fazla!\n"

29 << "İlk 25 karakteri alınıyor...\n" << endl;

30 } // if sonu

31 } // setDersAdi fonksiyonunun sonu

32

33 // ders adının döndüren fonksiyon

34 string GradeBook::getDersAdi()

35 {

36 return dersAdi; // Nesnenin dersAdi değerini döndür

37 } // getDersAdi fonksiyonunun sonu

38

39 // GradeBook kullanıcısına bir hoşgeldin mesajı görüntüle

40 void GradeBook::mesajYaz()

41 {

42 // ders adını almak için getDersAdi() fonksiyonunu çağır.

43 cout << getDersAdi() << " dersine hoşgeldiniz!" << endl;

44

45 } // mesajYaz fonksiyonunun sonu

Page 68: Bas5e bol 03_turkce_tamami

68

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_17.cpp

(1 of 2)

1 // Fig. 3.17: fig03_17.cpp

2 // GradeBook nesneleri oluştur ve doğrulamayı test et.

3 #include <iostream>

4 using std::cout;

5 using std::endl;

6

7 #include "GradeBook.h" // GradeBook sınıf tanımlamasını dahil et.

8

9 // Main fonksiyonu programın çaışmasını başlatır.

10 int main()

11 {

12 // İki GradeBook nesnesi oluştur

13 // defter1 ‘in ilk değeri çok uzun

14 GradeBook defter1( "BILM102 C++ ile programlamaya giriş" );

15 GradeBook defter2( "BILM219 C++ Programlama" );

16

Yapılandırıcı, doğrulama kontrolü için set fonksiyonunu çağırır.

Page 69: Bas5e bol 03_turkce_tamami

69

2006 Pearson Education, Inc. All rights reserved.

Outline

fig03_17.cpp

(2 of 2)

17 // her GradeBook’un ilk değerini göster

18 cout << "defter1 ‘in ilk ders Adi : "

19 << defter1.getDersAdi()

20 << "\ndefter2 ‘nin ilk ders Adi: "

21 << defter2.getDersAdi() << endl;

22

23 // defter1 ‘in ders adını geçerli uzunlukta bir değer ile değiştir.

24 defter1.setDersAdi( "BILM102 C++ Programlama" );

25

26 // Her GradeBook’un dersAdi değerini göster

27 cout << "\ndefter1’in ders adi : "

28 << defter1.getDersAdi()

29 << "\ndefter2 'nin ders adi: "

30 << defter2.getDersAdi() << endl;

31 return 0; // başarılı bitiş

32 } // main fonksiyonu sonu isim "BILM102 C++ ile programlamaya giriş" (25) karakterden fazla ! İlk 25 karakteri alınıyor... defter1'in ilk ders Adi : BILM102 C++ ile programla defter2'nin ilk ders Adi: BILM219 C++ Programlama defter1'in ders adi : BILM102 C++ Programlama defter2'nin ders adi: BILM219 C++ Programlama

Doğruluk sınaması için set fonksiyonunu çağır.

Page 70: Bas5e bol 03_turkce_tamami

70

2006 Pearson Education, Inc. All rights reserved.

Yazılım Mühendisliği Görüşü 3.6

Data üyelerinin private yapılması ve özellikle yazma erişimi olmak üzere erişimlerin public üye fonksiyonlar ile kontrol edilmesi veri doğruluğunu korumaya yardım eder .

Page 71: Bas5e bol 03_turkce_tamami

71

2006 Pearson Education, Inc. All rights reserved.

Hataları Engelleme 3.5

Data üyeleri private olduğu için veri doğrulama işi sınıfı kullanan istemci uygulamalar tarafından yapılamaz. Sınıfı tanımlayan programcı uygun veri doğrulamayı yapmalı ve gerektiğinde hata raporlarını sağlamalıdır.

Page 72: Bas5e bol 03_turkce_tamami

72

2006 Pearson Education, Inc. All rights reserved.

Yazılım Mühendisliği Görüşü 3.7

Private data üyelerine değer atayan üye fonksiyonlar(set fonksiyonları) , parametre olarak gönderilmiş verilerin doğruluğunu kontrol etmelidir. Eğer doğru değerler değil ise, private data üyelerinin doğruluğunu koruyarak uygun değere sahip bir biçimde kalmasını sağlamalıdırlar. Eğer gerekirse, data üyelerine atanmak istenen verinin geçersiz olduğunu bir hata mesajıyla belirtmelidirler.