Nesne Yönelimli Programlamaya Giriş - 2. Cem Ahmet MERCAN 16/04/2009

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

BTEP243 Ders 3. class Yazım Kuralı:

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

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

Programlama Dillerinde Kullanılan Veri Tipleri

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Hafta 13 Fonksiyonlar

YZM 2105 Nesneye Yönelik Programlama

BİLG Dr. Mustafa T. Babagil 1

BİL-142 Bilgisayar Programlama II

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

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

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

1 PROGRAMLAMAYA GİRİŞ

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

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

YZM 2105 Nesneye Yönelik Programlama

Kalıtım (Inheritance)

Nesneye Yönelik Programlama (OOP) 7.Hafta

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

NESNE TABANLI PROGRAMLAMA

Dr. Fatih AY Tel: fatihay@fatihay.net

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

İlk Konsol Uygulamamız 2 İlk Windows Uygulamamız 9.Net Framework Yapısı 18 Neler Öğrendik 19. Veri Tipleri 24 Tanımlı Veri Tipleri 27 Basit Tipler 28

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

YZM 2105 Nesneye Yönelik Programlama

BİL-141 Bilgisayar Programlama I (Java)

YZM 2116 Veri Yapıları

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

11- FONKSİYONLAR (FUNCTIONS)

C++ Dersi: Nesne Tabanlı Programlama

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.

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

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

C++ Dersi: Nesne Tabanlı Programlama

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

NESNE MODELLERİ : SINIFLAR

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

#ifndef COMPLEX_H #define COMPLEX_H

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Nesne Yönelimli Programlama

Timer İle arka plan renk değişimi

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

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

Nesne Yönelimli Programlama

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.

Diziler İndisli Değişkenler

C++ Dersi: Nesne Tabanlı Programlama

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

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

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

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

ALGORİTMA VE PROGRAMLAMA I

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

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

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

MatLab. Mustafa Coşar

C++ Dersi: Nesne Tabanlı Programlama

elemanlarının gezilmesine yönelik bir örnek sunulmuştur, inceleyiniz.

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

10/17/2007 Nesneye Yonelik Programlama 3.1

Nesne Yönelimli Programlama

PROGRAMLAMAYA GİRİŞ DERS 2

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

C# Metotlar ve Metot Tanımlama

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

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

ALGORİTMA VE PROGRAMLAMA II

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

Sunum İçeriği. Programlamaya Giriş

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Java da Program Denetimi ve Operatörler

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

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA

MOBIL UYGULAMA GELIŞTIRME

Fatura Dinamik Kodlama İyileştirmeleri

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

HSancak Nesne Tabanlı Programlama I Ders Notları

Hafta 12 Karakter Tutan Diziler

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.

HSancak Nesne Tabanlı Programlama I Ders Notları

VERİ YAPILARI DERS NOTLARI BÖLÜM 4 STACK (YIĞIN, YIĞIT) Yard. Doç. Dr. Deniz KILINÇ

C++ Dersi: Nesne Tabanlı Programlama

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

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

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

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

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Öğr. Gör. Serkan AKSU 1

Nesne Tabanlı Programlama

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

/*int sayi1, sayi2,toplam=0;

Dizi ( Array ) ve Dizgi ( String )

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

Transkript:

Nesne Yönelimli Programlamaya Giriş - 2 Cem Ahmet MERCAN http://www.be.itu.edu.tr/~mercan/ 16/04/2009

Nesne Yönelimli Programlama Kavramlar Class (Sınıf): Nesneyi tanımlayan teorik yapıdır. Nesnenin yetenek ve davranışlarını tanımlar. Nesneler oluşturulurken kullanılır. Sadece bir tarif ya da plandan ibarettir. Kendisi çalıştırılamaz. Veri tutamaz.

Nesne Yönelimli Programlama Kavramlar Object (Nesne)/ Instance (Örnek): Sınıfla tanımlanan yapının işleyen, çalışan, veriyi saklayıp, fonksiyonları çağıran ürün 'üdür. Sadece sınıfında tanımlanan özellikleri gösterir. Tarife göre yapılan kek, plana göre yapılan ev gibidir.

Nesne Yönelimli Programlama Kavramlar Interface (Arayüz): Sınıfla tanımlanan yapının (nesnenin), dış dünya ile iletişimi için hazırlanmış yöntemler (methods) bütünü. Message (Mesaj): Sınıfla tanımlanan yapının (nesnenin), dış dünya ile iletişimi için hazırlanmış yöntemlerden (methods) bir tanesi.

Object-Oriented Programlama 1 2 3 4 5 6 7 8 9 10 Global Değişken G Yerel Değişken M Method 4 Komut int int double Protected: Public: Yerel Değişken Z Komut Method 3 char double Komut Değiş. Sonu int Method 1 Method 2 Method 3 Method 4 int

Nesne Yönelimli Programlama Kavramlar Abstraction: Genelleştirme, sadeleştirme Encapsulation: Gizleme, koruma, izin vermeme Inheritance: Miras alma, özelliklerini devralma Polymorphism: Çok biçimlilik, birden fazla çeşiti aynı anda desteklemek.

Nesne Yönelimli Programlama Constructor: Kavramlar Sınıftan nesne üretildiği anda otomatik olarak çalıştırılan fonksiyondur. Destructor: Nesne sonlandırılmadan önce otomatik olarak çalıştırılan fonksiyondur.

Programlamada İstenen Özellikler Minimum Karmaşıklık Bakım Kolaylığı Taşınabilirlik Genişleyebilirlik Yeterli ve Gerekli Miktarda Özellik İçermek Yeniden Kullanılabilirlik Yüksek Çağrılma / Düşük Çeşitte Çağırma Bölümler Arası Maksimum Ayrışma Katmanlı Yapıda olmak Standart (Tanıdık ve Anlaşılabilir) bir yapı

Abstract Data Type(ADT) Genel Veri Tipi Gerçek hayatta kullandığımız, özellikleri belirli, tipik bir bilgiyi programımızda, günlük hayattakine mümkün olduğunca benzer bir yapı halinde kullanabilmemize yarar. Veriyi gerçek hayattaki haline daha benzer tutarak, programı daha anlaşılır kılar. Nesne yönelimli programlama (OOP)'nın iyi çalıştığı bir alandır, sıkça kullanılır. İyi bir örnek oluşturur, anlaşılması da kolaydır.

Abstract Data Type(ADT) Örnek - Tarih Bir belgede tarih sorulur. Ayrı ayrı gün, ay, yıl sorulmaz. Tarih bilgisi, pek çok yerde karşımıza çıkar. Genel yapısı sabittir. Bellirli bir duruma özel değildir. Bu hali ile tarih bilgisini programlarımızda kullamamız için hazırlanacak bir yapı pek çok yerde değişiklik yapılmadan kullanılabilir.

Sorunlar: Abstract Data Type(ADT) Örnek - Tarih Tarih bilgisi günlük hayatta değişik şekillerde ifade edilebilir. Göreceli (17 Mayıs, Dün, Bugün) ya da Kesin (11/05/96, 12 Aralık 2006) bir şekilde ifade edilebilir. Değişik ifade şekileri olsa da, hepsi aynı bilgiyi tutar. Tutarlı şekilde tarih bilgisini sunar. Ayrıca matematik işleri için kendine has bir yapısı vardır: 23/05/98+10gün=03/06/98

Abstract Data Type(ADT) Örnek - Tarih Girilen ya da hesaplanan her değerin tarih açısından doğruluğu sınanmalı ki, çok zor bir iş. Hesaplamalar çok karmaşık olacaktır. (30 gün sonrası hangi tarih?) Görüntülenirken değişik gösterimler gerekecektir.

Abstract Data Type(ADT) Örnek - Tarih Çözüm Seçeneklerimiz: Bir C programında gün, ay ve yıl bilgileri tutmak istersek seçeneklerimiz: 1.Karakter dizisi olarak tutmak 2.Ayrı ayrı (Ya da bir struct içinde) 3 integer olarak saklamak 3.Belli bir tarihten itibaren geçen süreyi, gün ya da saat gibi bir alt türe çevirerek tutmak.

Abstract Data Type(ADT) Genel Veri Tipi Bu dersin ilk bölümünde gördüğümüz Tarih, Kimlik, matrix ve vector sınıfları birer ADT'dir. Tarih örneğinde nesne yönelimli programlama çözümü olarak ADT yapısını kullanırsak: Veri koruma altındadır, gelişi güzel erişilemez. Bir arayüz (interface) aracılığı ile yukarıdaki saydığımız şartlara uyulmasını zorlayabiliriz.

Class Tarih class Tarih { ENCAPSULATION private: int Gun; int Ay; int Yil; Veri (Koruma altında) public: int gun() { return Gun;} int ay() { return Ay;} int yil() { return Yil;} bool ayarla(int g, int a, int y); Arayüz (Veriyi Kullanmak için) };

Class Tarih class Tarih { private: int Gun; int Ay; int Yil; public: int gun() { return Gun;} int ay() { return Ay;} int yil() { return Yil;} bool Tarih::ayarla(int g, int a, int y) { if ((g>0)&&(g<=31)) return false; if ((a>0)&&(a<=12)) return false; if ((y>0)&&(g<=9999)) return false; Gun=g; Ay=a; Yil=y; return true; } }; bool ayarla(int g, int a, int y); ABSTRACTION

Class Tarih Tarih bayram; Tarih tatiller[20]; Tarih * birgun; tatiller[0].ayarla(1,1,2010); x=tatiller[5].gun(); birgun->ayarla(1,11,1111); birgun=&bayram; // ENGELLENEN İFADELER bayram.gun=23; bayram.ayarla(23,4,2009); cout<< Gün: <<bayram.gun(); bayram.ay=4; bayram.yil=2009; cout<< Ay: <<bayram.ay(); cout<< Yıl: <<bayram.yil(); birgun->ayarla(12,26,2009); birgun->ayarla(-1,0,-19);

Abstract Data Type(ADT) Detayların saklanması Faydaları Değişiklikler, programda değişiklik gerektirmez Arayüz daha anlaşılır olur. Optimizasyon merkezi olacağından daha kolay Program belirgin bir şekilde daha doğru olur. Daha okunaklı ve kendi kendini açıklayıcı kod. Veriler programın içine dağıtılmaz. Ayrıntılı teknikler yerine, gerçek hayattakine benzeryen yapılarla çalışmanın rahatlığı

Class Fatura class Fatura { private: Tarih Kesim_tarihi; HAS-A RELATIONSHIP string Firma_adi; int Tutar; public: int fatura_gun() { return Kesim_tarihi.gun();} int fatura_ay() { return Kesim_tarihi.ay();} int fatura_yil() { return Kesim_tarihi.yil();} bool gir(int g, int a, int y, string firma, int tutar); };

Class Fatura2 - Inheritance class Fatura2 : public Tarih { private: string Firma_adi; IS-A RELATIONSHIP int Tutar; public: bool gir(int g, int a, int y, string firma, int tutar); };

Class Fatura2 - Inheritance class Fatura2 : public Tarih { private: }; public: string Firma_adi; int Tutar; bool gir(int g, int a, int y, string firma, int tutar); PUBLIC class Tarih { private: int Gun; int Ay; int Yil; public: int gun() { return Gun;} int ay() { return Ay;} int yil() { return Yil;} bool ayarla(int g, int a, int y); };

Class Fatura / Fatura2 // HAS-A RELATIONSHIP Fatura kanepe; GUN=kanepe.fatura_gun() // IS-A RELATIONSHIP Fatura2 kanepe; GUN=kanepe.gun() kanepe.gir(23,4,2009); kanepe.gir(23,4,2009); kanepe.ayarla(2,3,2000);

Class Fatura3 - Inheritance class Fatura3 : private Tarih { private: string Firma_adi; IS-A RELATIONSHIP int Tutar; public: int fatura_gun() { return gun();} int fatura_ay() { return ay();} int fatura_yil() { return yil();} bool gir(int g, int a, int y, string firma, int tutar); };

Class Fatura3 - Inheritance class Fatura3 : private Tarih { private: }; public: string Firma_adi; int Tutar; bool gir(int g, int a, int y, string firma, int tutar); PRIVATE class Tarih { private: int Gun; int Ay; int Yil; public: int gun() { return Gun;} int ay() { return Ay;} int yil() { return Yil;} bool ayarla(int g, int a, int y); };

Abstract Data Type(ADT) Constructor Nesne oluşturulurken otomatik olarak çalıştırılır. C++'da sınıfın adını taşıyan ve geri dönüş değeri olmayan fonksiyonlar constructor'dur. Örneğin: Tarih::Tarih(void){ Gun=1; Ay=1; Yil=1; } // Programda kullanımı Tarih a; cout<<a.gun(); //ekrana 1 yazar

Abstract Data Type(ADT) Constructor Parametre alabilir. Parametreli tanımlandı ise: Tarih::Tarih(int gun, int ay, int yil){ ayarla(gun,ay,yil); } // Programda kullanımı Tarih a(23,5,2009); cout<<a.gun(); //ekrana 23 yazar Aynı isimde birden fazla fonksiyona (parametreleri farklı olmalı, mesala 2 constructor) fonksiyon aşırı yüklemesi (overloading) denir.

Abstract Data Type(ADT) Overloading Parametreleri farklı ama aynı isimde birden fazla fonksiyon tanımlanmasıdır. Parametrelerin farklılığında, parametre isimleri Ya da fonksiyonun geri dönüş değeri dikkate alınmaz, sadece çağırılan parametrelerin tiplerine bakılır. Bu tipler farklı olmalıdır. Class'da ya da ayrık fonksiyonlar için mümkündür. Mesala 2 constructor tanımlanabilir.

Class Fatura2 - Overloading class Fatura2 : public Tarih { private: string Firma_adi; int Tutar; public: Tarih(void); Tarih(int gun, int ay, int yil); OVERLOADING bool gir(int g, int a, int y, string firma, int tutar); };

Abstract Data Type(ADT) Polymorphism Miras alınan sınıfta zaten tanımlı olan bir fonksiyon, miras alan sınıfta da (Parametreleri, ismi ve geri dönüş değeri aynı olarak) tekrar tanımlanabilir. Bu durumda miras ağacı boyunca aynı fonksiyon farklı işler yapabilir: // Uygun her tarih kabul Tarih a; a.ayarla(2,5,2003); // Firmadan eski tarihleri kabul etme Fatura2 b; b.ayarla(4,5,2005);

Class Fatura2 - Polymorphism class Fatura2 : public Tarih { private: string Firma_adi; public: int Tutar; POLYMORPHISM // Tarih ile ayni isimde ayarla fonksiyonu, ayni tipte parametreler bool ayarla(int gun, int ay, int yil); bool gir(int g, int a, int y, string firma, int tutar); };

Abstract Data Type(ADT) Destructor Nesne sonlandırılırken otomatik olarak çalıştırılır. C++'da sınıfın adının başında ~ taşıyan ve geri dönüş değeri ve parametresi olmayan fonksiyon destructor'dur. Ayrılan hafızaların serbest bırakılması Ya da dosya kapatılması gibi işler için kullanılır. Örneğin: Tarih::~Tarih(void){ free(hafiza); }

Referanslar (1) Code Complete, second edition, Steve McConnell, Microsoft Press, ISBN:0-7356-1967-0 (2) Introduction to Object-Oriented Programming Using C++, Peter Müller, http://gd.tuwien.ac.at/languages/c/c++oop-pmueller/tutorial.html