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

BTEP243 Ders 3. class Yazım Kuralı:

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

1 PROGRAMLAMAYA GİRİŞ

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

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

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

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

NESNEYE YÖNELİK PROGRAMLAMA

Nesneye Yönelik Programlama (OOP) 7.Hafta

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

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

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

NESNEYE YÖNELİK PROGRAMLAMA

BİL-142 Bilgisayar Programlama II

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

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 MODELLERİ : SINIFLAR

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

C++ Dersi: Nesne Tabanlı Programlama

BİLG Dr. Mustafa T. Babagil 1

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

C++ Operatörler (Operators)

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

#ifndef COMPLEX_H #define COMPLEX_H

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

NESNEYE YÖNELİK PROGRAMLAMA

Örnek1: #include <iostream> #include <string> using namespace std;

Sunum İçeriği. Programlamaya Giriş

Operatörlere İşlev Yükleme

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

DERSİN WEB SİTESİ:

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

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

Lambda İfadeleri (Lambda Expressions)

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

BİL-141 Bilgisayar Programlama I (Java)

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

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

11- FONKSİYONLAR (FUNCTIONS)

Inheritance. Inheritance (turetim)

10/17/2007 Nesneye Yonelik Programlama 3.1

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

BÖLÜM 11: YAPISAL VERİ TİPLERİ

YZM 2105 Nesneye Yönelik Programlama

Göstericiler (Pointers)

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

HSancak Nesne Tabanlı Programlama I Ders Notları

YZM 2105 Nesneye Yönelik Programlama

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

ALGORİTMA VE PROGRAMLAMA I

public static int Toplam int x, int y

Ders 8: Metotlar. barisgokce.com

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

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

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

NESNEYE YÖNELİK PROGRAMLAMA

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

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

Nesne Tabanlı Programlama

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

Fall Object-Oriented Programming Laboratory 02 - Structures

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

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

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS

ALGORİTMA VE PROGRAMLAMA II

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Diziler (Arrays) Çok Boyutlu Diziler

BİL-142 Bilgisayar Programlama II

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

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

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

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Nesneye Yönelmek. veya sadece formülleri bilgisayarın anlayacağı dile çevirmeyi bilen birinin C++ kullanma yöntemleri. Gökhan Ünel

İç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.

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.

ALGORİTMA VE PROGRAMLAMA II

Nesneye Dayalı Programlama Laboratuvarı

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

C++ ile Nesneye Dayalı Programlama

Operatörlerin Aşırı Yüklenmesi

NESNE TABANLI PROGRAMLAMA

C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References)

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Object-Oriented Programming Lab 4. - Sıcaklık değeri, Kelvin biriminde saklansın. Varsayılan sıcaklık değeri K olsun.

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

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

Programlama Dilleri 3

Transkript:

C++ Dersi: Nesne Tabanlı Programlama Bölüm 9: Sınıf

İçerik Sınıf Tanımı Nesne Tanımı İkili Kapsam Çözme Operatörü UML ile Sınıfların Gösterimi 2

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. Nesne Örnekleri 3

Bu nesnelerin her birinin durumu ve davranış özellikleri vardır. Bu örneklerde de görüldüğü gibi bir nesne, durum ve davranış özelliklerini içinde barındırır. Köpek Nesnesi: Durum Bilgileri: İsim: Lola Renk: Sarı Cins: Golden Retriever Davranış Bilgileri: Havlamak Koklamak Televizyon Nesnesi: Durum Bilgileri: Marka: Toshiba Cins: Plazma Boyut: 120 Davranış Bilgileri: Açma/Kapama Kanal değiştirme Çiçek Nesnesi: Durum Bilgileri: Cins: Lale Renk: Kırmızı Davranış Bilgileri: Çiçek açma Solma 4

Nesne-tabanlı programlama mantığını kullanırsak, Lola nesnesi, 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çin kullanılan bir modeldir. Buradan yola çıkarak sınıfı (class), bir nesneyi (object / instance) oluşturmak için gereken model veya plan olarak tanımlayabiliriz. Köpek Sınıfı Durum: İsim Renk Cins Davranış: Havlamak Koklamak... 5

Lola Özellikler (Durum): Durum: Isim: Lola Renk: Sari Cins: Golden Davranis: Havlamak Koklamak Köpek Özellikler (Durum): Durum: Isim Renk Cins Davranis: Havlamak Koklamak köpek nesnelerinin yaratilmasi Karabas Rintintin Özellikler (Durum): Durum: Isim: Karabas Renk: Siyah Cins: Kurt Davranis: Havlamak Koklamak Özellikler (Durum): Durum: Isim: Rintintin Renk: Kahve Cins: Sokak Davranis: Havlamak Koklamak 6

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 ; 7

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. 8

#include <iostream> using namespace std; class Ornek1 ; public: int i; void yaz() int main() cout<<"i= "<<i<<endl; // Veri üye // Fonksiyon üye Ornek1 x; // Ornek1 sınıfı tipinde x nesnesi tanımlanır x.i = 5; x.yaz(); return 0; // x nesnesinin i üyesine 5 atanır. // x nesnesinin yaz() fonksiyonu çağırılır. ÇIKTI i=5 Ornek i yaz() x 9

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ı.üyeismi Örnek: x.i = 5; x.yaz(); 10

#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; ÇIKTI i= 5 y= 5.2 z= 9 11

int main() Ornek2 nsn; nsn.i = 5; nsn.y =5.2; nsn.z =9; nsn.yaz(); return 0; // X private olarak tanımlanmış y üyesine erişemeyiz. // X private olarak tanımlanmış z üyesine erişemeyiz. 12

#include <iostream> using namespace std; class S // S isimli sınıf tanımı public: int a; ; int main() S m,n; n.a=8; ÇIKTI n nesnesinin a uyesi: 8 m nesnesinin a uyesi: 8 ref referansinin a uyesi: 8 ref referansinin a uyesi: 7 kere dizisinin 2. nesnesinin a uyesi: 6 // S tipinde m ve n isminde iki nesne tanımlanır. // 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; 13

S m,n; a 8 a 8 n m S &ref=n; ref.a=7; a 7 ref n S kere[3]; kere[2].a=6; a 0 1 2 a a 6 kere 14

İ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) 15

#include <iostream> using namespace std; class Ornek4 public: int i; void yaz(); ; void Ornek4::yaz() cout<<"merhaba"<<endl; cout<<"i degeri = "<<i<<endl; int main() Ornek4 x; x.i=5; x.yaz(); return 0; // Fonksiyon protipi // Fonksiyon tanımı ÇIKTI Merhaba i degeri 5 16

#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; n 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; al() 0 10 sakla() in ÇIKTI n = 0 n = 10 17

Bir sınıf üyesinin değerini değiştiren fonksiyonlara değiştirici fonksiyon (mutator function)adı verilir. Sınıf üyesini değiştirmeyen, sadece bu üyeleri döndüren fonksiyonlara erişimci fonksiyon (accessor function) ismi verilir.

#include <iostream> using namespace std; #define SINIF_MEVCUDU 2 class 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; ;

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; ÇIKTI Ogrenci 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

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.

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

#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; double r; cout<<endl<<"daire yaricapi: "; cin>>r; ÇIKTI Daire yaricapi: 4 r=4 alan=50.24 cevre=25.12 // Daire tipinde d isimli bir nesne yaratı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;