Nesneye Dayalı Programlama

Slides:



Advertisements
Benzer bir sunumlar
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
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)
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Listeler.
Yığın ve Kuyruk.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
Nesneye Yönelik Programlama
void medyan(int cevap[]) { int j; siralama(cevap);
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
Nesneye Dayalı Programlama
C++ STACK SINIFI.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
SANAL FONKSİYONLAR VE ÇOK BİÇİMLİLİK
String Kütüphanesindeki Arama Fonksiyonları
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Nesneye Yönelik Programlama
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
Nesneye Dayalı Programlama
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
Görsel C# Programlama Güz 2009 (6. Hafta).
Nesneye Dayalı Programlama
Nesne Yönelimli Programlama Dersi
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
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.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Numaralandırmalar(Enumaration)
Kalıtım , Sınıf Asli Ergün.
Nesneye Dayalı Programlama
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 ++ Veri.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
SANAL FONKSİYONLAR VE ÇOKBİÇİMLİLİK Yılmaz Kılıçaslan.
C++ Ders Notları 2.Ders (Dilin Yapısı)
Bölüm 5 Nesneler ve Metotlar
C++ Ders Notları 3.Ders (String İşlemleri)
Bil 102 Bölüm 6 Diziler.
C++.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
Görsel C# ile Windows Programlama
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Veri yapıları Hafta3 Dizi Yapıları.
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
KALITIM(INHERITANCE) Öğr.Gör. Murat ASLANYÜREK. KALITIM KAVRAMINA GİRİŞ  Kalıtım, sınıflardan yeni sınıflar türetmeyi sağlar.  Türetilen yeni sınıflar,
Sakarya Üniversitesi Bilgisayar ve Bilişim Bilimleri Fakültesi Bilgisayar Mühendisliği Prof. Dr. Ümit Kocabıçak Prof. Dr. Cemil Öz Doç. Dr. Ahmet Turan.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
C’de Fonsiyonlar Aslı Ergün.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
5- class & object Nesne Yönelimli Programlama - i
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
Sunum transkripti:

Nesneye Dayalı Programlama DERS 8 Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Nesne Pointerları Nesneler hafızada tutulurlar, dolayısıyla pointerlar değişkenlere işaret ettikleri gibi nesnelerede edebilirler. new operatörü: new operatörü işletim sisteminden belirli miktarda yer talep ederek işgal eder, ve başlangıç noktasına bir pointer dönderir. Eğer yer bulunamadıysa, sıfır pointerına döner. new operatörünü nesnelerle kullandığınız zaman sadece hafızada nesne için yer tutmakla kalmayıp , nesnenin kurucusunu çağırarak nesneyi de oluşturur. Bu durum nesnenin doğru bir şekilde başlatıldığını garanti eder, ki bu programlama hatalarını önlemede çok önemlidir. Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli delete operatörü: Hafızanın verimli ve güvenli bir şekilde kullanıldığından emin olmak için kullanılır. Hafızayı işletim sistemine bırakmak için new operatörünü takiben kullanılır. Eğer new Type[ ]; şeklinde bir dizi tanımlarsanız, silmek için braket kullanmanız gerekicektir: int * ptr=new int[10] … delete [ ] ptr; Not: Dizi nesnelerini silerken braket kullanmayı unutmayınız.Kullanmak arrayın bütün elemanlarının silindiğinden emin olmamızı sağlar ve her biri için yıkıcıyı çağırır. Eğer braket koymayı unutursanız dizinin sadece ilk elemanı silinir. Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Örnek 1: class String{ int size; char *contents; public: String(); // Default constructor String(const char *); // Constructor String(const String &); // Copy constructor const String& operator=(const String &); // A ssignment operator void print() const ; ~String(); // Destructor }; int main() { String *sptr = new String[3]; // 3 tane nesne yaratılır String s1("String_1"); // Bir String nesnesi String s2("String_2"); // Başka bir String nesnesi *sptr = s1; // Dizinin ilk elemanı *(sptr + 1) = s2; // Dizinin ikinci elemanı sptr->print(); // İlk elemanı yazdırır (sptr+1)->print(); // İkinci elemanı yazdırır sptr[1].print(); // İkinci elemanı yazdırır delete[] sptr; // sptr tarafından point edilen nesneler silindi return 0; } Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Pointerlar ve Miras Eğer Derived sınıfı, public base Base sınıfına sahipse, Derived’a point eden bir pointer, Base’in pointer türünde bir değişkenine tür dönüşmesine gerek kalmadan atanabilir. Başka bir deyişle Base’e işaret eden bir pointer Derived türünde bir nesnenin adresini taşıyabilir. Tersi durumda, Base pointerından Derived pointerına dönüşüm açık şekilde yapılmalıdır. Örneğin: Teacher pointerı Teacher nesnelerine de, Principal nesnelerine de işaret edebilir. Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Principal bir Teacher’dır ama Teacher her zaman Principal değildir. class Base{ }; class Derived : public Base { Derived d; Base *bp = &d; // kapalı dönüşüm Derived *dp = bp; // HATA! Base Derived değildir dp = static_cast<Derived *>(bp); // açık dönüşüm Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Eğer Base sınıfı Derived’ın private türünde temel sınıfı olsaydı, Derived*’dan Base*’e kapalı dönüşüm yapılamazdı. Çünkü bu durumda Base’in public bir üyesi Base’e işaret eden bir pointer tarafından erilişilebilirdi, Derived’a işaret eden bir pointer tarafından değil. Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Örnek 2 class Base{ int m1; public: int m2; // m2 Base sınıfının Public bir üyesidir. }; class Derived : private Base { // m2 Derived’ın public bir üyesi değildir ... Derived d; d.m2 = 5; // HATA! m2 Derived’ın private bir üyesidir Base *bp = &d; // HATA! private base bp = static_cast<Base*>(&d); // ok: açık dönüşüm bp->m2 = 5; // ok Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Link List Nesneleri Bir sınıf kendi sınıf türüne ait nesne pointeri içerebilir. Bu pointer, nesne zinciri(link list) kullanmada kullanılabilir. Örnek 3: class Teacher{ friend class Teacher_list; string name; int age, numOfStudents; Teacher * next; // teacherin bir sonraki nesnesine işaret eder public: Teacher(const string &, int, int); // Constructor void print() const; const string& getName() const { return name;} ~Teacher() // Destructor }; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // öğretmenler için link list class Teacher_list{ Teacher *head; public: Teacher_list(){head=0;} bool append(const string &,int,int); bool del(const string &); void print() const ; ~Teacher_list(); }; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Heterojen(Çok Türel) Link Listler ve Polymorphism Türeme ve pointerları kullanarak heterojen link listler oluşturulabilir. Temel sınıf pointerları türünde tanımlanan bir dizi, temel sınıftan türeyen herhangi bir sınıfın nesnelerini tutabilir. Örnek: Teacher’lar ve Principal’lardan oluşan bir dizi. Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Örnek 4 #include <iostream> #include <string> using namespace std; class Teacher{ friend class HetList; string name; int age,numOfStudents; Teacher * next; // Pointer to next object of Teacher public: Teacher(const string &, int, int); // Constructor virtual void print() const; }; Teacher::Teacher(const string &new_name,int a,int nos) { name = new_name; age=a; numOfStudents=nos; } void Teacher::print() const // Print method of Teacher class cout <<"Name: "<< name<<" Age: "<< age<< endl; cout << "Number of Students: " <<numOfStudents << endl; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // Principal class is derived from Teacher class class Principal: public Teacher{ string SchoolName; public: Principal(const string &, int, int, const string &); // Constructor void print() const ; }; // Constructor of principal Principal::Principal(const string &new_name,int a,int nos, const string &s_name) :Teacher(new_name,a,nos) { SchoolName = s_name; } void Principal::print() const // Print method of principal class Teacher::print(); cout <<"Name od School: "<< SchoolName << endl; // ***** Class of het. linked list ***** // It can contain objects of teacher and principal class HetList{ // Heterogeneous linked list Teacher *head; HetList(){head=0;} void insert(Teacher *); void print(); Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // inserts a new teacher or principla at the beginning of the list void HetList::insert(Teacher* t) { if(head) // if the list is not empty t->next=head; else // if the list is empty t->next=0; // insert 1st element head=t; } // print the elements of the list void HetList::print() Teacher *tempPtr; if (head) tempPtr=head; while(tempPtr) tempPtr->print(); tempPtr=tempPtr->next; else cout << "The list is empty" << endl; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // ----- Main Function ----- int main() { HetList theHetList; Teacher *t1=new Teacher("Teacher1",30,50); Principal *p1=new Principal("Principla1",60,40,"School1"); Teacher *t2=new Teacher("Teacher2",40,65); theHetList.insert(t1); theHetList.insert(p1); theHetList.insert(t2); theHetList.print(); return 0; } Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Node Kullanılarak Link List Nesneleri Sanal fonksiyonların en çok kullanılma yöntemleri: nesnelere pointer dizileri ve linked list nesneleri. ÖRNEK 5: #include <iostream> #include <string> // Standard header of C++ using namespace std; class Teacher{ //Taban Sınıf string name; int numOfStudents; public: Teacher(const string & new_name,int nos){ // Constructor of base name=new_name;numOfStudents=nos; } virtual void print() const; // print sanal bir bir foksiyondur }; void Teacher::print() const // sanal foksiyon { cout << "Name: "<< name << endl; cout << " Num of Students:"<< numOfStudents << endl; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli class Principal : public Teacher{ // Türemiş sınıf string SchoolName; public: Principal(const string & new_name,int nos, const string & sn) :Teacher(new_name,nos) { SchoolName=sn; } void print() const; }; void Principal::print() const // Sanal olmayan fonksiyon Teacher::print(); cout << " Name of School:"<< SchoolName << endl; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // *** A class to define nodes of the list *** class ListNode{ friend class List; const Teacher * element; ListNode * next; ListNode(const Teacher &); // constructor }; ListNode::ListNode(const Teacher & n) { element = &n; next = 0; } // *** class to define a linked list of teachers and principals *** class List{ // linked list for teachers ListNode *head; public: List(){head=0;} bool append(const Teacher &); void print() const ; ~List(); Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Bir önceki örnekte Teacher sınıfından oluşan nesneiçin ve bir sonraki nesneyi göstermek için nesne pointerları olması gerekir. Kullanıcıların bu sınıfı kullanarak link list’in diğer elamalarına erişmesi içinde “list” sınıfının friend olarak tanıtılması gerekir. Daha sonraki örnektede görülebileceği gibi Teacher sınıfının kendi içinde böyle bir pointer tanıtılabilir. Fakat programcılar genellikle kütüphane(library) sınıfları gibi, başka gruplar tarafından oluşturulmuş hazır sınıfları kullanırlar Ve bu sınıfların next pointerı olmayabilir. Bu gibi hazır sınıfları kullanarak link list oluşturmak için, programcı Link Listedeki her bir nokta için node sınıfını tanımlamak zorundadır. Node sınıfının her bir nesnesi, dizinin(“list” nesnesindeki bir işaretci) her bir elemanının adresini tutar. Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

BURADA EKLEME SAĞA DOĞRU YAPILIR.... // Append a new teacher to the end of the list // if there is no space returns false, otherwise true bool List::append(const Teacher & n) { ListNode *previous, *current; if(head) // if the list is not empty previous=head; current=head->next; while(current) // Linked list sonunu bulur previous=current; current=current->next; } previous->next = new ListNode(n); if (!(previous->next)) return false; // If memory is full else // if the list is empty head = new ListNode(n); // Memory for new node if (!head) return false; // If memory is full return true; BURADA EKLEME SAĞA DOĞRU YAPILIR.... Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // Prints all elements of the list on the screen void List::print() const { ListNode *tempPtr; if (head) tempPtr=head; while(tempPtr) (tempPtr->element)->print(); // POLYMORPHISM tempPtr=tempPtr->next; } else cout << "The list is empty" << endl; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli // Destructor // deletes all elements of the list List::~List() { ListNode *temp; while(head) // if the list is not empty temp=head; head=head->next; delete temp; } // ----- Main Function ----- int main() Teacher t1("Teacher 1",50); Principal p1("Principal 1",40,"School1"); Teacher t2("Teacher 2",60); Principal p2("Principal 2",100,"School2"); List theList; theList.print(); theList.append(t1); theList.append(p1); theList.append(t2); theList.append(p2); return 0; Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli Grafik Örneği Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Finite State Machine Örneği Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli

Harran Üniversitesi Bilgisayar Mühendisliği Yrd.Doç.Dr.Nurettin Beşli