23
C++ Dersi: Nesne Tabanlı Programlama Çiğdem Turhan Fatma Cemile Serçe Bölüm 9: Sınıf

C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi:Nesne Tabanlı Programlama

Çiğdem Turhan

Fatma Cemile Serçe

Bölüm 9: Sınıf

Page 2: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

İçerik

• Sınıf Tanımı

• Nesne Tanımı

• İkili Kapsam Çözme Operatörü

• UML ile Sınıfların Gösterimi

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

2

Page 3: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

• Sınıf kavramı, nesne-tabanlı programlamanın temelini oluşturur.

• Nesne-tabanlı programlamanın ilk özelliği olan sarmalama (encapsulation), veri ve bu veriyle ilgili işlemlerin tek bir birimde toplanması gerektiğini belirtir.

• Gerçek hayatta etrafımıza baktığımızda canlı cansız birçok nesneyle karşılaşırız.

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

3

Nesne Örnekleri

Page 4: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

Bu nesnelerin her birinin durumu ve davranışözellikleri vardır. Bu örneklerde de görüldüğü gibi birnesne, durum ve davranış özelliklerini içindebarındırır.

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

4

Televizyon Nesnesi:

Durum Bilgileri:

Marka: Toshiba

Cins: Plazma

Boyut: 120

Davranış Bilgileri:

Açma/Kapama

Kanal değiştirme

Köpek Nesnesi:

Durum Bilgileri:

İsim: Lola

Renk: Sarı

Cins: Golden Retriever

Davranış Bilgileri:

Havlamak

Koklamak

Çiçek Nesnesi:

Durum Bilgileri:

Cins: Lale

Renk: Kırmızı

Davranış Bilgileri:

Çiçek açma

Solma

Page 5: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

5

• Nesne-tabanlı programlama mantığını kullanırsak, Lolanesnesi, tüm köpek nesnelerini oluşturan sınıfın birörneğidir.• Sınıf ise tüm köpek nesnelerini oluşturmak içinkullanılan bir modeldir.•Buradan yola çıkarak sınıfı (class), bir nesneyi (object /instance) oluşturmak için gereken model veya planolarak tanımlayabiliriz.

Köpek Sınıfı

Durum:

İsim

Renk

Cins

Davranış:

Havlamak

Koklamak

. . .

Page 6: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

6

Köpek

Özellikler (Durum):

Durum:

Isim: Karabas

Renk: Siyah

Cins: Kurt

Davranis:

Havlamak

Koklamak

Özellikler (Durum):

Durum:

Isim: Lola

Renk: Sari

Cins: Golden

Davranis:

Havlamak

Koklamak

Özellikler (Durum):

Durum:

Isim

Renk

Cins

Davranis:

Havlamak

Koklamak

Özellikler (Durum):

Durum:

Isim: Rintintin

Renk: Kahve

Cins: Sokak

Davranis:

Havlamak

Koklamak

köpek nesnelerinin

yaratilmasi

Lola

Rintintin

Karabas

Page 7: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

7

Sınıf Tanımı• Sınıf, çözülmesi gereken problemin içeriğine göre yeni bir veri tipi ve bu veri tipi ile yapılacak işlemleri tanımlamamıza olanak sağlar.

• Oluşturulan her nesnenin durum özellikleri veri üyesi (data member), davranış özellikleri ise üye fonksiyonlarla (member function) tanımlanır.

class SınıfAdı{

public:... // Her yerden erişilebilen üyeler

private:... // Sadece sınıf içinden erişilebilen üyeler

};

Page 8: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

8

Sınıf tanımında yer alan üyelere erişimi, farklı erişim etiketleri kullanarak sınırlandırabiliriz:• public (genel): bu etiket altında tanımlanan üyelere programın her yerinden erişilebilir. • private (özel): bu etiket altında tanımlanan üyelere sadece sınıf içerisinden erişilebilir.

Sınıf tipinde tanımlanan değişkenlere nesne (object) adı verilir.

Sınıf tanımı sırasında public veya private erişim etiketi belirtilmezse, tanımlanan sınıf üyelerinin erişim etiketleri private olarak varsayılır.

Page 9: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

#include <iostream>

using namespace std;

class Ornek1

{

public:

int i; // Veri üye

void yaz() // Fonksiyon üye

{

cout<<"i= "<<i<<endl;

}

};

int main()

{ Ornek1 x; // Ornek1 sınıfı tipinde x nesnesi tanımlanır

x.i = 5; // x nesnesinin i üyesine 5 atanır.

x.yaz(); // x nesnesinin yaz() fonksiyonu çağırılır.

return 0;

}C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

9

ÇIKTIi=5

yaz()

i

x

Ornek

Page 10: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

Aynı yapılarda olduğu gibi bir nesnenin veri veya fonksiyonüyelerine erişmek için aşağıdaki sözdiziminde görüldüğügibi nokta (.) operatörünü kullanmamız gerekir.

nesneAdı.üyeİsmi

Örnek:x.i = 5;x.yaz();

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

10

Page 11: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

11

#include <iostream> using namespace std;class Ornek2 { public:

int i; // Her yerden erişilebilen üyeler

void yaz() { y = 5.2; // Üye fonksiyondan özel y üyesine erişilebilir.

z = 9;cout<<"i= "<<i<<endl;cout<<"y= "<<y<<endl; cout<<"z = "<<z <<endl;

}private: // Sadece sınıf içinden erişilebilen üyeler

float y;int z; };int main(){ Ornek2 nsn; // Ornek2 sınıfı tipinde nsn isimli nesne tanımı

nsn.i = 5; // nsn nesnesinin i üyesine 5 atanır.

nsn.yaz(); // nsn nesnesinin yaz() fonksiyonu çağırılır.

return 0;}

ÇIKTIi= 5y= 5.2z= 9

Page 12: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

int main()

{

Ornek2 nsn;

nsn.i = 5;

nsn.y =5.2; // X private olarak tanımlanmış y üyesine erişemeyiz.

nsn.z =9; // X private olarak tanımlanmış z üyesine erişemeyiz.

nsn.yaz();

return 0;

}

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

12

Page 13: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

13

#include <iostream>using namespace std;class S // S isimli sınıf tanımı

{public:int a;

};int main(){S m,n; // S tipinde m ve n isminde iki nesne tanımlanır.

n.a=8; // n nesnesinin a üye'sine 8 atanır.

cout<<" n nesnesinin a uyesi: "<<n.a<<endl;m=n; // n nesnesi m nesnesine kopyalanır.

cout<<" m nesnesinin a uyesi: "<<m.a<<endl;S &ref=n; // n nesnesini gösteren referans değişkeni ref tanımlanır.

cout<<" ref referansinin a uyesi: "<<ref.a<<endl;ref.a =7; //ref'in referans olduğu nesnenin a üyesine 7 atanır.

cout<<" ref referansinin a uyesi: "<<ref.a<<endl;S kere[3]; // S tipinde 3 nesneyi içeren bir dizi tanımlanır

kere[2].a=6; // kere dizisinin 2.indeksli nesnesinin a uyesine 6 atanır.

cout<<"kere dizisinin 2. nesnesinin a uyesi: "<<kere[2].a<<endl; return 0;

}

ÇIKTIn nesnesinin a uyesi: 8m nesnesinin a uyesi: 8ref referansinin a uyesi: 8ref referansinin a uyesi: 7kere dizisinin 2. nesnesinin a uyesi: 6

Page 14: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

14

S m,n; a

n

8 a

m

8

S &ref=n;ref.a=7; a

n

7 ref

S kere[3]; kere[2].a=6;

a

kere

a a 6

0 1 2

Page 15: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

15

İkili Kapsam Çözme Operatörü

Sınıfın dışında tanımlanan fonksiyonun hangi sınıfın üye fonksiyonu olduğunu belirtmek amacıyla ikili kapsam çözme

operatörü (::) (binary scope resolution operator) kullanılır.

döndürülenVeriTipi SınıfAdı::fonksiyonAdı (parametre listesi){

…}

Page 16: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

16

#include <iostream>using namespace std;class Ornek4{

public:int i;void yaz(); // Fonksiyon protipi

};void Ornek4::yaz() // Fonksiyon tanımı{

cout<<"Merhaba"<<endl;cout<<"i degeri = "<<i<<endl;

}int main(){

Ornek4 x;x.i=5;x.yaz();return 0;

}

ÇIKTIMerhaba

i degeri 5

Page 17: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

C++ Dersi: Nesne Tabanlı Programlama © 2012

Çiğdem TurhanFatma Cemile Serçe

17

#include <iostream>using namespace std;class Sayi { int n; // n üyesinin private olduğu varsayılır

public:void sakla (int=0); // Fonksiyon prototipi ve varsayılan parametre

int al(); // Fonksiyon prototipi

};void Sayi::sakla (int x) // Değiştirici fonksiyon tanımı

{ n=x;

}int Sayi::al() // Erişimci fonksiyon tanımı

{ return n;

}int main(){ Sayi no;

no.sakla();cout<<"n = "<<no.al()<<endl; no.sakla(10);cout<<"n = "<<no.al()<<endl; return 0; }

ÇIKTIn = 0n = 10

al()

n

in

0 10

sakla()

Page 18: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

• Bir sınıf üyesinin değerini değiştiren fonksiyonlaradeğiştirici fonksiyon (mutator function)adıverilir.

• Sınıf üyesini değiştirmeyen, sadece bu üyeleridöndüren fonksiyonlara erişimci fonksiyon(accessor function) ismi verilir.

Page 19: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

#include <iostream>using namespace std;#define SINIF_MEVCUDU 2class Ogrenci {

int no,vize,final; // private veri üyeleri

public:// erişimci fonksiyonlar

int noAl(){return no;} int vizeAl(){return vize;} int finalAl(){return final;}// değiştirici fonksiyonlar

void noAta(int _no){no=_no;}void vizeAta(int _vize){vize=_vize;}void finalAta(int _final){final=_final;}

};

Page 20: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

int main(){

Ogrenci sinif[SINIF_MEVCUDU]; // 50 öğrencilik dizi tanımı

int no,vize, final;float ortalama;for (int i=0;i<SINIF_MEVCUDU;i++){ cout<<endl<<"Ogrenci numarasi, vize ve finali giriniz: ";cin>>no>>vize>>final;Ogrenci ogrenci; //ogrenci nesnesine deger aktarımı

ogrenci.noAta(no); ogrenci.vizeAta(vize);ogrenci.finalAta(final);sinif[i] = ogrenci; //sinif dizisine eleman ekleme

}for (int i=0;i<SINIF_MEVCUDU;i++){ // ortalama hesabı

ortalama = 0.4*sinif[i].vizeAl() + 0.6*sinif[i].finalAl();cout<<sinif[i].noAl()<<" numarali ogrencinin ortalamasi:"

<<ortalama<<endl;} return 0;

}

ÇIKTIOgrenci numarasi, vize ve finali giriniz: 123 60 70

Ogrenci numarasi, vize ve finali giriniz: 524 80 90

123 numarali ogrencinin ortalamasi:66

524 numarali ogrencinin ortalamasi:86

Page 21: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

UML ile Sınıfların Gösterimi

UML (Unified Modeling Language) (Tümleşik Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar ve sınıflar arası ilişkiyi göstermek amacı ile kullanılan bir modelleme aracıdır. UML, ihtiyaca yönelik birçok farklı gösterim modelini içerir. Sınıf diyagramları bu gösterim modellerinden biridir. Sınıf diyagramları ile tasarlanan sınıfın durumu (veri üyeleri) ve davranışları (fonksiyonlar) görsel olarak tanımlanır.

Page 22: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

Örnek:

Bu diyagramda kullanılan ‘+’ işareti, söz konusu üyenin public olduğunu, ‘-’ işareti ise üyenin private olduğunu göstermektedir.

Page 23: C++ Dersi: Nesne Tabanlı Programlama · Ornek. Aynıyapılardaolduğugibi bir nesnenin veri veya fonksiyon ... Modelleme Dili), nesne tabanlı analiz ve tasarım sürecinde sınıflar

#include <iostream>using namespace std;class Daire {

double yariCap; public:

void yariCapAta(int _yariCap){yariCap=_yariCap};double yariCapAl(){ return yariCap; }double alan (){ return 3.14*yariCap*yariCap; }double cevre(){ return 2*3.14*yariCap; }

}; int main(){Daire d; // Daire tipinde d isimli bir nesne yaratır.

double r; cout<<endl<<"Daire yaricapi: ";cin>>r;d.yariCapAta(r); // Okunan değer yarı çapa atanır

double alan = d.alan(); // Alan hesaplanır

double cevre = d.cevre(); // Çevre hesaplanır

cout<<"r="<<d.yariCapAl() <<" alan="<<alan<<" cevre="<<cevre<<endl;return 0;

}

ÇIKTIDaire yaricapi: 4r=4 alan=50.24 cevre=25.12