NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

Benzer belgeler
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

BTEP243 Ders 3. class Yazım Kuralı:

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

1 PROGRAMLAMAYA GİRİŞ

C++ Dersi: Nesne Tabanlı Programlama

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

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

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

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Nesneye Yönelik Programlama (OOP) 7.Hafta

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

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

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

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Göstericiler (Pointers)

Pointer Kavramı. Veri Yapıları

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

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

C++ Dersi: Nesne Tabanlı Programlama

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

C++ Dersi: Nesne Tabanlı Programlama

Nesneye Dayalı Programlama

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

Sunum İçeriği. Programlamaya Giriş

HSancak Nesne Tabanlı Programlama I Ders Notları

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

ELN1001 BİLGİSAYAR PROGRAMLAMA I

NESNEYE YÖNELİK PROGRAMLAMA

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

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

8. İŞARETCİLER (POINTERS)

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Lambda İfadeleri (Lambda Expressions)

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

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

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

NESNE MODELLERİ : SINIFLAR

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

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

ALGORİTMA VE PROGRAMLAMA I

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

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

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

Yrd. Doç. Dr. Caner ÖZCAN

Hafta 13 Fonksiyonlar

Ders 8: Metotlar. barisgokce.com

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

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

ALGORİTMA VE PROGRAMLAMA I

YZM 2105 Nesneye Yönelik Programlama

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.

Dr. Fatih AY Tel:

BİLG Dr. Mustafa T. Babagil 1

ALGORİTMA VE PROGRAMLAMA I

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

C Programlama Dilinde Değişkenler

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

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

Pointers (İşaretçiler)

BİL-142 Bilgisayar Programlama II

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

Fonksiyonlar (Altprogram)

Yrd. Doç. Dr. Caner ÖZCAN

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

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

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

Dr. Fatih AY Tel: fatihay@fatihay.net

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

Adım Adım C-II. Eksik kalmış konular

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

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

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

Programlama Dilleri 3

Genel Programlama II

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

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

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

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

C++ Dersi: Nesne Tabanlı Programlama

Yrd. Doç. Dr. Caner ÖZCAN

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

Veri Yapıları Lab Notları 1

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar

Diziler (Arrays) Çok Boyutlu Diziler

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

BMH-303 Nesneye Yönelik Programlama

PROGRAMLAMAYA GİRİŞ DERS 2

Transkript:

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu sunumda Prof. Dr. Yılmaz KILIÇASLAN ın Nesneye Yönelik Programlama dersi sunumlarından faydalanılmıştır.

2 SINIF VE NESNE KAVRAMLARI Sınıf, aynı özellik ve davranışları gösteren varlıkların ortak kümesini belirleyen bir tanımdır. Nesne, ait olduğu sınıftan gelen özelliklerin değerlerinin belli olduğu, sınıfı için tanımlı olan davranışları nasıl sergilediğinin bilindiği somut varlıktır.

3 SINIFLAR Sınıflar, nesneye yönelik programlama yaklaşımını uygulamada gerekli olan ve C deki yapılara (structures) benzeyen, C++ a özgü veri yapılarıdır.

4 YAPILAR - 1 Yapı, farklı veri tiplerini bir küme altında toplayan bir veri tipidir. Eğer tarihler üzerine çok sık işlem yapan bir C programı yazıyorsanız, tarihleri gösteren yeni bir veri tipini yapı (structure) olarak tanımlayabilirsiniz: struct tarih { int ay; int gun; int yil; }; //... struct tarih dogum; dogum.ay = 1; dogum.gun = 23; dogum.yil = 1985;

5 YAPILAR - 2 printf e parametre olarak geçirmek suretiyle bir tarih yapısını yazdıramazsınız. Ya yapının her elemanını ayrı ayrı yazdırmalısınız ya da yapıyı bir bütün olarak yazdırmak için kendi fonksiyonunuzu yazmalısınız: void tarih_goruntule(struct tarih *tr) { static char *isim[] = { zero, ocak, subat, mart, nisan, mayis, haziran, temmuz, agustos, eylul, ekim, kasim, aralik }; printf( %s %d %d,isim[tr->ay],tr->gun,tr->yil);}

6 YAPILAR - 3 Tarihler üzerinde, iki tanesini karşılaştırmak gibi, benzer işlemler yapmak için de, ya yapı elemanlarını ayrı ayrı işlemelisiniz ya da tarih yapılarını parametre olarak kabul edip söz konusu işlemleri sizin için yapan fonksiyonlar tanımlamalısınız.

