Nesne Yönelimli Programlama: Başlangıçtan Uygulamalı Örneklerle
Programlama Paradigmaları
Nesne Yönelimli Programlama: Başlangıçtan Uygulamalı Örneklerle

Nesne Yönelimli Programlama (OOP) nedir?
Nesne yönelimli programlama (OOP), veriyi ve o verinin üzerinde işlem yapan fonksiyonları mantıksal birimlere —sınıflara ve nesnelere— ayırarak yazılımın daha modüler, okunabilir ve bakımı kolay olmasını amaçlayan bir yaklaşımdır. Temel tanım ve kavramlar için Programca ve Uzaktan Eğitim gibi kaynaklarda özet bilgiler bulabilirsiniz: Programca — OOP Nedir? ve Uzaktan Eğitim — OOP'nin Temel Kavramları.
Neden OOP kullanılır?
OOP, özellikle orta ve büyük ölçekli projelerde şu avantajları sağlar:
- Modülerlik: Kod, işlevsel parçalara ayrıldığı için ekip içi çalışmada anlaşılması kolaylaşır.
- Yeniden kullanılabilirlik: Sınıflar ve kalıtım sayesinde kod tekrarını azaltabilirsiniz.
- Bakım kolaylığı: Nesnelerin sorumlulukları belirgin olduğunda değiştirme ve test etme daha güvenli olur.
OOP'nin temel kavramları
OOP'yi anlamak için dört ana kavramı bilmek yeterlidir: sınıf, nesne, kapsülleme, kalıtım ve polimorfizm. Bu kavramların tanımları için ayrıntılı açıklamalar Uzaktan Eğitim sayfasında yer almaktadır.
Sınıf (Class) ve Nesne (Object)
Sınıf, benzer özelliklere ve davranışlara sahip nesneleri tanımlayan bir şablondur. Nesne ise bu şablonun çalışma zamanındaki örneğidir. Örneğin bir "Araba" sınıfı; marka, model ve hız gibi özellikleri ve hızlan, fren yap gibi davranışları tanımlayabilir. Bir "toyota" nesnesi bu sınıfın bir örneğidir.
Kapsülleme (Encapsulation)
Kapsülleme, veriyi (özellikleri) ve o veriye erişimi sağlayan metodları tek bir birim içinde toplar ve dışarıya kontrollü erişim sağlar. Bu sayede nesnenin iç durumu doğrudan değiştirilmez; yalnızca sunduğu arayüz (metodlar) üzerinden etkileşim sağlanır.
Kalıtım (Inheritance)
Kalıtım, bir sınıfın başka bir sınıftan özellik ve metotları devralmasına izin verir. Bu, ortak davranışları ana bir sınıfta toplayıp farklılaşan davranışları alt sınıflarda tanımlamayı kolaylaştırır.
Polimorfizm (Polymorphism)
Polimorfizm, aynı arayüzü kullanan nesnelerin farklı biçimlerde davranabilmesini sağlar. Örneğin bir "konus" metodunu çağırdığınızda, nesne bir kedi ise "miyav" çıkarırken köpek ise "hav" çıkarabilir. Bu, kodun genişletilebilir ve esnek olmasını sağlar.
Uygulamalı örnekler
Aşağıdaki örnekler eğitim amaçlı, temel kavramları göstermeye yöneliktir. Üretim kodu yazarken hata denetimi ve birim testleri eklemeyi unutmayın.
1) C# ile basit sınıf ve nesne
Aşağıda bir Person sınıfı örneği bulunuyor. Yapıcı (constructor), özellikler ve bir davranış (metot) içerir:
public class Person {
public string Name { get; set; }
private int age;
public Person(string name, int age) {
this.Name = name;
this.age = age;
}
public void SayHello() {
Console.WriteLine($"Merhaba, ben {Name}, {age} yaşındayım.");
}
}
Bu sınıfla nesne oluşturup metodu çağırmak:
var p = new Person("Ayşe", 30);
p.SayHello();
Açıklama: Name public bir özellik olarak dışarıya açıkken age private tutulmuş, böylece doğrudan değiştirilmesi engellenmiştir—bu kapsüllemeye bir örnektir.
2) Kalıtım ve polimorfizm — C# örneği
Basit bir hayvan hiyerarşisi düşünün:
public class Animal {
public virtual void Speak() { Console.WriteLine("Ses yok"); }
}
public class Cat : Animal {
public override void Speak() { Console.WriteLine("Miyav"); }
}
public class Dog : Animal {
public override void Speak() { Console.WriteLine("Hav"); }
}
Kullanım:
List<Animal> animals = new List<Animal> { new Cat(), new Dog() };
foreach (var a in animals) { a.Speak(); }
Burada Animal temel sınıf, Cat ve Dog türetilmiş sınıflardır. Döngüde her nesne aynı Speak metodunu çağırırken, gerçek davranış nesne türüne göre değişir — bu polimorfizmdir.
3) Python ile kapsülleme örneği
Python'da basit bir banka hesabı sınıfı:
class BankAccount:
def __init__(self, owner, balance=0):
self._owner = owner
self._balance = balance
@property
def balance(self):
return self._balance
def deposit(self, amount):
if amount > 0:
self._balance += amount
def withdraw(self, amount):
if 0 < amount <= self._balance:
self._balance -= amount
Kullanım:
acc = BankAccount("Mehmet", 100)
acc.deposit(50)
print(acc.balance) # 150
Burada _balance dış erişime kapatılmış gibi gösterilir; erişim property aracılığıyla sağlanır. Bu kapsülleme uygulamasına bir örnektir.
Nasıl başlayabilirsiniz? Adım adım yol haritası
- Dil seçimi: Başlangıç için Python daha az sözdizimi (syntax) yüküyle öğrenmeyi kolaylaştırır; C# ise tip güvenliği ve araç desteği sağlar.
- Temel kavramları öğrenin: Sınıf/nesne, alanlar, metotlar, erişim belirteçleri, miras ve polimorfizm.
- Küçük projeler yapın: Adres defteri, basit oyun (ör. taş-kağıt-makas), banka hesabı uygulaması gibi.
- Test ve refaktör: Her adımda küçük testler yazın; kodu basitleştirmek için yeniden düzenleyin.
- Pratik desenler öğrenin: SOLID prensipleri ve kompozisyonun kalıtımdan ne zaman daha uygun olduğunu inceleyin.
Mini proje fikirleri
- Görev listesi (To-do) uygulaması: Görev sınıfı, kullanıcı sınıfı, filtreleme ve kaydetme.
- Kütüphane yönetimi: Kitap, yazar, ödünç alma işlemleri.
- Harcama takip uygulaması: Kategori sınıflaması ve raporlama.
İyi uygulamalar ve sık yapılan hatalar
İyi uygulamalar:
- Tek sorumluluk prensibi (Single Responsibility): Her sınıfın tek bir sorumluluğu olsun.
- Kompozisyonu tercih edin: Kalıtımı yalnızca anlamlı olduğunda kullanın.
- Gerektiğinde arayüz (interface) veya soyut sınıf kullanarak bağımlılıkları azaltın.
- Birim testleri yazın ve küçük, test edilebilir sınıflar tasarlayın.
Yaygın hatalar ve önlemler:
- Fazla kalıtım (deep inheritance): Çok derin miras ağaçları kodu karmaşıklaştırır; bunun yerine kompozisyon düşünün.
- God object (tüm sorumlulukları üstlenen büyük sınıf): Sınıfı bölün, sorumlulukları ayırın.
- Tutarsız kapsülleme: Tüm alanları public yapmak yerine kontrollü erişim sağlayın.
Kaynaklar ve ileri okuma
OOP hakkında temel tanımlar ve kavramlarla ilgili özet bilgiler için şu kaynaklara bakabilirsiniz:
- Programca — Nesne Yönelimli Programlama (OOP) Nedir?
- Uzaktan Eğitim — OOP'nin Temel Kavramları
- YBS Mezunu — C# ile OOP Temel Kavramlar
İleri seviye konulara geçmeden önce küçük adımlarla projeler yaparak kavramları pekiştirin. Dilin resmi dokümantasyonları ve topluluk kaynakları da uygulamalı öğrenme için faydalıdır.