C++ Dersi: Nesne Tabanlı Programlama

Benzer belgeler
C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA

1 PROGRAMLAMAYA GİRİŞ

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

HSancak Nesne Tabanlı Programlama I Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Inheritance. Inheritance (turetim)

NESNEYE YÖNELİK PROGRAMLAMA

Kalıtım (Inheritance)

NESNEYE YÖNELİK PROGRAMLAMA

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

YZM 2105 Nesneye Yönelik Programlama

C++ Dersi: Nesne Tabanlı Programlama

C# Metotlar ve Metot Tanımlama

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Ders 8: Metotlar. barisgokce.com

Nesneye Yönelik Programlama (OOP) 7.Hafta

Sunum İçeriği. Programlamaya Giriş

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

NESNEYE YÖNELİK PROGRAMLAMA THIS İŞARETÇİSİ, KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR,NESNE DİZİLERİ

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Nesne Yönelimli Programlama ve Kalıtım

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

BİL-141 Bilgisayar Programlama I (Java)

Nesne Yönelimli Programlama

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

BTEP243 Ders 3. class Yazım Kuralı:

Veri Yapıları Lab Notları 1

7. HAFTA. Erişim Belirleyiciler

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

11- FONKSİYONLAR (FUNCTIONS)

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Görsel Programlama-I (Visual Programming) 2.Hafta

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

NESNE MODELLERİ : SINIFLAR

Ad Soyad: İmza: Object-Oriented Programming Quiz 4 60dk. Kapalı kitap. Kapalı defter. Kapalı cep telefonu. Hesap makinesi yok.

YZM 2105 Nesneye Yönelik Programlama

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

C++ ile Nesneye Dayalı Programlama

Operatörlerin Aşırı Yüklenmesi

Nesneye Dayalı Programlama

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Erişim konusunda iki taraf vardır:

BİL-142 Bilgisayar Programlama II

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Object-Oriented Programming Laboratuvar 11

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Operator Aşırı Yükleme (Operator OverLoading)

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Giris {\} /\ Suhap SAHIN Onur GÖK

BİLG Dr. Mustafa T. Babagil 1

Diziler (Arrays) Çok Boyutlu Diziler

Ders 8 Konu Özeti ve Problemler

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

Programlama Dillerinde Kullanılan Veri Tipleri

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

VERİ TABANI İŞLEMLERİ (NESNE TABANLI PROGRAMLAMA TEKNİĞİ İLE)

#ifndef VEKTOR_H #define VEKTOR_H. struct vektor_s { double x; double y; double z; }; typedef struct vektor_s vektor_t;

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA NESNE YÖNELİMLİ PROGRAMLAMA

Bölüm 12. Nesne yönelimli programlama desteği

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

BMT 101 Algoritma ve Programlama I 5. Hafta. Yük. Müh. Köksal Gündoğdu 1

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

8. İŞARETCİLER (POINTERS)

#ifndef COMPLEX_H #define COMPLEX_H

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

KALITIM. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

Nesneye Dayalı Programlama

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

BİL-142 Bilgisayar Programlama II

10/17/2007 Nesneye Yonelik Programlama 3.1

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

C++ Class larina baslangic. C++ Versus C Object-oriented Language C++ Structure dan Object Create etmek. Structure tanimlama.

Göstericiler (Pointers)

Nesne Tabanlı Programlama

Yazılım Kodlama ve İ simlendirme Standartları v1.0

BMM3101 PROGRAMLAMA DİLLERİ

Transkript:

C++ Dersi: Nesne Tabanlı Programlama Bölüm 13: Miras

İçerik Miras Kavramı Miras Yönteminin Uygulanması Erişim Etiketleri: public, private, protected Miras ve Yapıcı Fonksiyonlar Üst Sınıf Tanımlamasında public, private ve protected Erişim Etiketlerinin Kullanımı Üst Sınıftaki Fonksiyonların Alt Sınıflarda Tekrar Tanımlanması Çoklu Miras 2

Miras Kavramı İng. Inheritance Var olan bir sınıftan bir alt sınıf türeterek üyelerin alt sınıfa aktarılmasına miras adı verilir. Sınıflar arası ilişkiyi tanımlayarak bir hiyerarşi kurulmasını sağlar. İki sınıf arasındaki veri üyelerine ve üye fonksiyonlarına bakıldığında benzerlikler var ise, ortak olan bu üyeler temel bir sınıfta toplanır. Bu temel sınıftan türeyen alt sınıflar bu üyelere miras yoluyla sahip olurlar. Ortak üyelere ek olarak, alt sınıf kendine özgü yeni veri üyeleri ve üye fonksiyonlar tanımlayabilir. 3

Miras Kavramı... Ogrenci ve Personel sınıfları; ad, soyad, tckimlik ve adres bilgilerini Birey sınıfından miras olarak alır 4

