Nesne yönelimli programlama (OOP) nasıl çalışır?
Sözlük

Nesne yönelimli programlama (OOP) nasıl çalışır?

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 4 dk okuma

Nesne yönelimli programlama, kodu sınıflar ve nesneler etrafında düzenler. Kapsülleme, soyutlama, kalıtım ve çok biçimlilik kısa bir örnekle anlatılıyor.

Nesne yönelimli programlama nedir?

Nesne yönelimli programlama (OOP, object oriented programming), yazılımı veri ile o veri üzerinde çalışan davranışı bir arada tutan nesneler etrafında kurma yaklaşımıdır. Bir nesne, gerçek dünyadaki bir kavramı temsil eder: müşteri, sipariş, fatura, sensör. Nesnenin sahip olduğu bilgiye özellik, yapabildiği işlere metot denir.

Prosedürel programlamada kod, veriden ayrı çalışan fonksiyon dizileri olarak yazılır. OOP'de ise ilgili veri ve fonksiyonlar tek yerde toplanır. Bu sayede büyük kod tabanları parçalara ayrılır; her parçanın ne yaptığı ve neye bağlı olduğu daha net anlaşılır. Python, Java, C#, C++ ve Kotlin gibi dillerin hepsi nesne yönelimli stili destekler.

Sınıf ve nesne arasındaki fark

Sınıf (class), nesnelerin kalıbıdır: hangi özelliklere ve metotlara sahip olacaklarını tanımlar. Nesne (object) ise bu kalıptan üretilmiş somut örnektir. Sınıf bir mimari plana, nesne o plana göre inşa edilmiş binaya benzetilebilir.

Python'da küçük bir örnek:

class Hesap: def __init__(self, sahip): self.sahip = sahip self.islemler = []

def para_yatir(self, tutar): self.islemler.append(tutar)

def bakiye(self): return sum(self.islemler)

hesap_a = Hesap("Ayşe") hesap_a.para_yatir(yatirilan_tutar)

Burada Hesap bir sınıf, hesap_a ise o sınıftan üretilmiş bir nesnedir. Her hesabın kendi işlem listesi vardır; metotlar nesnenin kendi verisi üzerinde çalışır.

OOP'nin temel ilkeleri

Nesne yönelimli tasarım şu kavramlar üzerine kurulur:

  • Kapsülleme (encapsulation): nesnenin iç verisini dışarıdan doğrudan değiştirilmekten korur, erişimi metotlar üzerinden verir. İşlem listesi gibi bir alanın yanlış değerle ezilmesi böylece engellenir.
  • Soyutlama (abstraction): gereksiz ayrıntıyı gizleyip yalnızca gerekli arayüzü gösterir. Hesaba para yatıran kod, yatırma işleminin nasıl kaydedildiğini bilmek zorunda değildir.
  • Kalıtım (inheritance): bir sınıfın başka bir sınıfın özelliklerini devralması. Ortak davranış tek yerde yazılır.
  • Çok biçimlilik (polymorphism): aynı mesajın farklı nesnelerde farklı sonuç vermesi. Ödeme yöntemi ne olursa olsun "öde" çağrısı çalışır.

Kalıtım ve çok biçimlilik ayrıntısıyla ayrı bir sözlük girişinde ele alınır.

OOP ne işe yarar?

OOP, kod tabanı büyüdükçe karmaşıklığı yönetilebilir tutmak için kullanılır. Nesneler arasındaki sınırlar belirgin olduğunda bir parçayı değiştirmek diğer parçaları daha az etkiler. Test yazmak da kolaylaşır; bir nesne, bağımlılıkları taklit edilerek tek başına denenebilir.

OOP özellikle gerçek dünya kavramlarının net olduğu alanlarda doğal bir model sunar: sipariş yönetimi, bankacılık, envanter, oyun ve arayüz bileşenleri. Mevcut bir sınıfı genişleterek yeni davranış eklemek de yeniden kullanımı artırır. Bununla birlikte her problem nesnelerle çözülmek zorunda değildir; veri işleme hatları ya da basit betikler fonksiyonel ya da prosedürel stille daha sade kalabilir.

Sık yapılan hatalar

OOP öğrenenlerin sık düştüğü tuzaklar şunlardır:

  • Her şeyi sınıfa çevirmek. Tek bir fonksiyonla çözülecek işi sınıf hiyerarşisiyle yazmak kodu gereksiz karmaşıklaştırır.
  • Derin kalıtım zincirleri kurmak. Alt sınıf, üst sınıfın değişikliğinden kolay etkilenir; çoğu zaman nesneleri birleştirmek (kompozisyon) daha esnek olur.
  • Nesneleri yalnızca veri taşıyıcısı yapıp mantığı dışarıda bırakmak. Böylece OOP'nin faydası kaybolur.
  • Kapsüllemeyi atlayıp tüm alanları herkese açık tutmak.

SOLID prensipleri bu hatalardan kaçınmak için kullanılan yaygın tasarım kılavuzlarıdır; tek sorumluluk, açık-kapalı ve bağımlılığı tersine çevirme gibi ilkeleri içerir.

OOP ile ilişkili kavramlar

Tasarım desenleri (design patterns), nesne yönelimli sistemlerde tekrar eden sorunlara geliştirilmiş kanıtlanmış çözüm şablonlarıdır. Arayüz ve soyut sınıf, birden fazla sınıfın uyması gereken sözleşmeyi tanımlar. Bağımlılık enjeksiyonu, bir nesnenin ihtiyaç duyduğu başka nesneleri kendisi üretmek yerine dışarıdan almasıdır; bu da test edilebilirliği artırır.

Fonksiyonel programlama ise OOP'nin alternatifi değil, tamamlayıcısıdır. Modern diller bu stillerin hepsini destekler; deneyimli geliştiriciler duruma göre karıştırır.

Mindset programlarında nerede çalışılır?

Python ile Nesne Yönelimli Programlama programı, sınıf temelleri ve kapsülleme, kalıtım ile kompozisyon, özel metotlar, veri sınıfları, tasarım desenleri ve refaktör konularını Python üzerinden işler. Python'da script yazan ancak kodu sınıflarla yapılandırmayı öğrenmek isteyen geliştirici ve veri ekipleri için uygundur.

SOLID Prensipleri ve Nesne Yönelimli Tasarım programı ise dilden bağımsız tasarım kararlarına odaklanır. Mevcut kod tabanını daha bakımı kolay hale getirmek isteyen yazılım ekipleri için bu programlar birbirini tamamlar.

İlgili Mindset programı

Python ile Nesne Yönelimli Programlama

Sık sorulanlar

Sık sorulan sorular

OOP öğrenmek için hangi dille başlamak uygundur?

Python, sade söz dizimi sayesinde sınıf, nesne ve kalıtım kavramlarını rahat öğretir. Java ve C# ise nesne yönelimli yapıyı daha katı ve zorunlu biçimde uygular. Hedefiniz hangi alanda çalışmaksa o alanda yaygın dili seçmek mantıklıdır; kavramlar diller arasında büyük ölçüde taşınır.

OOP ile fonksiyonel programlama birlikte kullanılabilir mi?

Evet. Çoğu modern dil bu yaklaşımları destekler. Nesneler, uygulamanın ana kavramlarını ve durumunu yönetirken, fonksiyonel teknikler veri dönüşümlerinde ve yan etkisiz hesaplamalarda kullanılır. Bu yaklaşımları birlikte kullanmak, tek bir yaklaşıma bağlı kalmaktan çoğu zaman daha okunabilir kod üretir.

OOP'de nesneler birbirleriyle nasıl haberleşir?

Nesneler birbirlerinin metotlarını çağırarak haberleşir. Bu çağrı, bir mesaj göndermek gibidir: gönderen nesne, alıcının iç ayrıntısını bilmeden yalnızca açık arayüzünü kullanır. Bu yaklaşım, nesneler arasındaki bağımlılığı azaltır ve bir nesnenin iç işleyişi değiştiğinde diğerlerinin bozulmasını önler.

Her projede OOP kullanmak şart mı?

Hayır. Küçük betikler, veri dönüşüm hatları ve tek seferlik analizler çoğu zaman fonksiyonlarla daha sade yazılır. OOP, kodun uzun süre bakımının yapılacağı, birden fazla geliştiricinin çalıştığı ve kavramsal olarak net nesnelerin bulunduğu projelerde asıl değerini gösterir.

OOP Nedir? Nesne Yönelimli Programlama Rehberi