Nesneye Yönelik Programlama

Slides:



Advertisements
Benzer bir sunumlar
MAP SINIFI. MAP C + + da Haritalar değer çiftlerini benzersiz anahtar içeren birleşmeli konteyner olarak sıralar. Haritalar onların anahtarlarına göre.
Advertisements

Nesneye Yönelik Programlama
Fonksiyonlar - Functions
Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
TEMEL C PROGRAMLAMA DERSİ - 1
Nesneye Yönelik Programlama
Nesneye Dayalı Programlama
C PROGRAMLAMA DİLİNE GİRİŞ
C Programlama Diline Giriş
Bölüm 4 İşlevlerve Modüler Programlama. 1 / 8 İşlev Tanımı /* İşlev açıklama satırı */ ( ) { }
Nesneye Dayalı Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
Sınıflar, Nesneler ve Metodlar
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
Nesneye Dayalı Programlama
Derleyici Araçları FLEX & BISON
Erişim Denetimi, Fonksiyon
Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar
C++ Yapısı Giriş-Çıkış Komutları Döngü Komutları
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Nesneye Dayalı Programlama
C ile Programlamaya Giriş
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.
Önceki Dersi Hatırlama !!
Nesneye Yönelik Programlama (12. Sunu). İsim Uzayları (Namespaces) Sınıfınızda Deniz adında iki öğrenci olduğunu kabul ediniz. Böyle bir durumda bu öğrencileri.
Bilgisayar Programlama
Kalıtım , Sınıf Asli Ergün.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
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.
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 ++ Ders.
Ders İçerik Sunusu Maltepe Üniversitesi
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C++.
Sınıflar, Nesneler ve Metodlar
 2006 Pearson Education, Inc. All rights reserved. Görsel C# ile Windows Programlama Güz 2009 (2. Hafta)
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
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bölüm 10: Program Ayrıştırma
BİLGİSAYAR programlama II
Hafta2 Rekürsif Algoritmalar
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 dili kullanıcıya kendi ihtiyacı olan bir fonksiyonu yazma imkanı vermiştir. Bir sayının faktöriyelini almaya ihtiyaç duyduğumuzu ve aynı zamanda asal.
PROGRAMLAMAYA GİRİŞ.
BM-103 Programlamaya Giriş Güz 2016 (9. Sunu)
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Diline Giriş
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
5- class & object Nesne Yönelimli Programlama - i
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
Soyut veri tipleri ve kapsülleme kavramları
YAPISAL PROGRAMLAMA Hafta-6
Bölüm 10: Kayıtlar – Records (structs)
Bölüm 6: Kullanıcı Tanımlı Fonksiyonlar I
Kurucular(Yapıcılar), Yıkıcılar
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Nesneye Yönelik Programlama (5. Sunu)

Nesneye Yönelik Programlama (Object Oriented Programming – OOP)

Temel Kavramlar Nesneye Yönelik Programlama (Object-Oriented Design-OOD) (Sadece int, double yeterli mi?) Sınıf (Class)(Kullanıcı Tanımlı Veri Tipi) (User-defined Data Type) ( Deniz a;) Üye Değişkenler (Data Members) (Attributes) Üye Fonksiyonlar (Member Functions) (Behaviors) Nesne (Object) (Bir fabrikada üretilen aynı otomobiller) İçerik Gizleme (Information Hiding) Tanım (Definition-header file) ve Uygulama (Implementation) Dosyalarının Birbirinden Ayrılması Yapıcılar (Constructors) Yıkıcılar (Destructors)

Temel Kavramlar Üyelere Ulaşım Belirteçleri (Member Access Specifiers) (public ve private) Üyelere Ulaşım Operatörleri (Member Access Operators) (nokta – dot (.) ve ok – arrow (->) Operatörleri)  #ifndef, #define ve #endif Önişlemci Direktifleri Kapsam Belirleme Operatörü (Scope Resolution Operator, ::)

