crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Abstraction: Karmaşıklığı Tasarımla Gizlemek
Soyutlama, "ne yapıldığını" tanımlar ancak "nasıl yapıldığını" alt sınıflara bırakır. Bir araba kullanırken motorun içindeki pistonların nasıl hareket ettiğini bilmenize gerek yoktur; sadece pedalların ve direksiyonun (arayüzün) ne işe yaradığını bilmeniz yeterlidir.
1. Pure Virtual Function (Saf Sanal Fonksiyon) Nedir?
Bir fonksiyonun gövdesini (kodlarını) yazmadan, sadece imzasını oluşturup sonuna = 0 eklediğinizde, o fonksiyonu "saf sanal" yapmış olursunuz. Bu, alt sınıflara verilen kesin bir emirdir: "Bu fonksiyonu ezmek (override) zorundasın, yoksa seni de derlemem!"
C++:
class Sekil {
public:
// Saf sanal fonksiyon
virtual void alanHesapla() = 0;
// Normal fonksiyon da barındırabilir
void bilgiVer() {
cout << "Bu bir geometrik sekildir." << endl;
}
};
2. Abstract Class (Soyut Sınıf) Nedir?
İçerisinde en az bir tane Pure Virtual Function bulunduran sınıflara "Soyut Sınıf" denir.
[]Nesne Üretilemez: Soyut bir sınıftan doğrudan nesne oluşturamazsınız (Sekil s; hata verir). Çünkü yarım kalmış, sadece fikir aşamasında bir sınıftır.
[]Şablon Görevi Görür: Kendisinden türetilecek sınıflar için bir "sözleşme" niteliğindedir.- Arayüz Sağlar: Alt sınıfların sahip olması gereken ortak özellikleri garanti altına alır.
C++:
class Kare : public Sekil {
public:
void alanHesapla() override {
// Sekil'den gelen zorunlu gorev burada tamamlanıyor
cout << "Karenin alani: kenar * kenar" << endl;
}
};
3. Soyutlama vs. Kapsülleme (Farkları Karıştırmayın!)
| Özellik | Abstraction (Soyutlama) | Encapsulation (Kapsülleme) |
|---|---|---|
| Odak Noktası | Tasarım aşaması (Ne yapılacak?) | Uygulama aşaması (Nasıl korunacak?) |
| Yöntem | Abstract class ve Interface kullanımı. | Access specifiers (private, public). |
| Hedef | Gereksiz detayları gizlemek. | Veriyi hatalı kullanımdan korumak. |
4. Neden Soyutlama Kullanmalıyız?
[]Güvenli Mimari: Alt sınıfların önemli metodları tanımlamayı unutmamasını sağlar.
[]Esneklik: Ana programınızda sadece Sekil türünde işaretçiler kullanarak, hangi şekil gelirse gelsin (daire, üçgen, kare) sorunsuz çalışmasını sağlarsınız.- Bağımlılığı Azaltmak (Decoupling): Üst seviye kodunuzun, alt seviye detaylara bağımlı kalmasını önler.
Sonuç
Soyutlama, yazılım dünyasında "standartlar koymak" demektir. Eğer bir ödeme sistemi yazıyorsanız OdemeYontemi adında soyut bir sınıf oluşturup odemeYap() fonksiyonunu saf sanal yaparsınız. Yarın bir gün Kredi Kartı, Havale veya Kripto gibi yeni yöntemler eklendiğinde, ana sisteminizde tek bir satır değiştirmeden bu yeni yapıları entegre edebilirsiniz.