C ++ Beşinci Ders: Sınıflara ve Nesnelere Giriş
Öncelikle çevremizde gördüğümüz her şey bir nesnedir ve her nesnenin bir sınıfı vardır. Örnek vermek gerekirse, bir araba projesi düşünün. Öncelikle bir kâğıdın üstüne arabanın projesi çizilir. Bunu bizim sınıfımız olarak düşünebiliriz.
Bu arabayı kullanabilmek için onun inşa edilmesi gerekir. Bunu da nesnemizi main fonksiyonumuzun içinde yaratılmasını örnek gösterebiliriz. İnşa edilmeyen, yaratılmayan bir sınıfın nesnesi kullanılamaz. Bir sınıftan yani aynı projeden, birçok araç, nesne üretilebilir.
Her araba da çeşitli özellikler vardır. Örneğin, gaz pedalı, fren pedalı ve direksiyon; bunların ne işe yaradığını biliriz. Ancak, nasıl çalıştıklarını arkada ne tür işlemler yaparak arabayı hızlandırıp yavaşlattığını sürücü koltuğundan görüp, bilemeyiz. Tıpkı, bu mantıkta her sınıfın yani nesnenin özellikleri fonksiyon veya metot olarak yazılır.
Arabayı kullanırken arabanın yapmasını istediğiniz bir görev için, örneğin daha hızlı gitmesi, objeye bir mesaj gönderirsiniz; bu gönderilen her mesaj üye işlev çağrısı olarak geçer ve nesnenin bir üye işlevine (fonksiyonuna, metoduna) görevini gerçekleştirmesini söyler. Buna genellikle bir nesneden hizmet talep etme denir.
Ayrıca, her arabanın çeşitli özellikleri bulunur. Örneğin, rengi, kapı sayısı, kaç litre yakıt kullandığı gibi. Bu özellikler projenin üzerinde belirtilir. Tıpkı bu şekilde objelerin sınıflarında, veri üyelerinde belirtilen özellikler obje oluşturulurken çeşitlilik gösterebilir.
Bu araba projesinin benzetmesi ile; sınıfları, objeleri, üye işlevlerini (fonksiyon, metotları) ve özelliklerini öğreneceğiz. Bir örnek ile anlattığımız şeyleri yavaşça somutlaştıralım.
Öncelikle çevremizde gördüğümüz her şey bir nesnedir ve her nesnenin bir sınıfı vardır. Örnek vermek gerekirse, bir araba projesi düşünün. Öncelikle bir kâğıdın üstüne arabanın projesi çizilir. Bunu bizim sınıfımız olarak düşünebiliriz.
Bu arabayı kullanabilmek için onun inşa edilmesi gerekir. Bunu da nesnemizi main fonksiyonumuzun içinde yaratılmasını örnek gösterebiliriz. İnşa edilmeyen, yaratılmayan bir sınıfın nesnesi kullanılamaz. Bir sınıftan yani aynı projeden, birçok araç, nesne üretilebilir.
Her araba da çeşitli özellikler vardır. Örneğin, gaz pedalı, fren pedalı ve direksiyon; bunların ne işe yaradığını biliriz. Ancak, nasıl çalıştıklarını arkada ne tür işlemler yaparak arabayı hızlandırıp yavaşlattığını sürücü koltuğundan görüp, bilemeyiz. Tıpkı, bu mantıkta her sınıfın yani nesnenin özellikleri fonksiyon veya metot olarak yazılır.
Arabayı kullanırken arabanın yapmasını istediğiniz bir görev için, örneğin daha hızlı gitmesi, objeye bir mesaj gönderirsiniz; bu gönderilen her mesaj üye işlev çağrısı olarak geçer ve nesnenin bir üye işlevine (fonksiyonuna, metoduna) görevini gerçekleştirmesini söyler. Buna genellikle bir nesneden hizmet talep etme denir.
Ayrıca, her arabanın çeşitli özellikleri bulunur. Örneğin, rengi, kapı sayısı, kaç litre yakıt kullandığı gibi. Bu özellikler projenin üzerinde belirtilir. Tıpkı bu şekilde objelerin sınıflarında, veri üyelerinde belirtilen özellikler obje oluşturulurken çeşitlilik gösterebilir.
Bu araba projesinin benzetmesi ile; sınıfları, objeleri, üye işlevlerini (fonksiyon, metotları) ve özelliklerini öğreneceğiz. Bir örnek ile anlattığımız şeyleri yavaşça somutlaştıralım.
Kod:
#include <iostream>
usingnamespacestd;
// NotDefteri Sınıfının tanımlanması
classNotDefteri
{
public:
// kullanıcıya hoş geldiniz mesajını gösteren fonksiyon
**** mesajiGoster()
{
cout << "Not Defterine Hoş Geldiniz!" << endl;
} // mesajıGoster fonksiyonunun sonu
}; // NotDefteri sınıfının sonu
// programın çalışması için main fonksiyonunun başlangıcı
int main()
{
NotDefteribenimNotDefterim; // benimNotDefterim adında bir not defteri objesinin oluşturulması
benimNotDefterim.mesajiGoster(); // objenin mesajıGoster fonksiyonunun çağırılması
} // main fonksiyonun sonu
Yukarıdaki örnekte bir not defteri sınıfı oluşturduk (arabanın projesi) ve not defterinin mesajını göstermesi için sınıfına ait bir mesajıGoster (gaz, fren pedalının çalışma prensibi) fonksiyonu tanımladık. Daha sonra programımızın çalıştığı main(ana) fonksiyona gelip, not defteri objesi oluşturduk (projenin inşa edilmesi) ve tanımladığımız fonksiyonu çağırdık (gaz, fren pedalına basılması).
Not: Sınıf isimleri Büyük harf ile başlar. Ancak üretilen objeler ve yazılan metotların isimlerinde genelde camelcase, deve durumu kullanılır. Yani ilk harf küçük ve her yeni kelime için büyük harf. Örneğin, mesajiGoster, konuyuAç, yardımEt gibi... Deve silüetine benzediği için deve durumu adını almıştır. Bu kurallar kodun okunaklı ve anlaşılır olması için vardır.
Not: Her sınıf classSınıfAdı ile başlar ve daha sonra süslü parantez ({) açılır. Sınıfın sonunda ise, ters süslü parantez (}) kullanılarak sınıf sonlandırılır.
Not: Süslü parantezden sonra gelen public: etiketi erişim belirleyicidir. Fonksiyonun "halka açık olduğunu belirtmek için vardır. Yani, main fonksiyon tarafından erişilebilir veya eğer varsa farklı bir sınıf tarafından erişilebileceğini belirtir. Erişim belirleyici etiketlerden sonra daima iki nokta ( : ) gelir. Burada iki diğer erişim belirleyici daha vardır: private ve protected. Private bulunduğu sınıf dışından erişilemez. Protected ise, bulunduğu paket dışından erişilemez. Buna örnek olarak, gaz ve fren pedalını kullanmamız ama nasıl çalıştığını bilmememizi verebiliriz. İleride daha detaylı direkt erişemesek de nasıl kullanabileceğimizi anlatacağım.
Not: Her fonksiyonun başına ne işe yaradığı ile ilgili fonksiyon başlığı yorum şeklinde eklenir. Böylece siz veya bir başkası kodu incelerken ne işe yaradığını bulmaya çalışmazsınız.
Not: Her fonksiyon belirli bir işi yapar ve sonucunda bir şey döner. Örneğin, bir hesaplama yapar ve hesaplamanın sonucunda tam sayı döner. Bir fonksiyonu tanımlarken, fonksiyonun ne döneceğini de belirtmeniz gerekir. Buradaki v-oid kelimesi geçersiz, boş manasına gelmektedir. Onu çağıran fonksiyona, sonucunda bir şey döndürmeyeceğimiz zaman kullanırız. Dönüş tipinin yanlış tanımlanması derleme (compilation) hatasına yol açar.
Not: Fonksiyonların adından sonra () kullanılır. Gerekirse içine ekstra veri girilebilir. Ancak, bunu ileride göreceğiz. Sınıf için kullandığımız süslü parantezler, fonksiyonlar için de aynen geçerlidir ve fonksiyonun işlevi yani yapacakları bu süslü parantezlerin içine yazılır.
Not: Bir fonksiyonun içine başka bir fonksiyonun tanımlanması söz dizimi (syntax) hatasına yol açar.
Gelecek derste konuyu daha da detaylandırıp yavaş yavaş derinlerine ineceğiz. Derinine inerken de çeşitli örnekler göreceğiz.
Moderatör tarafında düzenlendi: