Neler yeni
Metin2 Support

Metin2 Dünyasına Hoş Geldiniz! Yeni bir maceraya adım atın ve topluluğumuza katılın. Sorularınızı sormak, deneyimlerinizi paylaşmak ve diğer oyuncularla iletişim kurmak için hemen kaydolun. Kayıt olun, etkileşimde bulunun ve Metin2 dünyasındaki serüveninizi daha da özel hale getirin. Birlikte oynamak için sabırsızlanıyoruz!

Object Oriented Programming Nedir?

ciow3r

New member
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
olmasını sağlar.

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
olabilir.

Davranışları ise:

  • Çalıştır
  • Hızlan
  • Fren yap
  • Durdur
olabilir.

Programlama içerisinde de aynı mantık kullanılır.

Opp nedir

Class Nedir?​

Class, nesneleri oluşturmak için kullanılan şablondur.

Örneğin:

Araba

bir class olabilir.

Bu class'tan:

  • BMW
  • Mercedes
  • Toyota
gibi farklı nesneler oluşturabilirsiniz.

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
gibi birçok farklı yapı oluşur.

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:

  1. Encapsulation
  2. Inheritance
  3. Polymorphism
  4. Abstraction
Bunların yanında:

  • Class
  • Object
  • Constructor
  • Property
  • Method
gibi konuları da bilmek gerekir.

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?​

private

bir 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?​

public

dış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
olarak başlamasını sağlayabilirsiniz.

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
özelliklerine sahip olur.

Inheritance Neden Kullanılır?​

Tekrar eden kodları azaltmak için kullanılabilir.

Örneğin oyunda:

  • Savaşçı
  • Büyücü
  • Okçu
bulunuyorsa üçünün de:

  • Can
  • İsim
  • Hareket
  • Seviye
özelliklerini ayrı ayrı yazmak yerine ortak bir Karakter class'ı oluşturabilirsiniz.

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.

323384 nesne yonelimli programlama oop nedir

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ı
gibi bütün detayları bilmeniz gerekmez.

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
Davranışları:

  • Sipariş ver
  • Adres değiştir

Urun​

Özellikleri:

  • İsim
  • Fiyat
  • Stok
Davranışları:

  • Stok azalt
  • Fiyat güncelle

Sepet​

Özellikleri:

  • Ürünler
  • Toplam fiyat
Davranışları:

  • Ürün ekle
  • Ürün çıkar
  • Toplam hesapla
Bu şekilde sistem daha anlaşılır parçalara bölünür.

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
kavramlarıyla karşılaşırsınız.

Ö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.
Bu nedenle OOP bir araçtır.

Her probleme zorla uygulanmamalıdır.

Procedural Programming ile Farkı Nedir?​

Procedural Programming daha çok:

  • Fonksiyonlar
  • Adım adım işlemler
üzerinden ilerler.

Örneğin C dili ağırlıklı olarak prosedürel yaklaşımda kullanılır.

OOP ise:

  • Nesne
  • Class
  • Davranış
  • Veri
üzerinden sistem oluşturur.

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:

  1. Değişken
  2. Fonksiyon
  3. Class
  4. Object
  5. Constructor
  6. Property
  7. public/private
  8. Encapsulation
  9. Inheritance
  10. Polymorphism
  11. Abstraction
  12. Interface
  13. Composition
Bu sıralama konuların birbirini tamamlamasını sağlar.

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
konularını anlamak daha önemlidir.

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
konularını uygulayabilirsiniz.

Oyun İçin Basit OOP Projesi​

Örneğin:

Karakter
Savasci
Buyucu
Silah
Dusman

class'ları oluşturabilirsiniz.

Karakter:

  • Can
  • Hasar
  • Seviye
özelliklerine sahip olabilir.

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
gibi farklı yaklaşımlar vardır.

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.
 

Konuyu görüntüleyenler

  • Üst