Miras Kavramı... Özellikleri miras alınan sınıfa üst sınıf (superclass) veya taban sınıf (base class), miras alan sınıfa ise alt sınıf (subclass) veya türemiş sınıf (derived class) adı verilir Birey üst sınıf Öğrenci Personel Bir üst sınıf sadece kendi bünyesinde tanımlı üyelere erişebilir, alt sınıflarına ait üyelere erişemez. Sınıflar arasında miras ilişkisi olup olmadığını daha iyi anlamak için, tasarlanan alt sınıf bir üst sınıftır önermesinin doğru olması gereklidir. Öğrenci bir Birey dir. // doğru bir önermedir alt sınıf 5

Miras Yönteminin Uygulanması class <alt sınıf> : <erişim etiketi> <üst sınıf> {... Miras ilişkisi, public (genel), private (özel) ve protected (korumalı) olmak üzere üç farklı erişim etiketi ile kurulabilir. public erişim etiketi, üst sınıftan aktarılan public üyelere alt sınıftan da public, protected üyelere protected ve private üyelere ise private olarak erişileceğini ifade eder. 6

//----- A.h ----- class A { int x; void xata(int _x){x=_x;} int xal(){ return x;} //----- B.h ----- #include "A.h" class B: public A { int n; void nata(int _n){n = _n;} int nal(){return n;} B //----- Uygulama.h----- #include <iostream> #include "B.h" using namespace std; int main() { B nsn; nsn.xata(3); nsn.nata(4); cout<<"x:"<<nsn.xal()<<endl; cout<<"y:"<<nsn.nal()<<endl; return 0; } ÇIKTI x:3 y:4 n A x* atan() aln() atax() alx() 7

Erişim Etiketleri: public, private, protected public erişim etiketi ile tanımlanmış tüm üyeler, aralarında miras ilişkisi olsun olmasın diğer tüm sınıflar tarafından erişilebilir üyelerdir. private erişim etiketine sahip tüm sınıf üyelerine dışarıdan erişim kapatılır. protected etiketi ile tanımlanan üyelere sadece alt sınıflar erişebilir. 8

//----- A.h ----- class A private { int x; protected int y; protected: int z; public void atax(int _x){x=_x;} int alx(){ return x;}... //----- B.h ----- #include <iostream> #include "A.h" using namespace std; class B: public A { void yaz(); //----------- B.cpp ----------- #include <iostream> #include "B.h" void b::yaz() { cout<<"x:"<<alx()<<endl; cout<<"y:"<<y<<endl; cout<<"z:"<<z<<endl; } // -----------Uygulama.h ----------- #include "B.h" int main() { B b; b.atax(3); b.y = 10; b.ataz(22); b.yaz(); return 0; } ÇIKTI x:3 y:10 z:22 9

Miras ve Yapıcı Fonksiyonlar Alt sınıf tipinde bir nesne yaratılırken öncelikle üst sınıfın yapıcı fonksiyonu çağrılır, daha sonra alt sınıfın yapıcı fonksiyonu çağrılır. Yıkıcı fonksiyonlar için ise bu tam tersidir: öncelikle alt sınıfın yıkıcı fonksiyonu, onun ardından üst sınıfın yıkıcı fonksiyonu çağrılır. Üst Sınıf Alt Sınıf 10

//----- A.h ----- class A { int x; //----- Uygulama.cpp ----- #include "A.h" int main(){ B nsn(3,4); nsn.yaz(); return 0; } A(int _x):x(_x){} ~A(){cout<<"A sinifi yikici fonksiyonu"<<endl; system("pause");} //----- B.h ----- #include <iostream> #include "A.h" üst sınıfa ait yapıcı using namespace std; fonksiyonu çağırır class B: public A { int y; B(int _x, int _y):a(_x){y = _y;} ~B(){cout<<"B sinifi yikici fonksiyonu"<<endl; system("pause");} void yaz(){cout<<x<<" <<y<<endl;} B sınıfına ait yapıcı fonksiyon ÇIKTI 3 4 B sinifi yikici fonksiyonu Press any key to continue... A sinifi yikici fonksiyonu Press any key to continue... 11

//-------- Birey.h --------- #ifndef BIREY_H #define BIREY_H class Birey { #endif protected: string ad; string soyad; Birey(string _ad, string _soyad) :ad(_ad),soyad(_soyad){} void profiliyaz(); Üst sınıf olan Birey sınıfına ait yapıcı fonksiyona parametre geçilmektedir. //------------------- Ogrenci.h ------------------- #include "Birey.h" class Ogrenci : public Birey { int ogrencino; float ortalama; Ogrenci(string, string, int, float); float ortalamaal(); //------------------- Ogrenci.cpp ------------- #include "Ogrenci.h" Ogrenci::Ogrenci(string _ad, string _soyad, int _ogrencino, float _ortalama) :Birey (_ad, _soyad), ogrencino(_ogrencino), ortalama(_ortalama){} 12

Üst Sınıf Tanımlamasında public, private ve protected Erişim Etiketlerinin Kullanımı İki sınıf arasında miras ilişkisinin kurulması için : işaretinin hemen ardından üst sınıfın adı yazılır Üst sınıfın adı yazılırken, söz konusu sınıfın hemen önüne bir erişim etiketi konur. public, private veya protected 13

Örnek Erişim etiketleri, alt sınıfın üst sınıfın üyelerine erişip erişemeyeceğini ya da nasıl erişeceğini farklı şekillerde tanımlar. class A { private: int x; protected: int y; int z; 14

private Erişim Etiketi Üst sınıftaki private üyelere alt sınıftan erişilemez. Üst sınıftaki protected üyeleri alt sınıfın private üyeleri olarak kabul edilir. Üst sınıftaki public üyeleri, alt sınıfın private üyeleri olarak kabul edilir. class B: private A { A Sınıfı Üyeleri private int x protected int y public int z -> -> -> B Sınıfına Aktarımları x e erişilemez private int y private int z class A { private: int x; protected: int y; int z; 15

protected Erişim Etiketi Üst sınıftaki private üyelere alt sınıftan erişilemez. Üst sınıftaki protected üyeleri alt sınıfın protected üyeleri olarak kabul edilir. Üst sınıftaki public üyeleri, alt sınıfın protected üyeleri olarak kabul edilir. class B: protected A { A Sınıfı Üyeleri private int x -> protected int y -> public int z -> B Sınıfına Aktarımları x e erişilemez protected int y protected int z class A { private: int x; protected: int y; int z; 16

public Erişim Etiketi Üst sınıftaki private üyelere alt sınıftan erişilemez. Üst sınıftaki protected üyeleri alt sınıfın protected üyeleri olarak kabul edilir. Üst sınıftaki public üyeleri, alt sınıfın public üyeleri olarak kabul edilir. class B: public A { A Sınıfı Üyeleri private int x -> protected int y -> public int z -> B Sınıfına Aktarımları x e erişilemez protected int y Public int z class A { private: int x; protected: int y; int z; 17

İng. Redefining Yeniden Tanımlama Üst sınıfta tanımlanan fonksiyon, alt sınıfta aynı isimle yeniden tanımlanmasıdır. Örnek: 18

//------------------- A.h ------------------- #ifndef A_H #define A_H class A { private: int x; A(){x=1;} void yaz(); #endif //------------------- A.cpp ------------------- #include "A.h" #include <iostream> using namespace std; void A::yaz() { cout<<"x="<<x<<endl; } //------------------- B.h ------------------- #include "A.h" class B:public A { int y; B(){y=5;} void yaz(); yaz() ismi kullanılarak başka bir fonksiyonu tanımlanır //------------------- B.cpp ------------------- #include "B.h" void B::yaz() { cout<<"y="<<y<<endl; A::yaz(); } //------------------- Uygulama.cpp ------------------- #include "A.h" #include "B.h" int main() { A a1; B b1; a1.yaz(); b1.yaz(); b1.a::yaz(); return 0; } ÇIKTI x=1 y=5 x=1 x=1 A sınıfına ait yaz() fonksiyonu çağırılır B sınıfına ait yaz() fonksiyonu çağırılır 19

Çoklu Miras İng. Multiple Inheritance Bir sınıfın birden fazla üst sınıfa sahip olması durumudur Çoklu miras ile bir sınıf, birden çok sınıfa ait özellikleri aynı anda miras olarak alabilir. Tekli miras kadar yaygın bir kullanımı olmasa da birden çok sınıfla ortak özelliklerin olduğu durumlarda tercih edilen bir yöntemdir. 20

Örnek Bir akademik kurumda henüz doktora öğrencisi olan ve bir yandan da öğretmenlik yapan bir asistanı ele alalım. Bu asistan doktora öğrencisi olduğu için Ogrenci dir ve aynı zamanda öğretmenlik yaptığı için bir Ogretmen dir. 21

//-------------------Ogrenci.h ------------------- class Ogrenci { int ogrencino; Ogrenci(int _ogrencino) :ogrencino(_ogrencino){} int ogrencinoal(){return ogrencino;} //-------------------Ogretmen.h ------------------- class Ogretmen { int sicilno; Ogretmen(int _sicilno) ÇIKTI Ogrenci No:123 Sicil No:987 :sicilno(_sicilno){} int sicilnoal(){return sicilno;} //-------------------Asistan.h ------------------- #include "Ogrenci.h" Çoklu miras ilişkisi #include "Ogretmen.h" class Asistan: public Ogrenci, { public Ogretmen Asistan(int ogrencino, int sicilno) :Ogrenci(ogrenciNo), Ogretmen(sicilNo){} //-------------------Uygulama.h ------------------- #include <iostream> #include "Asistan.h" using namespace std; int main() { int ogrencino = 123; int sicilno = 987; Asistan asistan(ogrencino, sicilno); cout<<"ogrenci No:"<<asistan.ogrenciNoAl()<<endl; cout<<"sicil No:"<<asistan.sicilNoAl()<<endl; } return 0; 22