| | C++ ve Nesne Yönelimli Programlamaya Giriş C++ ve Nesne Yönelimli Programlamaya Giriş İyi Bir Programın Özellikleri - Doğruluk (Correctness); Verilen görevin tam olarak yerine getirilmesidir. Bir yazılımı yazmaya başlamadan önce yazılımdan beklenenlerin belirtilmesi gerekir. Yazılım ortaya çıktıktan sonra bu belirlenen özellikler tam olarak sağlanmalıdır.
- Güvenilirlik (Robustness); Beklenmedik nedenlerden dolayı programın çalışması kesilmemeli, yanlış işlemler yapmamalıdır. Program iyi yönde bile olsa kendinden beklenmeyen işlemler yapmamalıdır. Programcı hataları yüzünden kesintiye uğramaması için önlem
- Genişleyebilme (Extendibility); İleri aşamalarda verilen görevlerin değiştirilmesi veya yenilerinin ilave edilmesi kolay olmalıdır. Bunun için basit tasarımlar yaparak karmaşık tasarımlardan uzak durmak gerekir.
- Tekrar kullanım (Reusability); Yapılan tasarım şeklinin yazılan programın veya hiç olmassa modüllerin başka programlar içinde kullanılabilmesidir. Örneğin, bir konuda bir proje içinde kullanılan elamanların /veya modüllerin yeni bir projede tekrar kullanılabilmesi gerekir
- Uygunluk (Compatibility); farklı bilgisayar sistemlerinde aynı ortak özelliklere sahip olunması. Bunun için çeşitli standartların kabul edilip uygulanması gerekir: örnek olarak
- veri dosyası formatının uygunluğu - veri yapılarının uyumluluğu - menu, diyalog, resim, tuş gibi kullanıcı ara yüzünün (user interface) uyumluluğu - Kaynakların kullanımı (Efficiency); bilgisayarın sahip olduğu ve ulaşabildiği tüm ekipmanları en iyi şekilde kullanmak. Eksik kullanmamak, kullanmadığı halde diğer programlara kullandırmamazlık etmemek.
- Taşınabilirlik (Portability); çoğu zaman bir yazılım ürünün geliştirildiği bilgisayar ortamından farklı bilgisayar ortamına taşınarak çalıştırılması gerekir. Bu iki şekilde olabilir:
- Kaynak uyumlu (Source Compatable); yazılan programın yazıldığı bilgisayar sisteminden farklı bir sistemde tekrar derlenerek çalıştırılabilmesi.
- İkili kod uyumlu (Binary Compatable); programın yazıldığı ortamda derlenip, icra edilebilir dosyası (executable file) elde edildikten sonra farklı bir ortama taşınarak çalıştırılması. Yazılım geliştirilmesi acısından asıl üzerinde durulması gereken kaynak kodun taşınabilirliğidir. - Kontrol edilebilirlik (Verifiability); bir yazılımın hatalı durumlar ile karşılaşması halinde programın devam etmesine engel olan ve hatta programı çalıştırmayan hatalar ortaya çıktığında kullanıcıya ve programcıya hatanın ne olduğu konusunda yeterli bilginin verilebilmesidir.
- Bütünlük (Integrity); istenmeyen erişimler ve değiştirmeler karşısında program, veri, dokümantasyon gibi yazılım birleşenlerinin korunması. Bir programcının veri veya index dosyalarının programın bilgisi dışında kaybolması programın çalıştığında bunu anlayıp rapor etmesi buna örnek olarak verilebilir
- Kolay kullananım (Easy use); yazılım ürününü kullanan kişinin ürünü kolayca öğrenmesi, sorunsuz kullanabilmesi, sonuçlarını yorumlayabilmesi, hatalarını düzelterek işlerini fazla zahmete girmeden yapabilmesidir.
- Beraber çalışma (Interoperability); bir yazılım ürünün ihtiyaç duyduğu bir diğer yazılımı çağırabilmesi veya diğer bir yazılım tarafından çağrılabilmesi özelliğidir. Bu durumda iki program ard arda çalışma dışında bir birleri ile veri alışverişinde bulunabilmelidirler.
Programlama Dilleri Makine Dili:
Tüm komutlar sayılar şeklindedir.+1300042774
+1400593419
+1200274027 Assembler:
Temel bilgisayar işlemleri kısaltmalarla ifade edilir. LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY Yüksek Seviyeli Diller: Komutlar konuşma dili gibidir. Genel matematik notasyonu kullanılır. grossPay = basePay + overTimePay C++’ nin Tarihçesi - C++, C’den geliştirilmiştir.
- ANSI C, C için dünyaca kabul edilen bir standarttır.
- C++, C’ ye ‘Nesneye Yönelik Programlama (OOP)’ yetenekleri kazandırmıştır. Bu ise daha kolay anlaşılabilir ve düzeltilebilir bir program yazabilmeyi kolaylaştırır !
C++’ ın yapısı - C++ programları, class (sınıf) ve function (fonksiyon) denilen parçalardan oluşturulur.
- C ++ Standart Kütüphanesi, tüm programcıların kullanabileceği zengin bir sınıf (class) ve fonksiyon (function) kolleksiyonu sunar.
Bir Programın Aşamaları: - Yazım
- Önişleme
- Derleme
- Bağlama
- Yükleme
- Çalıştırma
3 g++ -c test.cpp 4
g++ -o test test.o -lm
6 ./tes - C ve C++ platformlar arasında taşınabilir kodlar üretir.
- C++, nesne yönelimli programlama yeteneklerinin yanısıra yapısal ve disiplinli programlamaya olanak veren özellikler sağlar
Bir C++ Programı İlk Programımız: Bir yazı yazdırmak -standart ‘output stream’ nesnesidir,
-ekrana çıktı verir.
-std:: ‘ namespace ’ in adını gösterir, ‘using’ kullanılırsa yazılması gerekmez. -stream ekleme operatörüdür.
-sağındaki değeri ‘output stream’e gönderir.
-std::cout << “Welcome to C++!\n”; - \ ‘ escape ’ karakteri özel karakterleri yazdırmak için kullanılır:
Karşılaştırma Operatörleri Nesne Yönelimli Programlama (OOP) - Dünyayı düşündüğümüz doğallıkla programlama yapabilmemizi sağlar.
- Nesne yönelimli programlama tekniği kullanarak geliştirilmiş programlar daha güvenilir, dayanıklı ve kolay geliştirilebilirler.
- Nesne’yi, belirlenmiş bir işlevi yerine getirebilecek altyapıyı hazırlayan, bu amaçla çeşitli fonksiyonlar içeren bir yapı olarak tanımlayabiliriz
Nesne Nedir? - Gerçek dünyadaki nesnelere benzeyen tekrar kullanılabilir yazılım parçalarıdır.
- Tek başlarına bir anlamları vardır: zaman, ses, video nesnesi, boyacı, sekreter gibi.
- Daha anlaşılır, değiştirilmesi daha kolay bir yapı sunarlar.
- Belirlenmiş işlevleri yerine getiren, bunun içinde çeşitli fonksiyonlar içeren bu yapı değişkenleri de bünyesinde bulundurabilir. Fakat asıl, işlevini belli edecek fonksiyonları bünyesinde bulundurmasıdır. Bu özelliğe Paketleme (Encapsulation) adı verilir.
- Paketlenecek fonksiyonların nasıl bir işlev göstereceği belirtilmeksizin, sadece nasıl kullanılacağının belirtilmesine Soyutlama (Abstraction) adı verilir.
- Paketleme ve Soyutlama bir nesneyi belli etmek için yeterli iki özelliktir.
Nesne Nedir? (Türeme & Kalıtım)
Bir oto tamircisi nesnesi düşünelim. Bu oto tamircisinin üç oğlu olduğunu ve bunların her birini yetiştirdikten sonra , birer konuda uzmanlaşmalarını sağladığını düşünelim.
Burada Oto Boyacısı, Oto Kaynakçısı ve Oto Elektrikcisi türeyen nesnelerdir. Oto tamircisi ise taban nesnedir. Türeyen nesneler taban nesnenin özelliklerini göstereceklerdir. Oto boyayacaklar, kaynak yapacaklar, karbüratör ayarlayacaklar. Yeni nesne kendisine yeni özellikler katabileceği gibi devraldığı özellikleri de geliştirebilir. Bu özelliğe Türeme (Derivation), özellikleri devralmaya da Miras alma veya Kalıtım (Inheritance) adı verilir. Nesne Nedir? (Benzerlik) Oto tamircisi örneğine devam edersek, Burada üç önemli özellik göze çarpar: - Türeyen nesneler taban nesnenin özelliklerini koruyarak devam ettirip kullanabilirler
- Türeyen nesneler türedikleri nesnelerin (taban nesnelerin) özelliklerini değiştirebilirler
- Türeyen nesneler yeni özellikler kazanabilir veya mevcut özellikleri kaybedebilirler
O zaman bir sistem içerisinde ister bir nesneden türemiş nesneler bulunsun, isterse bir birinden farklı nesneler bulunsun, bu nesnelerin benzer özellikleri olabilir ve bu özellikler aynı isim ile anılır. Buda benzer isimde fakat farklı nesnelerin üyesi olan üyelerin ortaya çıkmasına neden olur. Bu durum nesneler arasındaki benzerlikleri yansıtır. Bu duruma Çoklubenzeşim (Polymorphism) adı verilir. Nesne - Özellikleri (Attributes, Properties) vardır: renk, şekil, boyut, genişlik, yükseklik vb.
- Davranışları (Behaviors, Actions) vardır: her nesnenin kendine özgü davranışları vardır. Top yuvarlanır, ağaç yanar.
- Yeni nesneler Mirasla (Inheritance) eski (parent) nesnelerin bazı özellik ve yöntemlerine sahip olurlar.
- Bilgiler Gizlenebilir: Nesnelerin iş görmesi için diğer nesneler hakkında bilgi sahibi olması şart değildir.
- Soyutlama (Abstraction) sayesinde bir nesne, spesifik tanımlamalar ve sadece o nesneye ait olabilecek detaylardan kaçınarak, ayrıntılarda boğulmadan kullanılabilir.
- Sınıflar (Class) nesnelerin temelini oluşturulurlar.
Yapısal Programlama (Structured-Programming) - Anlaması, test etmesi, değiştirmesi kolay programlar yazmayı teşvik eder ve kolaylaştırır.
- Her zaman sadece bir girişi, bir çıkışı olan program yapıları kullanır.
- Kurallar:
- En basit şema (flowchart) ile başla,
- Her hangi bir işlem birbirini takip eden iki işlem şeklinde yazılabilir.
- Her hangi bir işlem, bir kontrol yapısı (döngü, koşul, komut bloğu vb.) ile değiştirilebilir.
- Kural 2 ve 3, birçok kere tekrarlanabilir.
Yapısal Programlama Kurallarının uygulanışı Yapısal Programlama
Tüm programlar: - Komut Bloğu,
- Koşul / Seçim (if, if/else, switch),
- Döngü (for, while, do/while
) Parçalarına bölünebilir, yada diğer bir değişle bu parçalardan oluşturulabilir Nesne Yönelimli Programlama (OOP) - Veri ve Fonksiyonlar Sınıf (Class) paketlerinin içine saklanır.
- Class’lar mimari planlar gibidir.
- Tekrar tekrar kullanılabilirler.
- Class (plan) kullanılarak yeni nesneler (evler) oluşturulur.
- Planlarda değil, evlerde otururuz.
- Nesne Yönelimli Programlamada
- Veri (attributes) ve
- Fonksiyonlar (behavior) Sınıf olarak adlandırılan paketler içinde korunurlar, ve birbirleri ile son derece sıkı ilişki içindedirler
Struct Yapısı - Diğer data tiplerini birleştirerek, yeni bir data tipi oluşturur
.
[ Struct Yapısı - Bir struct yapısındaki her üyenin adı farklı olmalıdır.
- İki farklı struct yapısı aynı üyelere sahip olabilir.
- Struct tanımı mutlaka ‘ ; ’ ile bitirilir.
- Kendisini üye olarak alan bir struct yazılabilir ve genelde liste, stack vb. yapılar programlamada kullanılır.
- Struct yeni bir değişken tipi oluşturur, yani bu ‘yeni’ tipte değişkenler kullanılarak başka değişkenler tanımlayabilirsiniz:
Time timeObject, timeArray[ 10 ],
*timePtr, &timeRef =timeObject; - Normal üyelere erişirken ‘.’, pointer üyelere erişirken ‘->’ operatörleri kullanılır.
- timeObject struct yapısının hour üyesine erişirken:
cout << timeObject.hour;
timePtr = &timeObject;
cout << timePtr->hour; - Burada ‘timePtr->hour’ ile ‘(*timePtr ).hour’ tamamen aynıdır.
Örnek (struct) Time Class (Sınıf) Deklarasyonu - Sınıf ‘{ }’ işaretleri arasında tanımlanır.
Tanım ‘;’ işareti ile sonlandırılmalıdır. Üye (Member) Erişim Kısıtlamaları - Sınıf’lar kendi üyelerine (veri ve fonksiyonlarına) dışarıdan erişimi sınırlayabilirler.
- Public: sınıf’a erişilen her yerde bu üyelere de erişilebilir.
- Private: sadece sınıf’ın kendi üye fonksiyonları bu üyeye erişebilir.
- Protected: private’a benzer. Daha sonra ayrıntılı olarak anlatılacak.
Constructor - Sınıf yapısının özel bir fonksiyonudur. Sınıf’la aynı isimdedir.
- Sınıf’tan bir nesne oluşturulurken çalıştırılır. Sınıf üyelerini hazırlar.
- Geri dönüş değeri olmaz ama parametre alabilir.
- Bir kez sınıf tanımlanınca, bir değişken tipi gibi kullanılır. Dizi, pointer yada normal bir değişken tanımlanabilir.
Örnek (Sınıf) Ekran Çıktısı : Destructor Fonksiyonlar
‘- Destructor’ fonksiyon sınıf isminin önüne ‘~’ işareti konularak isimlendirilir.
- Nesne yok edilmeden önce yapılması gerekenleri yapar.
- Fonsiyon aşırı-yüklemesi (overloading) yapılamaz. Parametresi olamaz
. - public:
- time(); // constructor
- ~time(); // destructor
- };
‘Binary scope resolution’ Operatorü (::) - Sınıf’ın üyelerine erişirken sınıf isminin de kullanılabilmesini sağlar.
- Başka sınıf’ların da aynı isimli üyeleri olabileceği için gereklidir.
dönüştipi ClassAdı::ÜyeFonksiyonAdı( )
{
…
} Erişim Alanı - ‘Class scope’ : Bir sınıfın veri ve fonksiyon üyeleri bu sınıf alanına aittir.
- ‘File scope’: Üye olmayan fonksiyonlar bu alanda tanımlanır.
- Erişim alanı (scope) içinde iken üye fonksiyonlara adları ile erişilebilir.
- Erişim alanı dışında ise üye fonksiyonlara başka bir nesne yada pointer aracılığı ile ulaşılır.
- ‘Function Scope’: Bir üye fonksiyon içinde tanımlanan değişkenler sadece tanımlandıkları fonksiyon tarafından bilinirler. Fonksiyon çağırıldığında oluşturulup, fonksiyondan çıkışta yok edilirler.
- Üyelere erişim aynı struct yapısındaki gibidir. Normalde ‘.’, Pointer’larla ise
‘->’ operatörleri kullanılır:
t.hour yada timePtr->hour gibi. Örnek (‘ . ’ ve ‘->’) ‘Interface’-‘Implementation ’ Bölümlerinin Ayrılması - Sınıf yapısının tanımlanması bir başlık dosyasında (header file) yapılır.
- Üye fonksiyonlar, program dosyasında tanımlanır.
- Bu programların değiştirilmesini kolaylaştırır.
Örnek (Başlık Dosyası) Üyelere Erişim - Public: bu bölümdeki veri ve fonksiyonlara erişilebilir.
- Private: bu bölümdekilere sadece üye yada friend fonksiyonlar üzerinden erişilebilir.
- Hiçbiri yazılmazsa her şey private kabul edilir
Örnek (scope) Örnek (Ekran Çıktısı) - Private olarak tanımlanan hour değişkenine erişim ve değiştirme çabası derleme aşamasında hataya sebep olur:
Hizmet-Erişim Fonksiyonları - Hizmet fonksiyonları: Nesnenin yapması gereken işleri bu özel (private) fonksiyonlar yaparlar ve erişim fonksiyonlarına destek verirler.
- Erişim fonksiyonları: Nesnenin özel (private) fonksiyon ve verilerine bir ara yüz oluşturan ve bu erişimin güvenli ve kolay olmasını sağlayan fonksiyonlardır
Örnek (Erişim Fonk.) // Fig. 6.7: salesp.h
// SalesPerson class definition
// Member functions defined in salesp.cpp
#ifndef SALESP_H
#define SALESP_H class SalesPerson {
public:
SalesPerson(); // constructor
void getSalesFromUser(); // get sales figures from keyboard
void setSales( int, double ); // User supplies one month's
// sales figures.
void printAnnualSales();
private:
double totalAnnualSales(); // utility function
double sales[ 12 ]; // 12 monthly sales figures
}; #endif Örnek (Erişim Fonk.) Constructor’lar - Sınıf üyelerini hazırlarlar. Ancak zorunlu değildir.
- Sınıf’la aynı adlıdırlar ve geri dönüş değerleri yoktur.
- Sınıf tanımlanırken default parametreler tanımlanabilir.
- Yada nesne tanımlanırken parametre geçilebilir:
sınıf-adı nesne-adı( parametreler,…); Örnek (Constructor’lar) Alıntı
Kaynak
C++ Ders Programları 1 |