• Yaklaşım: İşi yapma/düzenleme/formalize etme ahlâkı. Bir olguya, yapıya, inşâ’ya yaklaşma biçimidir.

OOP nedir?

  • Bir programlama dili veya teknolojisi değil, bir yazılım geliştirme yaklaşımıdır.
  • Gerçek hayatı programlama için simüle eden nesneleri baz alan bir programlama tekniğidir.
  • Nesne Tabanlı Programlama bir yaklaşımdır.

Nesne (Object)

  • OOP’de en küçük esasa parça nesne/obje/object’tir.
  • Gerçek bir sistem nesnel parçalara ayrılır ve bu parçalar (nesneler) arasında ilişkiler kurulur.
  • Nesneler kendi aralarında haberleşebilirler
  • Gerçek hayattaki elle tutulur, gözle görülür her olgu (sen, ben, personel, ürün, araba, satış vb.) bir nesnedir.
  • Gerçek hayattaki herhangi bir olguyu, programlama dünyasında (yazılım simülasyonunda) onu tarif eden bir nesne olarak modellemek esastır. Yani gerçek dünyadaki nesnelerin programdaki karşılıkları (muadilleri) oluşturulur.

Nesne Yaratma Yöntemi: Nesne Modellemesi ve Sınıf (Class)

  • Gereklilik: Nesnelerin oluşturulabilmesi için önce modellenmesi gerekir.
  • Araç: Nesne modeli, programlama dillerinde Sınıf (Class) yapısı ile gerçekleştirilir.
    • Sınıf (Class): Nesnenin soyut bir tanımı, planı veya modelidir.
    • Nesne (Object): O modelden (sınıftan) üretilmiş somut bir örnektir.
  • Kural: Bir nesne üretebilmek için mutlaka bir class’a ihtiyaç vardır. (interface gibi başka yapılar nesne üretemez.)

Nesnenin Anatomisi: İç Yapısı

Bir nesne iki ana bileşenden oluşur:

  • 1. Alanlar (Fields):
    • Nesnenin durumunu (state) belirleyen verileri tutan alanlardır.
    • Bir nesnenin özelliklerini (attributes) temsil ederler. Örneğin, bir “Araba” nesnesi düşünün. Bu arabanın Renk, ModelYılı, Hız, Marka gibi özellikleri olur. İşte bu özelliklerin her biri birer field’dır ve nesnenin o anki durumunu belirleyen verileri tutarlar.
  • 2. Fonksiyonlar (Davranışlar):
    • Nesnenin field’larındaki değerleri işleyebilmesi ve eylemde bulunabilmesi için gereken fonksiyonlardır.

Stack ve Heap

KriterStack (Yığın)Heap (Öbek)
Temel TanımÜst üste konulmuş tabaklar gibidir.
LIFO (Last-In, First-Out) prensibiyle çalışır, en son eklenen ilk çıkar.
Büyük bir depo veya ambar gibidir.
Veriler organize bir sırada değil, uygun bulunan herhangi bir boş alana yerleştirilir.
Veri YapısıDoğrusal, yüksek düzeyde organize ve sıralı bir veri yapısıdır.Gayri-hiyerarşik, ağaç benzeri bir veri yapısıdır. Veriler arasında doğrudan bir sıra yoktur.
Bellek YönetimiOtomatiktir. Derleyici (compile time) ve CPU (runtime) tarafından yönetilir. Bir stack pointer adresi tutulur.Dinamiktir. Yönetilen dillerde (C#, Java) Garbage Collector (GC), yönetilmeyen dillerde (C, C++) programcı () tarafından yönetilir.
Erişim HızıÇok hızlı. Bellek blokları bitişiktir ve erişim sadece bir pointer’ı kaydırma işlemidir. Donanım seviyesinde desteklenir.Daha yavaş. Yeni bir nesne için uygun boyutta boş bir bellek bloğu bulunmalı, bu da arama ve yönetim maliyeti getirir.
Boyut ve SınırlarGenellikle küçük ve sabit. Boyutu program çalışmaya başlamadan önce belirlenir.Genellikle büyük ve dinamik. Programın çalışma anında ihtiyaca göre büyüyebilir veya küçülebilir.
Saklanan Veri Türleri1. Değer Türleri (Value Types): int, bool, char, double, struct vb. değerlerin kendisi burada saklanır.
2. Referanslar (Pointers): Heap’te bulunan nesnelerin adreslerini tutan işaretçiler burada saklanır.
1. Referans Türleri (Reference Types): class ile oluşturulan nesnelerin kendileri burada saklanır.
2. Dinamik olarak oluşturulan veriler.
ÖmürKısa ve öngörülebilir. Verinin ömrü, tanımlandığı metodun veya scope’un çalışma süresiyle sınırlıdır. Metot bitince Stack’ten otomatik olarak silinir.Uzun ve değişkendir. Nesnenin ömrü, ona işaret eden bir referans olduğu sürece devam eder. Referans kalmadığında GC tarafından temizlenmek üzere işaretlenir.
Kullanım Alanı
  • Metot çağrıları (parametreler, yerel değişkenler)
  • Değer türlü değişkenlerin saklanması
  • new anahtar kelimesi ile oluşturulan tüm nesneler
  • Diziler, string’ler (genellikle) ve diğer karmaşık veri yapıları
Potansiyel SorunlarStack Overflow (Yığın Taşması): Ayrılan stack alanı dolduğunda (örneğin sonsuz bir recursive metod çağrısında) program çöker.1. Memory Leak (Bellek Sızıntısı): Yönetilmeyen dillerde kulalnılmayan nesneler serbest bırakılmazsa bellekte yer işgal etmeye devam eder.
2. Fragmentation (Parçalanma): Bellekteki sürekli silme ve ekleme işlemleri nedeniyle küçük, kullanılamayan bellek boşlukları oluşur.
Temel AvantajHız ve verimlilik. Otomatik bellek yönetimi sayesinde programcı için daha basittir.Esneklik. Programın çalışma anında ne kadar belleğe ihtiyaç duyulacağı bilinmediğinde büyük verileri ve nesneleri saklamak için idealdir.