- Katılım
- 5 Haz 2025
- Mesajlar
- 21
- Tepkime puanı
- 10
- Puanları
- 3
Object Oriented Programming Nedir?
Object Oriented Programming, Türkçesiyle Nesne Yönelimli Programlama, yazılım geliştirirken verileri ve bu veriler üzerinde çalışan işlemleri nesneler halinde düzenlemeyi amaçlayan bir programlama yaklaşımıdır.Kısaca OOP olarak da bilinir.
Bu yaklaşım özellikle büyük projelerde kodun:
- Daha düzenli
- Daha okunabilir
- Daha kolay geliştirilebilir
- Daha kolay bakım yapılabilir
C#, Java ve C++ gibi birçok modern programlama dili OOP yaklaşımını destekler.
Object Nedir?
Object yani nesne, belirli özelliklere ve davranışlara sahip yapı olarak düşünülebilir.Gerçek hayattan örnek verirsek bir:
Araba
nesnesinin özellikleri:
- Marka
- Model
- Renk
- Hız
- Yakıt
Davranışları ise:
- Çalıştır
- Hızlan
- Fren yap
- Durdur
Programlama içerisinde de aynı mantık kullanılır.
Class Nedir?
Class, nesneleri oluşturmak için kullanılan şablondur.Örneğin:
Araba
bir class olabilir.
Bu class'tan:
- BMW
- Mercedes
- Toyota
C# örneği:
class Araba
{
public string Marka;
public string Model;
public int Hiz;
public void Hizlan()
{
Hiz += 10;
}
}
Burada Araba bir class'tır.
Object Nasıl Oluşturulur?
Class oluşturduktan sonra nesne oluşturabiliriz.Örneğin:
Araba araba1 = new Araba();
araba1.Marka = "BMW";
araba1.Model = "320i";
araba1.Hiz = 0;
Burada:
Araba
class,
araba1
ise object yani nesnedir.
Başka bir nesne de oluşturabilirsiniz:
Araba araba2 = new Araba();
araba2.Marka = "Toyota";
araba2.Model = "Corolla";
İki nesne aynı class'tan oluşturulmasına rağmen farklı değerlere sahip olabilir.
OOP Mantığı Neden Kullanılır?
Küçük bir programda bütün kodları tek dosyada yazmak mümkün olabilir.Ancak proje büyüdüğünde:
- Oyuncular
- Düşmanlar
- Araçlar
- Ürünler
- Müşteriler
- Siparişler
Bütün bunları tek yerde yönetmek kodun karmaşıklaşmasına neden olur.
OOP sayesinde her yapı kendi class'ı içerisinde tutulabilir.
Örneğin:
Oyuncu
Dusman
Silah
Envanter
Gorev
ayrı class'lar olabilir.
OOP'nin Temel Kavramları Nelerdir?
Nesne yönelimli programlamada genellikle dört temel kavramdan bahsedilir:- Encapsulation
- Inheritance
- Polymorphism
- Abstraction
- Class
- Object
- Constructor
- Property
- Method
Encapsulation Nedir?
Türkçesi:Kapsülleme
olarak kullanılabilir.
Bir nesnenin verilerini doğrudan dışarıya açmak yerine kontrollü şekilde erişilmesini sağlar.
Örneğin banka hesabımız olsun.
Yanlış kullanım:
class BankaHesabi
{
public decimal Bakiye;
}
Bu durumda herhangi bir kod:
hesap.Bakiye = -500000;
yapabilir.
Bunun yerine:
class BankaHesabi
{
private decimal bakiye;
public void ParaYatir(decimal miktar)
{
if (miktar > 0)
{
bakiye += miktar;
}
}
}
şeklinde kontrol sağlanabilir.
Bu encapsulation mantığıdır.
private Nedir?
privatebir değişkene veya metoda yalnızca bulunduğu class içerisinden erişilebilmesini sağlar.
Örneğin:
private int can;
dışarıdan doğrudan değiştirilemez.
Bu sayede veriler daha kontrollü tutulur.
public Nedir?
publicdışarıdan erişime izin verir.
Örneğin:
public void HasarAl()
{
}
başka class'lardan çağrılabilir.
Property Nedir?
C# içerisinde property kullanımı oldukça yaygındır.Örneğin:
class Oyuncu
{
public string Isim { get; set; }
public int Can { get; set; }
}
Kullanımı:
Oyuncu oyuncu = new Oyuncu();
oyuncu.Isim = "Ahmet";
oyuncu.Can = 100;
Property sayesinde verilere daha kontrollü erişim sağlanabilir.
Constructor Nedir?
Constructor, bir object oluşturulduğu anda çalışan özel metottur.Örneğin:
class Oyuncu
{
public string Isim;
public int Can;
public Oyuncu(string isim)
{
Isim = isim;
Can = 100;
}
}
Nesne:
Oyuncu oyuncu = new Oyuncu("Ahmet");
şeklinde oluşturulduğunda constructor otomatik çalışır.
Can değeri 100 olur.
Constructor Neden Kullanılır?
Nesnenin başlangıç değerlerini belirlemek için oldukça kullanışlıdır.Örneğin bir oyuncu oluşturulduğunda:
- Can = 100
- Seviye = 1
- Altın = 0
Method Nedir?
Bir class içerisindeki fonksiyonlara genellikle method denir.Örneğin:
class Oyuncu
{
public int Can = 100;
public void HasarAl(int hasar)
{
Can -= hasar;
}
}
Kullanımı:
oyuncu.HasarAl(20);
Oyuncunun canı 80 olur.
Inheritance Nedir?
Türkçesi:Kalıtım
olarak kullanılır.
Bir class'ın başka bir class'taki özellikleri ve davranışları kullanmasını sağlar.
Örneğin genel bir:
Karakter
class'ı oluşturalım.
class Karakter
{
public int Can = 100;
public void HareketEt()
{
Console.WriteLine("Karakter hareket ediyor.");
}
}
Daha sonra:
class Savasci : Karakter
{
public int Zirh = 50;
}
Savasci, Karakter class'ından miras alır.
Artık Savasci:
- Can
- HareketEt
- Zirh
Inheritance Neden Kullanılır?
Tekrar eden kodları azaltmak için kullanılabilir.Örneğin oyunda:
- Savaşçı
- Büyücü
- Okçu
- Can
- İsim
- Hareket
- Seviye
Inheritance Her Zaman Kullanılmalı mı?
Hayır.Yeni başlayanların yaptığı hatalardan biri her class arasında inheritance kurmaya çalışmaktır.
Bazı durumlarda:
Composition
daha iyi bir yaklaşım olabilir.
Yani nesneleri miras yoluyla bağlamak yerine farklı parçaları bir araya getirmek tercih edilebilir.
Polymorphism Nedir?
Türkçesi:Çok biçimlilik
olarak kullanılabilir.
Aynı temel yapının farklı nesnelerde farklı davranış gösterebilmesini sağlar.
Örneğin:
class Karakter
{
public virtual void Saldir()
{
Console.WriteLine("Karakter saldırdı.");
}
}
Savaşçı:
class Savasci : Karakter
{
public override void Saldir()
{
Console.WriteLine("Savaşçı kılıçla saldırdı.");
}
}
Büyücü:
class Buyucu : Karakter
{
public override void Saldir()
{
Console.WriteLine("Büyücü büyü yaptı.");
}
}
Her ikisinde de:
Saldir()
metodu vardır.
Ancak davranışları farklıdır.
Bu polymorphism örneğidir.
virtual ve override Nedir?
C# içerisinde:virtual
bir metodun alt class'larda değiştirilebileceğini belirtir.
override
ise bu metodun yeni davranışını tanımlar.
Örneğin:
public virtual void Saldir()
alt class'ta:
public override void Saldir()
şeklinde değiştirilebilir.
Abstraction Nedir?
Türkçesi:Soyutlama
olarak kullanılır.
Bir sistemin gereksiz detaylarını gizleyerek yalnızca gerekli bölümleri dışarıya sunmayı amaçlar.
Gerçek hayattan örnek:
Bir araba kullanırken:
- Motor içerisindeki yanma
- Yakıt enjeksiyonu
- Şanzıman mekanizması
Gaz pedalına basarsınız ve araç hızlanır.
Programlama içerisinde de benzer yaklaşım kullanılabilir.
Abstract Class Nedir?
Doğrudan nesne oluşturmak için değil, başka class'lara temel olmak için kullanılabilir.Örneğin:
abstract class Hayvan
{
public abstract void SesCikar();
}
Daha sonra:
class Kedi : Hayvan
{
public override void SesCikar()
{
Console.WriteLine("Miyav");
}
}
şeklinde kullanılabilir.
Interface Nedir?
Interface, bir class'ın hangi davranışları sağlaması gerektiğini belirtir.Örneğin:
interface IUcabilir
{
void Uc();
}
Daha sonra:
class Kus : IUcabilir
{
public void Uc()
{
Console.WriteLine("Kuş uçuyor.");
}
}
kullanılabilir.
Interface ile Inheritance Aynı mı?
Hayır.Inheritance genellikle bir nesnenin:
Ne olduğu
ile ilgilidir.
Örneğin:
Savasci bir Karakterdir.
Interface ise çoğu zaman:
Ne yapabildiği
ile ilgilidir.
Örneğin:
Kus uçabilir.
Bu ayrım tasarım yaparken oldukça faydalıdır.
OOP'yi Gerçek Hayat Örneğiyle Anlayalım
Bir e-ticaret sistemi geliştirdiğimizi düşünelim.Class'larımız:
Musteri
Urun
Sepet
Siparis
Odeme
olabilir.
Musteri
Özellikleri:- İsim
- E-posta
- Adres
- Sipariş ver
- Adres değiştir
Urun
Özellikleri:- İsim
- Fiyat
- Stok
- Stok azalt
- Fiyat güncelle
Sepet
Özellikleri:- Ürünler
- Toplam fiyat
- Ürün ekle
- Ürün çıkar
- Toplam hesapla
Oyunlarda OOP Nasıl Kullanılır?
Oyun geliştirmede OOP oldukça sık görülür.Örneğin:
Player
Enemy
Weapon
Inventory
Item
NPC
Quest
Vehicle
gibi class'lar oluşturulabilir.
Bir Weapon class'ı:
class Weapon
{
public string Name;
public int Damage;
public void Fire()
{
Console.WriteLine("Silah ateş etti.");
}
}
şeklinde olabilir.
Unity'de OOP Kullanılıyor mu?
Evet.Unity ile C# kullanırken sürekli:
- Class
- Object
- Inheritance
- Encapsulation
- Interface
Örneğin:
public class Player : MonoBehaviour
{
}
kodunda:
Player
class'ı:
MonoBehaviour
class'ından miras almaktadır.
Yani Unity öğrenirken OOP mantığını anlamak oldukça faydalıdır.
Her Şeyi Class Yapmak Gerekir mi?
Hayır.OOP'nin amacı her şeyi gereksiz yere class içerisine koymak değildir.
Basit bir işlem için birkaç fonksiyon yeterli olabilir.
Kodun yapısına ve projenin büyüklüğüne göre karar verilmelidir.
Aşırı OOP kullanımı da kodu gereksiz karmaşık hale getirebilir.
OOP'nin Avantajları
Kod Organizasyonu
Büyük sistemler küçük class'lara ayrılabilir.Tekrar Kullanılabilirlik
Aynı class farklı yerlerde kullanılabilir.Bakım Kolaylığı
Bir sistemde değişiklik yapılırken ilgili class üzerinde çalışılabilir.Genişletilebilirlik
Yeni özellikler mevcut sistem üzerine daha kolay eklenebilir.Takım Çalışması
Farklı geliştiriciler farklı class ve sistemler üzerinde çalışabilir.OOP'nin Dezavantajları
OOP her durumda en iyi çözüm değildir.Dezavantajları:
- Başlangıçta öğrenmesi daha zor olabilir.
- Yanlış tasarım class sayısını gereksiz artırabilir.
- Aşırı inheritance karmaşık sistemlere yol açabilir.
- Küçük programlarda gereksiz olabilir.
- Yanlış abstraction kodu anlamayı zorlaştırabilir.
Her probleme zorla uygulanmamalıdır.
Procedural Programming ile Farkı Nedir?
Procedural Programming daha çok:- Fonksiyonlar
- Adım adım işlemler
Örneğin C dili ağırlıklı olarak prosedürel yaklaşımda kullanılır.
OOP ise:
- Nesne
- Class
- Davranış
- Veri
Basit Procedural Örnek
int oyuncuCan = 100;void HasarAl(int hasar)
{
oyuncuCan -= hasar;
}
Küçük programda gayet yeterlidir.
OOP Örneği
class Oyuncu{
public int Can { get; private set; } = 100;
public void HasarAl(int hasar)
{
Can -= hasar;
}
}
Proje büyüdüğünde oyuncuyla ilgili bütün işlemler aynı yapı içerisinde tutulabilir.
OOP Öğrenmek İçin Hangi Dil Daha İyi?
Birçok dil kullanılabilir.Örneğin:
C#
OOP öğrenmek için oldukça uygundur.Java
OOP yaklaşımı oldukça güçlüdür.C++
Hem prosedürel hem nesne yönelimli programlama destekler.Python
OOP destekler ancak başlangıç sözdizimi daha esnektir.Yeni başlayan biri için C# veya Java ile OOP öğrenmek oldukça rahattır.
OOP Öğrenme Sırası
Yeni başlayan biri şu sırayla ilerleyebilir:- Değişken
- Fonksiyon
- Class
- Object
- Constructor
- Property
- public/private
- Encapsulation
- Inheritance
- Polymorphism
- Abstraction
- Interface
- Composition
Composition Nedir?
Bir class'ın başka bir class'ı içerisinde kullanılmasıdır.Örneğin:
class Motor
{
public void Calistir()
{
Console.WriteLine("Motor çalıştı.");
}
}
Araba:
class Araba
{
private Motor motor = new Motor();
public void Calistir()
{
motor.Calistir();
}
}
Burada:
Araba bir Motor değildir.
Arabanın:
Motoru vardır.
Bu nedenle inheritance yerine composition daha mantıklıdır.
Composition mı Inheritance mı?
Basit düşünme yöntemi:“Bir X, Y midir?”
Evet ise inheritance düşünülebilir.
Örneğin:
Kedi bir Hayvandır.
Inheritance mantıklı olabilir.
“Bir X'in Y'si var mıdır?”
Evet ise composition daha uygun olabilir.
Örneğin:
Arabanın motoru vardır.
Bu nedenle:
Araba → Motor
ilişkisi composition olabilir.
SOLID Nedir?
OOP öğrenmeye başladıktan sonra karşılaşacağınız kavramlardan biridir.SOLID, nesne yönelimli tasarım için bazı prensipleri ifade eder.
Ancak programlamaya yeni başlayan biri hemen SOLID öğrenmek zorunda değildir.
Önce:
- Class
- Object
- Encapsulation
- Inheritance
- Interface
Daha sonra SOLID öğrenmek çok daha anlamlı hale gelir.
OOP Öğrenirken Yapılan Yaygın Hatalar
Class ile Object'i Karıştırmak
Class şablondur.Object bu şablondan oluşturulan gerçek nesnedir.
Her Değişkeni public Yapmak
Encapsulation mantığını bozar.Her Yerde Inheritance Kullanmak
Gereksiz bağımlılık oluşturabilir.Çok Büyük Class Yazmak
Bir class'ın yüzlerce farklı iş yapması bakım sorunlarına neden olabilir.Sadece Tanımları Ezberlemek
OOP kod yazarak öğrenilmelidir.Gerçek Proje Yapmamak
Class mantığı ancak birkaç nesnenin birlikte çalıştığı projelerde daha iyi anlaşılır.Basit OOP Projesi Önerisi
Başlangıç için:Banka Hesabı Sistemi
yapabilirsiniz.
Örneğin:
class BankaHesabi
{
public string HesapSahibi { get; set; }
private decimal bakiye;
public void ParaYatir(decimal miktar)
{
if (miktar > 0)
{
bakiye += miktar;
}
}
public void ParaCek(decimal miktar)
{
if (miktar > 0 && miktar <= bakiye)
{
bakiye -= miktar;
}
}
public decimal BakiyeGetir()
{
return bakiye;
}
}
Bu projeyle:
- Class
- Object
- private
- public
- Method
- Encapsulation
Oyun İçin Basit OOP Projesi
Örneğin:Karakter
Savasci
Buyucu
Silah
Dusman
class'ları oluşturabilirsiniz.
Karakter:
- Can
- Hasar
- Seviye
Savaşçı ve Büyücü ise Karakter'den türeyebilir.
Bu proje inheritance ve polymorphism öğrenmek için güzel bir çalışmadır.
OOP Bilmeden Yazılım Geliştirilir mi?
Evet.OOP tek programlama yöntemi değildir.
Örneğin:
- Procedural Programming
- Functional Programming
- Data-Oriented Programming
Bazı projelerde OOP oldukça faydalıyken bazı projelerde başka yaklaşımlar daha uygun olabilir.
Ancak C#, Java ve C++ ile profesyonel geliştirme yapacak birinin OOP kavramlarını bilmesi büyük avantajdır.
OOP Öğrenme Kontrol Listesi
- Class nedir biliyor muyum?
- Object nedir biliyor muyum?
- Class ile object farkını biliyor muyum?
- Constructor kullanabiliyor muyum?
- Method oluşturabiliyor muyum?
- public ve private farkını biliyor muyum?
- Property kullanabiliyor muyum?
- Encapsulation nedir biliyor muyum?
- Inheritance kullanabiliyor muyum?
- Polymorphism mantığını biliyor muyum?
- Abstraction nedir biliyor muyum?
- Interface kullanabiliyor muyum?
- Composition ile inheritance farkını biliyor muyum?
- Küçük bir OOP projesi geliştirdim mi?
Sonuç
Object Oriented Programming yani Nesne Yönelimli Programlama, yazılımı birbirinden sorumlu nesneler ve class'lar halinde organize etmeyi sağlayan bir programlama yaklaşımıdır.Temel olarak:
Class → Nesnenin şablonu
Object → Class'tan oluşturulan nesne
şeklinde düşünülebilir.
OOP'nin dört temel konusu ise:
Encapsulation → Veriyi koruma ve kontrollü erişim
Inheritance → Başka bir class'tan özellik alma
Polymorphism → Aynı yapının farklı davranış göstermesi
Abstraction → Gereksiz detayları gizleme
şeklindedir.
Yeni başlayan biri önce class ve object mantığını anlamalı, ardından encapsulation ve inheritance konularına geçmelidir. Polymorphism, abstraction ve interface gibi kavramlar temel oturduktan sonra çok daha kolay anlaşılır.
Özellikle C#, Java, C++ veya Unity öğreniyorsanız OOP konusunu atlamamak gerekir.
Kısacası:
Önce Class ve Object → Sonra Encapsulation → Inheritance → Polymorphism → Abstraction → Interface ve Composition
sırasıyla ilerlemek OOP öğrenmenin en anlaşılır yollarından biridir.



