C# (C Sharp) Ders 14 – Nesne Yönelimli Programlama (OOP) – Giriş

Nesne Yönelimli Programlama (OOP), programlamayı gerçek dünyadaki nesnelerle modelleyerek daha organize, modüler ve yeniden kullanılabilir kod yazma yaklaşımıdır. Veri ve bu veriyi işleyen metotlar bir araya getirilerek “nesneler” oluşturulur.

Prosedürel vs. OOP Yaklaşımı Karşılaştırması

Prosedürel Programlama: Kod, fonksiyonlardan oluşur. Veri ve fonksiyonlar ayrıdır. (Örn: C’deki basit programlar)

  • Avantajları: Basit problemler için hızlı geliştirme.
  • Dezavantajları: Büyük projelerde karmaşıklık artar, kodun yeniden kullanımı zordur.

OOP: Kod, nesnelerden oluşur. Veri ve fonksiyonlar (metotlar) bir araya getirilmiştir.

  • Avantajları: Daha organize, modüler, yeniden kullanılabilir kod. Büyük projelerde daha kolay yönetilebilirlik.
  • Dezavantajları: Başlangıçta öğrenme eğrisi daha dik olabilir.

OOP’nin Avantajları

  • Kodun Yeniden Kullanılabilirliği (Reusability): Sınıflar ve nesneler farklı projelerde tekrar kullanılabilir.
  • Modülerlik (Modularity): Program, bağımsız modüllerden oluşur. Bu sayede değişiklik yapmak daha kolaydır.
  • Esneklik (Flexibility): Yeni özellikler eklemek veya mevcut özellikleri değiştirmek daha kolaydır.
  • Bakım Kolaylığı (Maintainability): Organize bir yapı sayesinde kodun bakımı ve güncellenmesi daha kolaydır.
  • Gerçek Dünya Modellemesi: Gerçek dünyadaki nesneleri programda daha doğal bir şekilde temsil edebilirsiniz.

Temel OOP Kavramları: Sınıflar (Classes) ve Nesneler (Objects)

Sınıf (Class): Bir nesnenin özelliklerini (data) ve davranışlarını (metotlar) tanımlayan şablondur. Bir sınıf, bir “tip” veya “veri türü” olarak düşünülebilir.

  • Örnek: Araba sınıfı, arabanın rengi, modeli, hızı gibi özellikleri ve hızlanma, fren yapma gibi davranışlarını tanımlar.

Nesne (Object): Sınıfın bir örneğidir. Sınıftan oluşturulan gerçek varlıktır.

  • Örnek: kirmiziAraba nesnesi, Araba sınıfından oluşturulmuş ve rengi kırmızı olan bir arabadır.

Sınıf Tanımlama (class keyword’ü, özellikler, metotlar)

C#
public class Araba
{
    // Özellikler (Fields)
    public string Renk;
    public string Model;
    public int Hiz;

    // Metotlar
    public void Hızlan(int miktar)
    {
        Hiz += miktar;
        Console.WriteLine("Araba hızlandı. Yeni hız: " + Hiz);
    }

    public void FrenYap(int miktar)
    {
        Hiz -= miktar;
        if (Hiz < 0)
        {
            Hiz = 0;
        }
        Console.WriteLine("Araba fren yaptı. Yeni hız: " + Hiz);
    }
}

Nesne Oluşturma (new keyword’ü)

C#
// Araba sınıfından bir nesne oluşturma
Araba kirmiziAraba = new Araba();

// Nesnenin özelliklerine değer atama
kirmiziAraba.Renk = "Kırmızı";
kirmiziAraba.Model = "Toyota Corolla";
kirmiziAraba.Hiz = 0;

// Nesnenin metotlarını çağırma
kirmiziAraba.Hızlan(50);
kirmiziAraba.FrenYap(20);

Özellikler (Properties)

Özelliklerin Amacı: Sınıfın özelliklerine erişimi ve kontrolü sağlamak için kullanılır. Veri kapsüllemeyi destekler.

Getters ve Setters ile Veri Kapsülleme

  • Getter: Özelliğin değerini okumayı sağlar.
  • Setter: Özelliğin değerini değiştirmeyi sağlar. Setter içinde doğrulama (validation) yapılabilir.
C#
public class Araba
{
    private string _renk; // Gizli alan

    public string Renk
    {
        get { return _renk; }
        set
        {
            if (!string.IsNullOrEmpty(value)) // Doğrulama
            {
                _renk = value;
            }
            else
            {
                Console.WriteLine("Renk boş olamaz!");
            }
        }
    }

    // ... diğer özellikler ve metotlar ...
}

Metotlar (Methods)

Metotların Amacı: Nesnenin davranışlarını tanımlar. Sınıfın işlevselliğini sağlar.

Parametre Alma ve Dönüş Değerleri

  • Parametreler: Metota bilgi göndermek için kullanılır.
  • Dönüş Değeri: Metotun bir sonuç döndürmesini sağlar.

void Metotlar: Dönüş değeri olmayan metotlardır. Sadece bir işlev gerçekleştirirler.

Araba Sınıfının Tanımlanması

C#
public class Araba
{
    // Parametre alan ve dönüş değeri olmayan metot
    public void Hızlan(int miktar)
    {
        // ...
    }

    // Parametre almayan ve dönüş değeri olan metot
    public int GetHiz()
    {
        return Hiz;
    }
}

Main Metodunda Nesne Oluşturma ve Kullanma

C#
using System;

namespace OOPGiris
{
    class Program
    {
        static void Main(string[] args)
        {
            // Araba sınıfından bir nesne oluşturma
            Araba kirmiziAraba = new Araba();

            // Nesnenin özelliklerine değer atama
            kirmiziAraba.Renk = "Kırmızı";
            kirmiziAraba.Model = "Toyota Corolla";

            // Nesnenin metotlarını çağırma
            kirmiziAraba.Hızlan(50);
            Console.WriteLine("Arabanın hızı: " + kirmiziAraba.GetHiz()); // GetHiz() metodu çağrılır
        }
    }
}

Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/