3 Dosyaya İhtiyaç Var Zaman.h Zaman.cpp Yurutucu.cpp Başlık (Header) Dosyası veya Sınıfın Tanım Dosyası (Definition-Declaration) #include "Zaman.h" Sınıfın Uygulama Dosyası (Implementation) #include "Zaman.h" İçerisinde main fonksiyonu bulunan ve sınıfın nesnelerinin kullanılabildiği veya sınıfın test edildiği işletme dosyası Zamanı Bir Sınıf Olarak Nasıl Temsil Edebiliriz?

Tanım Dosyası (Definition) Zaman.h Tanım dosyası içerisinde private üye değişkenlerin deklarasyonu ile public/private üye fonksiyonların prototipleri yer alır. Tanım Dosyası (Definition) ifndef, define ve endif önişlemci direktifleri Zaman Sınıfı tanımının projenin birden fazla dosyası içerisinde kullanımının nesne kodu (object code) bünyesinde tekrarını engeller. #ifndef ZAMAN_H #define ZAMAN_H class Zaman { public: Zaman();//Yapıcı (Constructor) void ZamaniAyarla(int,int,int );//saat,dakika,saniye void ZamaniYazdir(); private: int saat; //0-23 int dakika;//0-59 int saniye;//0-59 };//; 'e DİKKAT!!!!!!!!! #endif

Uygulama Dosyası (Implementation) Zaman.cpp Uygulama Dosyası (Implementation) Uygulama dosyası içerisinde public/private üye fonksiyonların tanımları (yapıcılar ve yıkıcılar dahil) yer alır. Üye değişkenler uygulama dosyası içerisinde global bir kapsama sahiptirler. #include "Zaman.h" #include <iostream>//cout #include <iomanip> //setfill ve setw using namespace std; //Zaman Sınıfının Yapıcısı Sınıfın Her Bir Üye Değişkeninin //İlk Değerini Sıfır Olarak Ayarlar. Böylece Sınıfın Bütün //Nesneleri Belirli Bir İlk Duruma Sahip Olurlar. Zaman::Zaman()//::Kapsam Belirleme Operatörü { saat=dakika=saniye=0; } void Zaman::ZamaniAyarla(int h,int m,int s) saat=(h>=0 && h<24) ? h : 0; //Saati Doğrula dakika=(m>=0 && m<60) ? m : 0;//Dakikayı Doğrula saniye=(s>=0 && s<60) ? s : 0;//Saniyeyi Doğrula //Zamanı HH:MM:SS Formatında Ekrana Yazdır void Zaman::ZamaniYazdir() cout<<setfill('0')<<setw(2)<<saat<<":" <<setw(2)<<dakika<<":"<<setw(2)<<saniye<<endl; cout<<setfill('x')<<setw(10)<<77<<endl; xxxxxxxx77

İçinde main Olan ve Sınıfın Nesnesinin Kullanıldığı, Sınıfın Test Edildiği Dosya Yurutucu.cpp #include "Zaman.h" #include <iostream>//cout ve endl using namespace std; int main() { //Zaman Sınıfının Varsayılan (Default) Yapıcısı Çağrılır Zaman z; //z Nesnesinin Üye Değişkenlerinin İlk Değerlerini Yazdır cout<<"Baslangic Zamani: "; z.ZamaniYazdir();//00:00:00 z.ZamaniAyarla(13,27,6);//Zamanı Değiştir cout<<"Yeni Zaman: "; z.ZamaniYazdir();//13:27:06 z.ZamaniAyarla(99,99,99);//Geçersiz Değerlerle Zaman Ayarı cout<<"Gecersiz Zaman: "; return 0; }

Microsoft Visual Studio programının intellisense özelliğine dikkat ediniz.

Herhangi Bir Müşteriye Ait Bir Banka Hesabını Bir Sınıf Kullanarak Nasıl Temsil Edersiniz? Hangi Üye Değişkenleri ve Üye Fonksiyonları Kullanırsınız?

Tanımlanan “Sınıf” lar Nasıl Kullanılırlar Tanımlanan “Sınıf” lar Nasıl Kullanılırlar? (Bir Sınıfın Nesnesi Nasıl Oluşturulur?) Zaman Sınıfı Örneği Zaman gunBatimi; Zaman dizi[5]; Zaman *zamanPtr=&gunBatimi;

Sınıf Aidiyet Kavramı ve Üyelere Erişim Bir sınıfın faaliyet alanında (sıkopunda): Üye Değişkenler - Nitelikler (Data Members) Sınıf tanımında (definition) deklare edilen değişkenlerdir. Üye Fonksiyonlar - Davranışlar (Member Functions) Sınıf tanımında (definition) deklare edilen ve “üye değişkenler” i manipule etmek için kullanılan fonksiyonlardır. Bu fonksiyonların tanımı .cpp dosyası içerisinde verilir.

Sınıf Aidiyet Kavramı ve Üyelere Erişim (Devam) Bir sınıfın faaliyet alanı içerisinde “Üye Değişkenler” bütün üye fonksiyonların erişimine açıktır. Bir sınıfın nesneleri sınıfın bütün public üye değişkenlerine ve public üye fonksiyonlarına kısıtlamasız erişebilirler. Bir sınıfın nesneleri sınıfın private üye değişkenlerine ve üye fonksiyonlarına ERİŞEMEZLER. private üye değişkenlerine ve private üye fonksiyonlarına sadece sınıf içerisinden ulaşılabilir.

private bir Üye Fonksiyon Olabilir mi? Cevap: Evet. Bu tür fonksiyonlara yardımcı fonksiyonlar (helper or utility functions) denir ve public üye fonksiyonların işlerini kolaylaştırmak için kullanılırlar. Böyle bir fonksiyona sınıfın nesneleri ulaşamazlar.

Nokta (Dot) Üyelere Erişim Operatorü (.) Sınıf Aidiyet Kavramı ve Üyelere Erişim (Devam) Nokta (Dot) Üyelere Erişim Operatorü (.) Bir nesnenin, ait olduğu sınıfın public üyelerine ulaşabilmesine imkan tanır. Ok (Arrow) Üyelere Erişim Operatorü (->) Bir nesneye işaret eden pointer ın, ait olduğu sınıfın public üyelerine ulaşabilmesine imkan tanır.

Programların modifiye edilmesini kolaylaştırır. Sınıf Tanımının (Definition) ve Uygulamasının (Implementation) Birbirinden Ayrılması (İçerik Gizleme – Information Hiding) Programların modifiye edilmesini kolaylaştırır. Uygulama dosyasında yapılan herhangi bir değişiklik sınıfın arayüzü (interface) değişmediği müddetçe sınıf kullanıcısını etkilemez.

Programlama Pratiği Bir sınıfın kullanıcıları sınıfın uygulama dosyasındaki kodu bilmek zorunda değildirler. Bununla birlikte bu sınıfı kullanabilmek için sınıfın object code una (yani uygulama dosyasının derlenmiş versiyonuna) ulaşabilmelidirler. Bu sayede bağımsız yazılım firmaları sınıf kütüphaneleri yazıp satabilirler. Bu tür firmalar sadece sınıfın başlık (header) dosyasını ve object modüllerini kullanıcıya verirler.

Yapıcı (Constructor) Sınıf ile aynı ada sahip, sınıfın üye değişkenlerine belirli bir ilk değer atamak için kullanılan ve geriye hiçbir değer döndürmeyen özel bir üye fonksiyonudur. Bir sınıf birden fazla yapıcıya sahip olabilir. (Fonksiyonların Aşırı Yüklenmesi?) Kendilerine hiçbir argüman almayan yapıcılar varsayılan (default) yapıcılar olarak adlandırılırlar.

Yıkıcı (Destructor) Özel bir üye fonksiyonudur. Sınıf ile aynı ada sahiptir ama isminin önünde tilda karakteri (~) bulunur. Örneğin : ~Zaman Bir nesne kapsam dışına çıktığında yok edilir ve bu işlemi perde arkasından yapan (dolaylı) yıkıcıdır. Yıkıcılar hiçbir argüman almazlar ve geriye hiçbir şey döndürmezler. (void bile kullanılmaz.) Bir sınıf sadece bir yıkıcıya sahip olabilir. Eğer kullanıcı bir yıkıcı tanımlamazsa derleyici boş bir yıkıcı tanımlar.

Uygulama Yapıcısı 2 integer parametre kullanan MatematikselIslemler adında bir C++ sınıfı oluşturunuz ve bu sınıfın bir nesnesini main içerisinde deklare ediniz. Sınıfın bu nesnesi, yapıcısına aktaracağı integer parametreleri yine main içerisinde kullanıcıdan klavye aracılığıyla temin etmelidir. MatematikselIslemler sınıfının public tanımlayacağınız EkokuYazdir ve EbobuYazdir adındaki üye fonksiyonları ise, sırasıyla sınıfa yapıcı vasıtasıyla aktarılan integer sayıların en küçük ortak katını ve en büyük ortak bölenini bularak ekrana yazdıran parametresiz iki void fonksiyon olmalıdır.

MatematikselIslemler.h #ifndef MATEMATIKSELISLEMLER_H #define MATEMATIKSELISLEMLER_H class MatematikselIslemler { public: MatematikselIslemler(int,int);//İki Parametreli Yapıcı void EkokuYazdir();//Prototip void EbobuYazdir();//Prototip private: int sayi1;//1. Yapıcı Parametresini Saklayacak Üye Değişken int sayi2;//2. Yapıcı Parametresini Saklayacak Üye Değişken //private Tanımlı Yardımcı (Helper-Utility) Fonksiyonlar //(Sınıf Nesneleri Ulaşamaz) int EkokuHesapla(); int EbobuHesapla(); }; #endif

MatematikselIslemler.cpp #include "MatematikselIslemler.h" #include <iostream> //cout ve endl #include <cmath> //max ve min using namespace std; //2 Parametreli Yapıcının Tanımı MatematikselIslemler::MatematikselIslemler(int s1,int s2) { sayi1=s1; sayi2=s2; } void MatematikselIslemler::EkokuYazdir() //ekok Lokal Bir Değişken.sayi1 ve sayi2 Üye Değişkenler //Üye Değişkenler Uygulama Dosyası İçerisinde Globaldirler. int ekok=EkokuHesapla();//private Yardımcı Fonksiyon cout<<sayi1<<" ile "<<sayi2<<" nin EKOK u: "<<ekok<<endl; int MatematikselIslemler::EkokuHesapla() int maksimum=(int)max((double)sayi1,(double)sayi2); int i=maksimum; for(;i<=sayi1*sayi2;i++) if((i%sayi1)==0 && (i%sayi2)==0) break; return i; void MatematikselIslemler::EbobuYazdir() int ebob=EbobuHesapla();//private Yardımcı Fonksiyon cout<<sayi1<<" ile "<<sayi2<<" nin EBOB u: "<<ebob<<endl; int MatematikselIslemler::EbobuHesapla() int minimum=(int)min((double)sayi1,(double)sayi2); int i=minimum; for(;i>=1;i--) if((sayi1%i)==0 && (sayi2%i)==0)

MatematikselIslemler.cpp

Yurutucu.cpp #include "MatematikselIslemler.h" #include <iostream>//cout using namespace std; int main() { int sayi1,sayi2; cout<<"Iki Tamsayi Giriniz: "; cin>>sayi1>>sayi2; MatematikselIslemler islem(sayi1,sayi2); islem.EkokuYazdir(); islem.EbobuYazdir(); return 0; }