SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Slides:



Advertisements
Benzer bir sunumlar
C# - Metotlar.
Advertisements

Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Göstericiler (Pointers)
Tuğba DEMİREL
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Nesneye Dayalı Programlama
Bölüm 2 C Dilinin Temelleri
Değişken Bildirimleri
Nesneye Dayalı Programlama
C++’A GİRİŞ Yılmaz Kılıçaslan.
SANAL FONKSİYONLAR VE ÇOK BİÇİMLİLİK
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA
Nesneye Dayalı Programlama
DİZİLER.
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
NESNE TABANLI PROGRAMLAMA -METOTLAR-
METODLAR.
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Nesneye Dayalı Programlama
C ile Programlamaya Giriş
Paralel Programlamaya Giriş
Metotlar.
FONKSİYONLAR.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
METOTLAR.
Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Nesne.
JAVA’DA DÖNGÜLER.
Kalıtım , Sınıf Asli Ergün.
Demet AYDIN METODLAR Demet AYDIN
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Nesneye Dayalı Programlama
C++’a Giriş Yılmaz Kılıçaslan.
KALITIM Yılmaz Kılıçaslan.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
SANAL FONKSİYONLAR VE ÇOKBİÇİMLİLİK Yılmaz Kılıçaslan.
C++ Ders Notları 2.Ders (Dilin Yapısı)
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C++.
Görsel C# ile Windows Programlama
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Veri yapıları Hafta3 Dizi Yapıları.
Fonksiyonlar.
BİLGİSAYAR programlama II
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bilgisayar Programlama III C
Hafta2 Rekürsif Algoritmalar
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C Programlama Dili Bilgisayar Mühendisliği.
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
Nesne Yönelimli Yaklaşım
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
YAPISAL PROGRAMLAMA Hafta-8
Nesneye Dayalı Programlama 1
C ile Programlamaya Giriş
Algoritmalar ve Programlama II Ders 11: Kalıtım
Sunum transkripti:

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Doç. Dr. Cemil Öz Algoritmalar ve Programlama II Ders 7: C++ programlama dilinde Nesne ve sınıf  SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

