730 likes | 1.11k Views
3. Sınıflara ve Nesnelere Giriş. 3.1 Giriş 3.2 Sınıflar , Nesneler , Üye fonksiyonları ve data üyeler 3.3 Bu bölümdeki örnekler 3.4 Üye fonksiyonlu bir sınıfın tanımlanması 3.5 Parametreli bir üye fonksiyonun tanımlanması 3.6 Data Üyeler , set Fonksiyonları and get Fonksiyonları
E N D
3 • Sınıflara ve Nesnelere Giriş
3.1Giriş • 3.2Sınıflar, Nesneler, Üye fonksiyonlarıve data üyeler • 3.3Bu bölümdeki örnekler • 3.4Üye fonksiyonlu bir sınıfın tanımlanması • 3.5Parametreli bir üye fonksiyonun tanımlanması • 3.6 Data Üyeler, setFonksiyonları and getFonksiyonları • 3.7Yapılandırıcılarla nesnelere ilk değer verilmesi • 3.8Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek • 3.9Arabirimi uygulamadan ayırmak (Separating Interface from Implementation ) • 3.10set fonksiyonuyla Data değerini değiştirmek
3.1 Giriş • Bölüm 2 deki programlarda tüm komutlar main fonksiyonunun içindedir. Genellikle böyle değildir. • Tipik bir programmainfonksiyon ve bir veya daha fazla sınıf’dan oluşur. Her sınıf data üyeler ve üye fonksiyonlardan oluşur
3.2 Sınıflar, Nesneler, Üye fonksiyonlar ve Data üyeler • Sınıflar: • Örnek: Araba • Fonksiyonlar bir görevi olan mekanizmaları tarif eder. Vites gibi • Karmaşık işler kullanıcıdan gizlenir. Ör. Kullanıcı arabayı hareket ettiriken pedala basmak zorundadır ama arabanın çalışma mekanizmasını bilmesi gerekmez. • Sınıflar kullanılmadan önce tanımlanmalıdır. Araba çalıştırılmadan önce imal edilmelidir. • Bir sınıfdan bir çok araba nesnesi üretilebilir, mühendisin çizdiği bir plandan bir çok araba üretilebildiği gibi.
3.2 Sınıflar, Nesneler, Üye fonksiyonlar ve Data üyeler • Araba örneğinde, • Üye fonksiyonu çağırmak nesneye işlem yapması için bir mesaj gönderir. Gaz pedalına basmak arabaya hareket etmesi için bir mesaj gönderir. • Nesnelerin olduğu gibi arabaların da nitelikleri vardır. Renk ve gidilen mesafe gibi
3.3 Bu bölümdeki örnekler • Yedi basit örnek • GradeBook sınıfını oluşturacak örnekler • İçinde kullanılanlar: • Üye fonksiyonlar • Data üyeler • Sınıfı kullananlar • Bu sınıfın nesnelerinin üye fonksiyonlarını çağıran diğer sınıflar veya fonksiyonlar. • Uygulama ile arabirimi ayırmak • Data tanımlama • Bir nesnedeki data özel bir formatta ve arlıkta olmak zorundadır.
3.4 Üye fonksiyonu olan bir sınıf tanımlama • Sınıf tanımlama • Derleyiciye sınıfa ait hangi üye fonksiyonlar ve data üyeler olduğunu bildirmektir. • classanahtar kelimesinin ardından sınıf adı yazılır. • Bir sınıfın gözdesi küme parantrezleri içinde kalır ({}) • Data üyeleri ve üye fonksiyonları belirler • public: • Üye fonksiyon veya data üyesinin, diğer fonksiyonlar ve başka sınıflara ait üye fonksiyonlar tarafından erişilebilir olduğunu gösterir.
GradeBooksınıfının tanımının başlangıcı Sınıf gövdesinin başlangıcı public erişim kelimesi üyeleri herkese açık hale geitirir. mesajYazüye fonksiyonu hiç bir şey döndürmez. Sınıf gövdesinin sonu GradeBooksınıfının üye fonksiyonunu kullanmak için nokta kullanılır.
3.4 Üye fonksiyonu olan bir sınıf tanımlama • Üye bir fonksiyonun tanımlanması • void displayMessage() • { • Fonksiyonun döndürme tipi • Fonksiyon görevini tamamladığında döndüreceği değerin tipini gösterir. • void fonksiyonun hiç bir şey döndürmediğini gösterir. • Fonksiyon adı kurallara uygun yazılmalıdır. (Değişkenlere benzer) • Fonksiyon adından sonra gelen parantezler, bunun bir fonksiyon olduğunu gösterir. • Fonksiyonun gövdesi, o fonksiyonun görevini yapması için gereken komutları içerir. • {}küme parantezleri içine yazılır.
Genel hatalar 3.2 • Döndürme tipi void olan bir fonksiyonun bir değer döndürmesi derleyici hatası verir.
Genel hatalar3.3 • Bir fonksiyonun içinde başka bir fonksiyon tanımlamak hatadır.
3.4 Üye fonksiyonu olan bir sınıf tanımlama • Sınıf kullanma • Programcının tanımladığı bir sınıf • Nesne oluşturmak için kullanılabilir • O sınıfın tipinde değişkenler gibi tanımlanırlar • kullanılarak C++ dili genişletilebilir. • Nokta operatörü (.) • Nesnenin data üyelerine ve üye fonksiyonlarına erişmek için kullanılır. • Örnek • myGradeBook.displayMessage() • GradeBooknesnesimyGradeBook, displayMessage() üye fonksiyonunu çağırıyor.
Fig.3.2| UML sınıf diyagramıGradeBooksınıfının public displayMessageoperasyonu var.
3.4 Üye fonksiyonu olan bir sınıf tanımlama • UML sınıf diyagramı • 3 bölmeli bir dikdörtgendir. • En üst bölmeye sınıfın adı yazılır. • Orta bölmeye sınıfın nitelikleri yazılır. • En alt bölmeye sınıfın operasyonları yazılır. • Operasyonun önündeki + işareti operasyonun public olduğunu gösterir.
3.5 Parametreli bir üye fonksiyonun tanımlanması • Fonksiyon parametreleri • Fonksiyonun görevini yapması için gereken bilgidir. • Fonksiyonun argümanları • Her fonksiyon parametresine karşılık, çağırma sırasında gönderilen değerlerdir. • Argüman değerleri fonksiyonun parametresine kopyalanır.
3.5 Parametreli bir üye fonksiyonun tanımlanması • string • Karakter dizisi demektir • String olarak tanımlanmış bir değişken aslında C++ kütüphanesinin string sınıfının bir nesnesidir. std::string • <string>öncü dosya olarak tanımlanmıştır. • getlinekütüphane fonksiyonu • input olarak gelen bilgileri return tuşuna basılana kadar alır. • Örneğin • getline( cin, nameOfCourse ); • Standart girişten bir satır okur ve okuduğu bilgiyi, bir string nesnesi olan nameOfCoursea yazar.
Outline stringsınıfının dahil edilmesi fig03_03.cpp (1 of 2) Üye fonksiyonun parametresi Fonksiyon parametresinin değişken olarak kullanılması
Outline fig03_03.cpp (2 of 2) Üye fonksiyona bir argüman göndermek
3.5 Parametreli bir üye fonksiyonun tanımlanması • Parametre Listesi • Fonksiyon tarafından istenen bilgi • Fonksiyon adından hemen sonra gelen parantezler içine yazılır. • Fonksiyonun herhangi bir sayıda parametresi olabilir. • Parametreler arasına virgül konur. • Fonksiyon çağırılırken argümanların sayı, sırave tipleri fonksiyonun tanımındaki sayı, sıra ve tiple aynı olmalıdır. • UML ile modellenir. • Üye fonksiyonun parantezleri içinde; parametre adı, iki nokta üstüste ve parametrenin tipi bulunur.
Genel hatalar 3.4 • Fonksiyon tanımındaki parantez kapandıktan hemen sonra noktalı virgül konması yazılım hatası verir.
Genel hatalar3.5 • Fonksiyon parametresini fonksiyonun içinde tekrar değişken olarak tanımlamak derleyici hatası verir.
İyi programcı uygulaması 3.1 • Belirsizliği ortadan kaldırmak için, fonksiyonu tanımlarken kullandığınız parametre adlarının aynısını fonksiyonu çağırırken kullanmayın .
İyi programcı uygulaması 3.2 • Fonksiyona ve değişkene görevine uygun isim verilirse, programı sonradan anlamak kolay olur (Programın okunabilirliği artar.) Aynı zamanda fazla açıklama satırı koymak gerekmez.
Fig.3.4displayMessage() fonksiyonu string tipinde ve courseName adında bir parametre alıyor.
3.6 Data üyeler, set Fonksiyonlarıveget Fonksiyonları • Yerel değişken • Değişkenler fonksiyonun gövdesinde tanımlanır • Fonksiyonun dışında kullanılmazlar. • Bir fonksiyon bittiğinde • Yerel değişkenlerin değerleri yok olur. • Nitelikler (attributes) • Nesnenin yaşamı boyunca var olurlar. • Data üye olarak gösterirler • Sınıf tanımındaki değişkenler • Sınıfın her nesnesi niteliklerin kendi kopyasını tutar.
Outline fig03_05.cpp (1 of 3) setfonksiyonuprivate data ‘ya değer atar getfonksiyonuprivate datayı döndürür.
Outline fig03_05.cpp (2 of 3) Set ve get fonksiyonları sınıfın içinde bile kullanılır privateüyelere sadece sınıfın üye fonksiyonları tarafından erişilebilir. Sınıf tanımlasının dışından private data’ya erişim
Outline fig03_05.cpp (3 of 3) private data’nın sınıfın dışında değiştirilmesi
İyi programlama örneği 3.3 • Üye fonksiyonların tanımlamaları arasına birer boş satır koyunuz. Bu programın okunabilirliğini arttırır.
3.6 Data üyeler, set Fonksiyonlarıveget Fonksiyonları • private • Kendisinden sonra gelen data üyeye sadece o sınıfın üye fonksiyonlarının erişmesini sağlar. • Sınıf üyelerinin varsayılan erişimiprivate’dır • Data gizleme • Fonksiyonun değer döndürmesi • Bir fonksiyonun void’ den başka bir return tipi varsa • Kendisini çağıran fonksiyona bir değer döndürür.
Yazılım mühendisliği ipucu 3.1 • Genel kural olarak, data üyelerprivateveüye fonksiyonlarpublictanımlanır. (Eğer sadece üye fonksiyonların çağırması gereken fonksiyonlar olursa, bunlar private, tanımlanır.)
Genel hatalar 3.6 • Bir fonksiyon üyesi olmadığı bir sınıfın private üyesine ulaşmaya çalışırsa derleme hatası olur.
İyi programlama örneği 3.5 • Bir sınıfı tanımlarken önce privateüyeleri listeleyip private belirteci (varsayılan olmasına rağmen) kullanılırsa, programın açıklığı artar.
Genel Hatalar 3.7 • Değer döndürmesi gereken fonksiyonun değer döndürmemesi derleme hatasına sebep olur.
3.6 Data üyeler, set Fonksiyonlarıveget Fonksiyonları • setveget fonksiyonları • publicüye fonksiyonlardır. private data üyelere erişmeyi sağlarlar. • set fonksiyonları bazen değiştirici olarak veget fonksiyonları da bazen erişim fonksiyonu olarak adlandırılır. • Programcının yazdığı sınıfın private data üyesine erişim kontrolunu sağlamasına yardım eder. • Aynı sınıfın diğer üye fonksiyonları tarafından da çağırılabilirler.
3.6 Data üyeler, set Fonksiyonlarıveget Fonksiyonları • UML diyagramı • Bir operasyonun döndürdüğü değerin tipini gösterir • Operasyon adından sonra gelen parantezlerden sonra iki nokta üsüste ve tip yazılır. • privateüyeler için – işareti kullanılır
3.7 Yapılandırıcılarla nesnelere ilk değer verilmesi • Yapılandırıcılar • Yapılandırıcılar, bir nesne oluşturulduğunda bu nesnenin datalarına ilk değerlerini veren fonksiyonlardır. • Nesne oluşturulduktan hemen sonra çağrılırlar. • Yapılandırıcı ismi , sınıf ismi ile aynı olmalıdır. • Geriye hiçbir veri döndürmezler. (void de olamazlar) • Varsayılan (nesne oluşturulduğunda otomatik olarak çağrılan) yapılandırıcının herhangi bir parametresi yoktur. • Programcı tarafından sınıf için herhangi bir yapılandırıcı oluşturulmamış olsa bile , derleyici bu sınıfa otomatik olarak bir yapılandırıcı sağlayacaktır.
Outline fig03_07.cpp (1 of 3) Yapılandırıcının adı sınıfın adı ile aynıdır ve hiçbir dönüş tipi yoktur. Bu sınıfın data üyesi olan dersAdi degiskenine ilk değerini ata.
Outline fig03_07.cpp (2 of 3)
Outline fig03_07.cpp (3 of 3) Nesneler oluşturulduğu anda yapılandırıcıları çağrılır.
Hataları engelleme 3.2 • Sınıfınızdaki data üyelerine ilk değer atama ihtiyacınız olmasa bile, sınıfınızdan üretilen • her nesnenin data üyelerinin anlamlı değerlere sahip olduğundan emin olmak için sınıfınıza bir • yapılandırıcı sağlayın.
Yazılım Mühendisliği Görüşü 3.5 • Data üyelerinin ilk değerleri yapılandırıcı vasıtasıyla ya da nesne üretildikten sonra set fonksiyonları ile atanabilir. Ancak, sınıftan üretilen nesneleri kullanan programın nesnenin üye fonksiyonlarını çağırmasından önce bu nesnenin ilk değerlenin hepsinin düzgün bir biçimde atandığından emin olmak iyi bir yazılım mühendisliği uygulamasıdır. • Nesnenin ilk değerlerinin düzgün bir şekilde atandığından emin olmak için , ilk değerlerin atanması işlemi bu nesneyi kullanan programa(istemci uygulama) bırakılmamalı , sınıf içerisinde yapılandırıcılar vasıtasıyla sağlanmalıdır..
3.7 Yapılandırıcılar ile İlk değer atama (Devam.) • UML sınıf diyagramında yapılandırıcılar • Üye fonksiyonları ile beraber üçüncü bölmede bulunur. • Bir yapılandırıcıyı sınıfın diğer üye fonksiyonlardan ayırabilmek için; • UML, yapılandırıcının adından önce <<constructor>> ibaresini yerleştirir. • - <<constructor>> GradeBook() • Genellikle üçüncü bölmedeki diğer fonksiyonlardan önce yerleştirilir.
Fig.3.8 | GradeBook sınıfının String tipindeki name parametresine sahip yapılandırıcısını belirten UML sınıf diyagramı.
3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek • .cppdosyası kaynak kodu dosyası olarak bilinir. • Header dosyaları • Genellikle .h dosya uzantısına sahiptirler. • İçerisinde sınıf tanımlamaları bulunan dosyaları ayırır. • Sınıflar başka yerlerde kullanıldığında, derleyicinin bunları tanımasını sağlar. • Bir .cpp dosyası içerisinde tanımlanan bir sınıf sadece o dosya içerisinde kullanılabilir, fakat .h dosyaları içerisindeki sınıflar bu .h dosyasını ekleyen (#include “benimSinifim.h”) her dosyada kullanılabilir. • Sürücü dosyaları • Sınıfları (ya da yazılımları) test etmek için kullanılan programlardır. • main fonksiyonları vardır , dolayısıyla çalıştırılabilirler.
Outline Sınıfın tanımlaması header dosyasının içinde. fig03_09.cpp (1 of 2)
Outline fig03_09.cpp (2 of 2)
Outline fig03_10.cpp (1 of 1) Header dosyasını ekleyerek, içerisindeki sınıf tanımlamasını bu dosyaya kopyalamış oluruz.
3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek(Devam.) • #includeönişlemci komutu • Header(öncü) dosyalarını eklemek için kullanılır. • C++ önişlemcisiden belirtilen dosya içeriğini bu komutun kullanıldığı yere kopyalamasını ister. • Çift Tırnak (“) işareti kullanıcı-tanımlı header(.h) dosyalarını belirtir. • Ön işlemci bu dosyayı bulmak için öncelikle programın bulunduğu dizine bakar. • Eğer .h dosyası bu dizinde değilse, C++ Standart kütüphanesinin dizinine bakar. • #include “BenimDosyam.h” • Küçük-Büyük (< >) işaretleri C++ Standart kütüphanelerini belirtir. • Önişlemci sadece C++ Standart kütüphane dizinine bakar. • - #include <iostream>
3.8 Bir sınıfı tekrar kullanmak için ayrı bir dosyaya yüklemek(Devam.) • Nesnelerin oluşturulması • Derleyici nesnenin boyutunu (hafıza içerisinde kaplayacağı alanı) bilmek zorundadır. • C++ nesneleri tipik olarak sadece data üyelerini içerirler. • Derleyici, sınıfın üye fonksiyonlarının bir kopyasını oluşturur. • Bu kopya sınıfın tüm nesneleri arasında paylaştırılır.