7 YAPILAR - 4 Tarihleri yapı olarak göstermenin çeşitli dezavantajları vardır: Bir tarih yapısının geçerli bir tarihi içerdiği garanti edilemez. Bir kez tarih veri tipini programlarınızda kullandığınızda, kodlaması üzerinde değişiklik yapmak çok zorlaşır.

8 YAPILAR - 5 Bu problemlerden kaçınmak için daha fazla programlama eforu göstermelisiniz. Örneğin, belirtilen değerlerin geçerliliğini test eden bir fonksiyon kullanabilirsiniz ve yapının eleman sahalarına doğrudan erişmek yerine, erişim fonksiyonları tanımlayabilirsiniz.

9 SINIF BİLDİRİMİ - 1 C++, tanımladığınız yeni veri tiplerinin güvenliğini, bir veri tipi ve bu veri tipi üzerindeki işlemleri aynı anda tanımlamanıza imkan veren sınıflar aracılığıyla sağlar. Sınıf ismi (class name) Özellikler (attributes) Metotlar (methods) Tarih ay gün yıl goruntule

10 SINIF BİLDİRİMİ - 2 Bir sınıf bildirimi, yalnızca verileri değil eleman fonksiyonları da içermesi haricinde, yapı bildirimine benzer: class sınıf_ismi{ özel korumalı veri ve fonksiyonlar erişim_etiketi: veri ve fonksiyonlar erişim_etiketi: veri ve fonksiyonlar //... erişim_etiketi: veri ve fonksiyonlar } nesne_listesi;

11 SINIF BİLDİRİMİ - 3 Örnek: // Tarih sinifi #include <iostream> using namespace std; class Tarih { public: Tarih( int mn, int dy, int yr ); void goruntule(); ~Tarih(); private: int ay, gun, yil; };

12 FONKSİYONLARIN TANIMLANMASI - 1 // Bazı gerekli fonksiyonlar inline int max( int a, int b ) { if ( a > b ) return a; return b; } inline int min( int a, int b ) { if ( a < b ) return a; return b; }

13 FONKSİYONLARIN TANIMLANMASI - 2 // Yapici Fonksiyon Tarih::Tarih( int mn, int dy, int yr ) { static int uzunluk[] = {0,31,28,31,30,31,30,31,31,30 31,30,31}; //366 gun iceren yillari ihmal ediyoruz. ay = max( 1, mn ); ay = min( ay, 12 ); gun = max( 1, dy ); gun = min( gun, uzunluk[ay] ); yil = max(1, yr ); }

14 FONKSİYONLARIN TANIMLANMASI - 3 // Tarih Bilgisi Goruntuleme Fonksiyonu void Tarih::goruntule() { static char *isim[] = { zero, ocak, subat, mart, nisan, mayis, haziran, temmuz, agustos, eylul, ekim, kasim, aralik }; cout << isim[ay] <<, << gun <<, << yil; }

15 FONKSİYONLARIN TANIMLANMASI - 4 // Yikici Fonksiyon Tarih::~Tarih() { // Hicbir sey yapma }

16 SINIFLARIN KULLANIMI-1 // Tarih sinifinin kullanimina bir örnek int main() { // Gecerli bir Tarih bildirimi Tarih dogum1(3, 12, 1985); // Gecersiz bir Tarih bildirimi Tarih dogum2(23, 259, 1966); dogum1.goruntule(); cout << \n ; dogum2.goruntule(); cout << \n ; } return 0;

17 SINIFLARIN KULLANIMI-2 C de tarihleri görüntülemek için her bir yapının adresini ilgili fonksiyona göndermeniz gerekecekti: // C de tarihlerin goruntulenmesi goruntule(&dogum1); goruntule(&dogum2); C++, her bir eleman fonksiyonu bir yapının eleman sahasına erişmekte kullanılan sözdizimine benzer bir sözdizim ile çağırır: dogum1.goruntule(); dogum2.goruntule();

18 SINIFLARIN KULLANIMI-3 C++ daki sözdizim, bir veri tipi ile bu veri tipi üzerinde işlem yapacak fonksiyonlar arasındaki sıkı ilişkiyi vurgulamaktadır. Bu durum, sizin goruntule fonksiyonunu Tarih sınıfının bir parçasıymış gibi düşünmenize yol açar. Fakat, gerçekte bu birleşme yalnızca sözdizimseldir: Her Tarih nesnesi goruntule fonksiyonunun bir kopyasına sahip değildir; her nesne yalnızca kendi veri elemanlarını içerir.

19 SINIFIN ELEMANLARI Görüldüğü gibi, sınıf bildirimi (int tipinde ay, gun, yil sahaları gibi) veri elemanlarına sahip olması yönüyle yapı bildirimine benzemektedir. Fakat, bazı yönlerden de C deki yapı bildiriminden ayrılmaktadır. Örneğin: public ve private anahtar sözcüklerini, (goruntule gibi) fonksiyon bildirimlerini ve (Tarih ve ~Tarih gibi) yapıcı ve yıkıcı olarak adlandırılan özel fonksiyonları içermektedir. Şimdi bu farklara ayrı ayrı bakalım.

20 ERİŞİM DÜZEYLERİ (public ve private)-1 public ve private etiketleri kendilerini takip eden elemanların erişilebilirlik düzeyini belirler. Belirlenen erişim düzeyi bir sonraki etikete ya da sınıf tanımının sonuna kadar devam eder. private elemanlara yalnızca eleman fonksiyonlar erişebilir. (Daha sonra, bu ayrıcalığa arkadaş sınıf veya fonksiyonların da sahip olduğunu göreceğiz.) public elemanlara eleman fonksiyonlar dışında, sınıfa ait nesnenin kapsam alanında olması koşuluyla, programın herhangi bir fonksiyonundan erişilebilir.

21 ERİŞİM DÜZEYLERİ (public ve private)-2 Sınıfa ait olmayan bir fonksiyon bir private elemana erişme girişiminde bulunursa derleyici hata üretir: int main() { int i; Tarih dogum1( 3, 12, 1985 ); i = dogum1.ay;//error: private saha okunamaz! dogum1.gun=1; //Error: private saha degistirilemez! return 0; } Fakat, public elemanlara (örn. goruntule fonksiyonu) erişim mümkündür.

22 ERİŞİM DÜZEYLERİ (public ve private)- 3 Birçok programcının private elemanları bir grupta ve public elemanları bir başka grupta toplamayı tercih etmesine karşın, private ve public etiketleri bir sınıfın tanımında istenilen sayıda yinelenebilir. Bütün sınıf tanımlamalarında varsayılan başlangıç modu private erişim modudur. Fakat, yine de okunurluğu artırmak için bütün bölümleri etiketlemekte yarar vardır. Tarih sınıfında da örneklendiği gibi, C++ da yaygın olan bir konvansiyon public arayüzün bütünüyle fonksiyonlardan oluşturulmasıdır; bir private veriyi bu amaç için tasarlanmış public bir eleman fonksiyon ile görüntüleyebilir ya da değiştirebilirsiniz.

23 ELEMAN FONKSİYONLAR- 1 Eleman fonksiyonların prototipi ait olduğu sınıfın bildirimi içinde yer alır. Sınıf dışında sınıfa ait bir fonksiyon tanımlanırken, fonksiyonun ismi, sınıfın ismi ve kapsam çözümleme operatörü birlikte kullanılır: Tarih::goruntule() Bu gösterim fonksiyonun bir sınıfa ait olduğunu ve isminin bu sınıfın kapsam alanında yer aldığını ifade etmektedir. Bu kapsam alanın dışında aynı isim, başka fonksiyonları adlandırmak için kullanılabilir.

24 ELEMAN FONKSİYONLAR- 2 Her bir versiyonun parametre listesi ile diğerlerinden ayrılması koşuluyla, bir eleman fonksiyonu, herhangi bir diğer fonksiyon gibi aşırı yükleyebilirsiniz. Eleman fonksiyonlar, sınıflarının diğer elemanlarına nesne ismi belirtmeksizin erişebilirler.

25 ELEMAN FONKSİYONLAR- 3 Bir eleman fonksiyon, nesneye işaret eden bir işaretçi aracılığıyla da çağrılabilir: Tarih doğum1( 3, 12, 1985 ) Tarih *tarihptr = &doğum1; tarihptr -> goruntule();

26 ELEMAN FONKSİYONLAR- 4 Bir eleman fonksiyon bir nesne referansı aracılığıyla bile çağrılabilir: Tarih doğum1( 3, 12, 1985 ) Tarih &digertarih = doğum1; digertarih.goruntule();

27 YAPICI FONKSİYONLAR - 1 C de kodladığımız tarih structure ının geçerli değerleri içermeyi doğrudan garanti edememek gibi bir dezavantajı olduğunu görmüştük. C++ da bu tür bir dezavantajı gidermenin bir yolu yapıcı fonksiyon yazmaktır. Yapıcı fonksiyonlar sınıfınızın herhangi bir nesnesinin bildirimi yapıldığında, otomatik olarak çağrılan özel türde ilk değer atama fonksiyonlarıdır; ilk değer almamış nesnelerin kullanımından kaynaklanabilecek hataları engellerler.

28 YAPICI FONKSİYONLAR - 2 Yapıcı fonksiyonun ait olduğu sınıf ile aynı isme sahip olması gerekir. Örneğin, Tarih sınıfının yapıcı fonksiyonu Tarih olarak adlandırılmıştır. #include <iostream> using namespace std; class Tarih { public: Tarih( int mn, int dy, int yr ); void goruntule(); ~Tarih(); private: int ay, gun, yil; };

29 YAPICI FONKSİYONLAR - 3 Tarih yapıcı fonksiyonunun gerçeklemesine baktığımızda fonksiyonun yalnızca nesnenin eleman sahalarına ilk değer atamakla kalmayıp belirtilen değerlerin geçerliliğini de kontrol ettiğini görüyoruz. Bu yapıcı fonksiyonlar aracılığıyla nesnelerin anlamlı değerler içermesini sağlamanın bir diğer yoludur. int main() { Tarih dogum1(3, 12, 1985); // Gecerli bir Tarih bildirimi Tarih dogum2(23, 259, 1966); // Gecersiz bir Tarih bildirimi }

30 YAPICI FONKSİYONLAR - 4 Bir sınıf nesnesinin kapsam alanına her girişinde yapıcı fonksiyon koşturulur. Nesne bildirimi tamsayı bildirimine benzer. Önce veri tipi, ardından da nesnenin ismi belirtilir: Tarih doğum1( 3, 12, 1985 ); Fakat, nesnenin bildirimi parantez içinde bir argüman listesi de içerebilir. Bu argümanlar yapıcı fonksiyona parametre değeri olarak gönderilir ve nesnenin ilk değer atamasında kullanılır.

31 YAPICI FONKSİYONLAR - 5 Bir yapıcı fonksiyon bildiriminde bulunurken, void dahil, döndürülecek herhangi bir değer tipi belirtemezsiniz. Dolayısıyla, bir yapıcı fonksiyon herhangi bir return ifadesi de içermez. Yapıcı fonksiyonlarınızı aşırı yükleyerek, bir sınıf için birden fazla yapıcı fonksiyon bildiriminde bulunabilirsiniz. Gerçekte, bir sınıf tanımlarken herhangi bir yapıcı fonksiyon tanımlama zorunluluğu yoktur. Eğer hiçbir yapıcı fonksiyon tanımlamazsanız derleyici otomatik olarak hiçbir parametre almayan ve hiçbir şey yapmayan bir tane üretir.

32 YIKICI FONKSİYONLAR - 1 Yıkıcı fonksiyonlar, yapıcı fonksiyonların zıt işlevselliğine sahiptirler. Bir sınıf nesnesi kapsam alanının dışına çıkınca otomatik olarak yıkıcı fonksiyon çağrılır. Yıkıcı fonksiyonun görevi bir nesne yok edilmeden önce gerekli bütün `temizlik işlerini yapmaktır. Yıkıcılar nesne yok edilirken çağrılırlar. Sistem hafızayı geri alırken sonlandırma temizliğini yapar, böylece hafıza alanı yeni nesnelerin tutulması için tekrar kullanılabilir.

33 YIKICI FONKSİYONLAR - 2 Yıkıcı fonksiyonların başlarına almak zorunda oldukları tilda (~) sembolü vardır. Yıkıcı fonksiyonun ismi sınıf ismi ile aynıdır. ~Tarih(); Yıkıcı fonksiyonları da açıkça tanımlama zorunluluğu yoktur. Yıkıcı fonksiyonlar aşırı yüklenemez; yalnızca bir tane olmak zorundadırlar. Yıkıcı bir fonksiyon parametre alamaz ve değer döndüremez.