#include <iostream> using namespace std; Class basitnesne //sınıf tanımla { private: int veri; //sınıf verisi public: void degerata(int d) //değer atamak için üye fonksiyon { veri = d; } void goster() //veriyi görüntüleyen üye fonksiyon { cout << “değer = ” << veri << endl; } }; int main() basitnesne b1, b2; //basitnesne sınıfından iki obje tanımla b1.degerata(1066); //değer atamak için üye fonksiyon çağırma b2.degerata(1776); b1.goster(); //veriyi göstermek için üye fonksiyon çağır b2.goster(); return 0; }  

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Örnekte, basitnesne sınıfında bir veri öğesi, ikide üye fonksiyon vardır.Üye fonksiyonlar sınıfın dışından veri öğelerine ulaşmanın tek yolunu oluştururlar. İlk üye fonksiyon, veri öğesine bir değer atar. İkinci üye fonksiyonda bu değeri göstermeye yarar. Veri ve fonksiyonları tek bir bütün haline getirmek nesne yönelimli programlamanın temel yaklaşımıdır. sınıf veriler data1 data2 data3 fonksiyonlar fonk1() fonk2() fonk3() SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Sınıf ve nesneler Bir nesne ile sınıf arasındaki ilişki tıpkı bir değişken ile veri tipi arasındaki ilişki gibidir. Bir nesne kendi sınıfının bir örneğidir. Örnek programda sınıf (basitnesne)önce tanımlanmış, main() fonksiyonu içerisinde sınıfa ait iki nesne(b1,b2) üretilmiştir. Sınıf oluşturma class anahtar kelimesi ile başlar, ardından sınıfın adı gelir. Yapı tanımlamasında olduğu gibi sınıfın gövdesi küme parantezleri ile ayrılır ve sonuna (;) konur. Private(özel): private olarak tanımlanan veri ve fonksiyonlara sadece, tanımlı oldukları sınıf içerisinden erişilebilir. Public(genel): public olan veri ve fonksiyonlara tanımlı oldukları sınıfların dışındanda erişmek mümkündür. Genellikle bir sınıfdaki fonksiyonlar public, veriler private tır. Veriler üzerlerinde kazara oynanmasın diye private olarak tanımlanırlar. Üzerinde işlem yapılan fonksiyonlar ise sınıfın dışından erişilebilsin diye public olarak tanımlanırlar. Bu bir kural değildir. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Anahtar kelime Sınıfın adı class basitnesne { private: int veri; public: void degerata(int d) { veri = d; } void goster() { cout << “değer = ” << veri << endl; } } ; Private anahtar kelimesi ve iki nokta Private fonksiyonlar ve veriler Public anahtar kelimesi ve iki nokta Küme parantezleri Public fonksiyonlar ve veri Noktalı virgül SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Sınıfın kullanımı Sınıf tanımlandıktan sonra, main() fonksiyonu içerisinde nesneler nasıl tanımlanmakta ve nesne üye fonksiyonlarına nasıl erişilmektedir. basitnesne b1, b2; //basitnesne sınıfından iki obje tanımla Basit nesne sınıfından b1 ve b2 isimli iki adet nesne tanımlanır. Nesneler tanımlandığında hafızada yer kaplarlar. Yani nesne tanımlamak her hangi bir veri tipinde değişken tanımlamaya benzer. Üye fonksiyonları çağırmak için ise nesne ismi (.) fonksiyon ismi şeklinde ifade yazılır. b1.degerata(1066); //değer atamak için üye fonksiyon çağırma b2.degerata(1776); Görüldüğü gibi normal fonksiyon çağırmaya benzememektedir. Yani Degerata(1066) ; // yazmak anlamsızdır. Çünkü bir üye fonksiyon her zaman belli bir nesnenin üzerinden işlem yapmak için çağrılır. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Yeni örneğimiz biraz daha karmaşık olsun #include <iostream> using namespace std; class part //sınıfı tanımla { private: int modelnumber; //model numarası int partnumber; //parca numarası float cost; //parcanın fiyatı public: void setpart(int mn, int pn, float c) //deger atama fonsiyonu modelnumber = mn; partnumber = pn; cost = c; } void showpart() //veriyi görüntüleyen fonksiyon cout << “Model ” << modelnumber; cout << “, part ” << partnumber; cout << “, costs $” << cost << endl; }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz int main() { part part1; //part sınıfına ait nesneyi tanımla part1.setpart(6244, 373, 217.55F); //üye foksiyonu çağır part1.showpart(); //üye foksiyonu çağır return 0; } Part sınıfında üç tane veri parçası vardır ; modelnumber, partnumber ve cost. Aetpart üye fonksiyonu üç veri parçasına veri ataması sağlar. Showpart üye fonsiyonu ise objenin verilerini ekrana yazdırır. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz #include <iostream> using namespace std; class mesafe //sınıf tanımla { private: int metre; float cm; public: void degerata(int met, float sant) {metre=met; cm=sant; } void degeral () {cout <<“\n metre gir “;cin>>metre; cout<<“ cm gir “;cin>>cm; } void goster() {cout<< metre << “ metre ” << cm << “ cm dir”;} }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz int main() { mesafe m1,m2; //iki obje tanımla m1.degerata(5, 20); // m1 objesine değer ata m2.degeral(); // m2 objesine değeral cout<<“\n m1 değeri “; m1.goster(); // m1 objesinin değerlerini göster cout<<“\n m2 değeri “; m2.goster(); // m2 objesinin değerlerini göster return 0; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Kurucu fonksiyonlar C++’ da nesnenin otomatik olarak ilk kullanıma hazırlama işlemi kurucu(constructor) fonksiyon olarak adlandırılır. Ne zaman bir nesne oluşturulursa kurucu fonksiyon otomatik olarak çalıştırılır. Program içerisinde kullanılmak üzere bir sayac sınıfı oluşturalım. Sayacların ilk oluşturulduklarında sıfır değerini almasını isteriz. Bunu sağlamak için sayaca ilk değeri atayan bir üye fonksiyon yazabiliriz ve sayac nesnesi tanımlandığında bu üye fonksiyonu çağırarak sıfır değeri atayabiliriz. Ancak her nesne oluşturulduğunda bu üye fonksiyon çalıştırılmalıdır. Sayac s1; S1.degerata(0) ; veya s1.sifirla_sayac(); Görüldüğü üzere bu hataya açık bir durumdur. Her nesne oluşturulduğunda, kendisini ilk kullanıma hazırlaması daha uygun ve güvenilirdir. sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Kurucu fonksiyonlar üyesi olduğu sınıfın ismi ile aynı isme sahiptir. Böylece derleyici bu fonksiyonun kurucu bir fonksiyon olduğunu anlar. Kurucu fonksiyon için dönüş tipi kullanılmaz. Çünkü sistem tarafından otomatik olarak çağrıldıklarından , bir değer döndürmeleri gereken bir program yoktur. Bu da derleyiciye bu fonksiyonların bir kurucu fonksiyon olduğunu tanıtır. Kurucu fonksiyonun en genel görevi ilk değerleri atamaktır. Sayac() {sayici=0;} Şeklinde kullanımı akla gele bilir ama tercih edilen sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} İlk değer atama işlemi üye fonksiyonun beyan edilmesinden hemen sonra, fakat fonksiyon gövdesinden önce yer alır. Atanacak değerden önce (:) gelir. Eğer birden fazla üyeye değer atanacaksa, bu değerler virgül ile ayrılır. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Kurucu fonksiyonlar Örnek #include <iostream> using namespace std; class sayac //yapı tanımla { private: unsigned int sayici; public: sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} void artir_sayici() // sayacı bir artır {sayici++;} void al_sayici() //sayac değerini göster {return sayici;} }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz int main() { sayac s1,s2; //iki obje tanımla cout<<“\n s1 değeri “<< s1.al_sayici(); // s1 objesine değerini göster cout<<“\n s2 değeri “<<s2.al_sayici(); // s2 objesine değerini göster s1.artir_sayici(); s2.artir_sayici(); cout<<endl; return 0; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Programda kurucu fonksiyonu aşağıdaki şekilde değiştirip çalıştırınız Çıktı ne şekilde değişecektir. sayac():sayici(0) // kurucu fonsiyon { cout<< “kurucu fonksiyon çalıştı\n”;} SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Yok edici fonksiyonlar Bir nesne oluşturulduğunda, ilk değer atamak üzere bir kurucu fonksiyon çalıştırılmakta idi. Benzer şekilde nesne ortadan kaldırıldığındada yok edici(destructor) fonksiyonu çalıştırılır. Bu fonksiyon kurucu fonksiyonla aynı isme sahip ancak önünde (~) işareti yer almaktadır. sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} ~sayac() // yok edici fonsiyon SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Fonksiyon argümanı olarak nesneler #include <cstdlib> #include <iostream> using namespace std; class mesafe //yapı tanımla { private: int metre; float cm; public: mesafe():metre(0),cm(0.0) { } mesafe(int met, float sant): metre(met), cm(sant) void degeral () cout <<"\n metre gir ";cin>>metre; cout<<" cm gir ";cin>>cm; } void goster() {cout<< metre << " metre " << cm << " cm dir";} void toplauzun(mesafe,mesafe); //deklerasyon }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz void mesafe::toplauzun(mesafe m2,mesafe m3) { cm=m2.cm +m3.cm; metre=0 ; if(cm>=100.0) cm-=100.0; metre++; } metre+=m2.metre+m3.metre; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz int main(int argc, char *argv[]) { mesafe mesafe1,mesafe3; mesafe mesafe2(5,4.3); mesafe1.degeral(); mesafe3.toplauzun(mesafe1,mesafe2); cout<<" \n mesafe1= ";mesafe1.goster(); cout<< "\n mesafe2= "; mesafe2.goster(); cout<< "\n mesafe3= "; mesafe3.goster(); cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Program mesafe1,mesafe2 ve mesafe3 nesnelerini oluşturmakta, mesafe1 nesnesi degeral() üye fonksiyonunu çağırarak değer atamakta, mesafe2 ise kurucu fonksiyon ile ilk değer atanmakta. Mesafe üç ise toplauzun() üye fonksiyonu ile yapılan işlem sonucunda değer almaktadır. mesafe() fonksiyonu aşırı yüklenmiş bir fonksiyondur. mesafe():metre(0),cm(0.0) { } mesafe(int met, float sant): metre(met), cm(sant) SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz …. mesafe mesafe1,mesafe3; mesafe mesafe2(5,4.3); mesafe1.degeral(); cout<< "\n mesafe3= "; mesafe3.goster(); mesafe3.toplauzun(mesafe1,mesafe2); cout<<" \n mesafe1= ";mesafe1.goster(); cout<< "\n mesafe2= "; mesafe2.goster(); cout<<endl; cout<< "\n mesafe3= "; mesafe3.goster(); Fonksiyonunu görüldüğü şekilde eklediğimizde kurucu fonksiyonunun çalıştırılıp değişken değerlerini sıfırladığı görülecektir SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Sınıfın dışında üye tanımlama Sınıfın dışındada üye fonksiyon tanımlana bilir. Örnekteki toplauzun() sınıfın dışında tanımlanmış üye fonksiyondur. void mesafe::toplauzun(mesafe m2,mesafe m3) { cm=m2.cm +m3.cm; metre=0 ; if(cm>=100.0) cm-=100.0; metre++; } metre+=m2.metre+m3.metre; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz void mesafe::toplauzun(mesafe m2,mesafe m3) Fonksiyon argümanları Fonksiyon adı Kapsam çözünürlük operatörü Fonksiyonun üyesi olduğu sınıf Dönüş tipi SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz