Herkese selamlar, bugünkü konumuz Yeni Başlayanlar İçin OOP ve POP? elimden geldiğince anlatacağım. Eleştiriye her zaman açık biri olarak her insan gibi bende hata yapabilirim. konu altından saygı çerçevesinde dile getirirseniz bilgi alış-verişi/beyin fırtınası yapabilirim. :͛)͛
OOP vs POP?
OOP vs POP yani nesne yönelimli programlama ile prosedürel programlama nedir be arasındaki farklar nelerdir onlara değiniceğiz.
Programlamaya yeni başlayanların en çok karıştırdığı konulardan biri budur. Bir koda bakıyorsunuz dümdüz yazılmış, başka bir koda bakıyorsunuz içinde "class" yazıyor, "self" yazıyor, bir sürü farklı kodlar var. Eee buda haliyle "Hangisi daha iyi?" ve "Neden iki farklı yol var?" diye düşünebilirsiniz. Bu sorunun tek bir cevabı yok ama hangi durumda hangisi tercih edilmeli, bunu anlamak projeye başlarken size büyük zaman kazandırır. Zaman kaybetmemek adına konuya geçelim.
OOP ve POP Nedir?
Önce en net haliyle kısa kısa anlatayım, sonra detaylarına ineriz:
POP (Procedural Programming): Programın adım adım, yukarıdan aşağıya doğru fonksiyonlar üzerinden ilerlediği yoludur. "Prosedür" kelimesi zaten "işlem adımları" demektir yani bilgisayara "Önce şunu yap, sonra bunu yap, en son da bana sonucu ver" dersiniz.
OOP (Object Oriented Programming): Programın nesneler (object) üzerinden tasarlandığı yoldur. Gerçek hayattaki şeyleri kodun içine taşıma mantığı da diyebiliriz.
Yani POP’ta “ne yapılacak” odaklı ilerleriz. İşin kendisine, eyleme odaklanırsın. OOP’ta ise “kim yapacak” mantığı vardır. İşlemi yapacak olan nesneleri tasarlarsın, onlar da yaparlar.
POP (Prosedürel Programlama) Mantığı?
POP dediğimiz yapı aslında programlamanın en temel, en eski ve en düz halidir. Bilgisayarın kendi çalışma mantığına çok yakındır çünkü bilgisayarlar da komutları sırayla çalıştırır.
Mantık şu:
1. Kullanacağın veriyi yani sayıları, yazıları belirle.
2. Bu verilerle ne yapacağını söyleyen bir fonksiyon yaz.
3. Fonksiyona veriyi ver, o da sana sonucu versin.
Basit bir POP örneği (C dili):
C:
#include <stdio.h>
int topla(int a, int b) {
return a + b;
}
int main() {
int sonuc = topla(5, 3);
printf("Sonuc: %d", sonuc);
return 0;
}
Burda her şey fonksiyonlar üzerinden ilerliyor. Veri yani 5 ve 3 rakamları ile işlem (toplama işlemi) ayrı ayrı duruyor. Rakamları alıyoruz, toplama makinesinin içine atıyoruz, makine bize 8 sonucunu veriyor. İş bittikten sonra o verilerle makinenin hiçbir bağı kalmıyor. Düz, net ve tek seferlik bir işlem.
OOP (Nesne Yönelimli Programlama) Mantığı?
OOP’ta olay biraz daha değişiyor. Yazdığımız kodlar uzadıkça, veriler ve fonksiyonlar her yere dağılmaya başlar. OOP ise bize şunu söylüyor; "Dağınık çalışma, veriyi ve o veriyi kullanacak işlemi bir araya getirip tek bir paket yap."
Formülümüz şu:
Veri + Fonksiyon = Nesne
Basit bir OOP örneği (Python):
Python:
class HesapMakinesi:
def __init__(self, a, b):
self.a = a
self.b = b
def topla(self):
return self.a + self.b
islem = HesapMakinesi(5, 3)
print(islem.topla())
Burada artık fonksiyon tek başına olmuyor. HesapMakinesi adında bir nesnenin içinde duruyor. 5 ve 3 verileri de bu nesnenin kendisine ait ve biz nesneye "Kendi içindeki sayıları topla" diyoruz, o da topluyor. Yani veri ve eylem ayrılmaz bir bütün haline geliyor.
OOP ve POP Arasındaki Temel Farklar Nelerdir?
Bu kısmı iyi anlamak kod yazarken baya işe yarar çünkü ikisini yan yana koyduğumuzda ortaya şöyle bir tablo çıkar:
POP:
1. Fonksiyon yani işlem odaklıdır.
2. Veri ve işlem tamamen ayrıdır. Veriler ortalıktadır, her fonksiyon o veriyi alıp değiştirebilir.
3. Kod yukarıdan aşağıya doğru akar.
4. Küçük projelerde çok daha pratiktir, hemen yazıp sonucu alırsınız.
OOP:
1. Nesne odaklıdır. Gerçek dünyayı taklit eder. (Kullanıcı, Araba, Silah, Kitap vb.)
2. Veri ve işlem bir aradadır. Herkes kafasına göre başkasının verisini değiştiremez.
3. Kod parçalara bölünmüştür. Her parça kendi işinden sorumludur.
4. Büyük projelerde ortalığın karışmasını engeller, çok daha düzenlidir.
POP = Düz mantık
OOP = Sistemli yapı
Hangi Diller Hangisini Kullanır?
Aslında çoğu dil artık ikisini de destekliyor. İstediğiniz dilde istediğiniz tarzda kod yazabilirsiniz ama dillerin bazı karakteristik özellikleri de var.
POP ağırlıklı diller:
C: Prosedürel mantığın atasıdır. En güçlü, en hızlı dillerden biridir.
Pascal: Özellikle okullarda mantığı öğretmek için çok kullanılırdı.
OOP ağırlıklı diller:
Java: OOP kurallarını en katı uygulayan dillerden biridir. Her şey class olmak zorundadır.
C#: Java'ya çok benzer, özellikle oyun yapımında, Unity gibi ve büyük sistemlerde bu düzeni çok net görürsünüz.
Python: Çok esnektir. İster dümdüz yukarıdan aşağı kod yaz, istersen devasa nesne sistemleri kur; fark etmez, sana bırakır.
C++: C dilinin nesne odaklı çalışabilen gelişmiş versiyonudur.
OOP’un Avantajları?
POP bu kadar basitken, insanlar neden OOP gibi biraz daha karmaşık bir yapıyı öğrenmek için uğraşıyor? Çünkü OOP’un ciddi derecede artı yönleri var:
+ Mesela bir özelliği bir kere yazarsınız, başka yerlerde tekrar tekrar kullanırsınız.
+ Onlarca satır kod yazsanız da her şeyin yeri bellidir.
+ Kodun bir yerinde hata çıkarsa, bütün sistemi bozmadan sadece o kodu düzeltebilirsiniz.
+ Başkasının yazdığı bir kodu kendi projenize eklemek çok daha kolaydır.
Şu örnek üzerinden gidelim:
Python:
class Hayvan:
def ses_cikar(self):
print("Ses çıkarıyor")
class Kopek(Hayvan):
def ses_cikar(self):
print("Hav hav")
k = Kopek()
k.ses_cikar()
Burada Kopek, Hayvan adındaki ana şablondan özellik alıyor ve eğer bir de Kedi eklemek istersek her şeyi baştan yazmıyoruz, sadece Hayvan şablonunu kopyalayıp sesini değiştiriyoruz. Bu özellik sayesinde onlarca satır aynı kodu yazmaktan kurtuluyoruz.
POP’un Avantajları?
POP eski diye düşünebiliriz ama hala çok güçlüdür ve kullanıldığı çok yer vardır:
+ Aklına bir fikir geldiğinde hemen kodu yazar ve çalıştırırsın.
+ Programlamanın temel taşlarını yani değişkenler, if-else yapıları, döngüler vb öğrenmek için en iyi yoldur.
+ Sadece bir siteden veri çekecek 20 satırlık bir bot yazıyorsan, sınıflar ve nesneler kurmak tamamen zaman kaybıdır.
+ Arka planda ekstra kurulumlar yapmadığı için donanımı daha az yorar ve özellikle işletim sistemleri gibi çok hızlı çalışması gereken yerlerde hala çok popülerdir.
OOP’un Dezavantajları?
Avantajlarını anlattım, şimdi de dezavantajlarına bakalım. OOP'un da zor yanları var maalesef:
+ "Sınıf ne demek, nesne ne demek, birbirlerinden nasıl özellik alıyorlar?" gibi soruların mantığının kafaya oturması pratik gerektirir.
+ Kod yazmaya başlamadan önce kimin ne yapacağını iyi düşünmek, kağıt üstünde çizmek gerekir.
+ İki sayıyı toplayacak bir program için bile bir sürü kural koymak zorunda bırakabilir.
POP’un Dezavantajları?
POP için basit demiştik ama şunu unutmayalım ki, proje büyüdükçe POP zorlaşmaya başlar:
+ Her yerden çağrılan fonksiyonlar birbirine girer, kod karmakarışık olur. Takip etmek imkansızlaşabilir.
+ Aynı veya benzer bir işlemi farklı yerlerde yapmak için aynı fonksiyonu defalarca kopyalayıp yapıştırmak zorunda kalabilirsiniz.
+ Aradan baya bir süre geçtikten sonra yazdığınız koda baktığınızda "Ben burada ne düşünmüşüm?" deme ihtimaliniz çok yüksektir. Ekip halinde çalışmak da POP ile daha zordur.
Ne Zaman Hangisi Kullanılmalı?
Burası işin en kritik noktası, hangi yoldan gideceğinizi şu durumlar belirler:
Küçük proje / basit script → POP
(Örnek: Bilgisayarındaki dosyaları yedekleyen ufak bir kod, ağdaki IP'leri tarayan basit bir araç yazıyorsanız düz ve hızlı yazın geçin.)
Büyük proje / ekip işi → OOP
(Örneğin: Bir forum sitesi, kullanıcıları olan bir mobil uygulama veya detaylı bir oyun yapıyorsanız kesinlikle düzenli bir yapı kurmalısınız OOP ile.)
Uzun vadeli proje → OOP
(Eğer bu projeye seneye de kod ekleyeceğim diyorsanız, her şeyin düzenli klasörlerde, kendi içinde paketlenmiş nesneler olarak durması şarttır; bu yüzden tercihiniz bu olsun.)
OOP’ta Dikkat Edilmesi Gerekenler?
Yeni başlayanlar genelde burada hata yapıyor:
+ Sadece tek bir işlemi yapacak ufak bir parça için gidip devasa bir şablon oluşturma.
+ Sırf OOP kullanıyorum diye her sınıfı birbiriyle bağlamaya çalışma. Bir hata çıkarsa nerede olduğunu bulamazsınız.
+ "Şu parçaya ihtiyacım var, bu parçanın şu özellikleri olacak" diye aklında bir taslak oluştur.
+ Yazdığın kodu başka bir arkadaşına gösterdiğinde ne yaptığını ilk bakışta anlayabilmen için basit kur.
POP’ta Dikkat Edilmesi Gerekenler?
Düz mantıkla devam ediyorsan şu kuralları atlamayın:
+ Fonksiyonları düzenli yaz, bir fonksiyon sadece tek bir iş yapsın. "Hem giriş yapsın, hem mail atsın, hem şifreyi değiştirsin" diye devasa bir fonksiyon yazmanıza gerek yok.
+ Kodun en tepesinde her fonksiyonun ulaşabildiği veriler tanımlamak kolaydır ama ileride o veriyi kimin değiştirdiğini bulmak zordur.
+ Bir kodu iki veya üç kez farklı yerlere kopyaladıysan onu bir fonksiyon haline getirmeniz daha iyi olur.
OOP vs POP Hangisi Daha İyi?
Duruma göre değişir ama sektörün geneline bakarsak:
+ Yazılımcılar, telefon uygulamaları, web siteleri → OOP kullanır.
+ Düşük seviye işler, cihazların içine yazılan kodlar, hızlı iş bitiren ufak araçlar → POP kullanır.
OOP ve POP aslında rakip değil, yazılımcının elindeki iki farklı alet. İkisi birbirini tamamlayan, yerine göre kullanılması gereken iki yapıdır.
Yeni başlayan biriysen kesinlikle tavsiyem:
1. Önce POP mantığını öğren: Döngüleri, şartları, fonksiyonları dümdüz yazarak adım adım işleme mantığını kavra.
2. Sonra OOP’a geç: Ne zaman ki yazdığın kodlar birbirine girmeye başladı, dosyalar uzadı gitti, o zaman OOP'nin "düzen kurma" mantığı sana çok mantıklı gelecek ve taşlar yerine oturacak zaten.
Sorularınızı ya da eklemek istediklerinizi konu altına yazabilirsiniz, birlikte tartışırız.
Bugünkü konumuz bu kadardı okuyan herkese teşekkür ederim. Bir başka konuda görüşmek üzere saygıyla ve sevgiyle kalın....
Son düzenleme:

