C# Dersleri 77 - Abstraction

C# Dersleri 77 - Abstraction


C# Abstraction (Soyutlama) Nedir?

Abstraction (Soyutlama), Nesne Yönelimli Programlama’nın (OOP) temel ilkelerinden biridir. Soyutlama, karmaşıklığı azaltarak yalnızca gerekli olan özellikleri ve davranışları ortaya çıkarmayı sağlar. Gereksiz detayları gizleyerek, kullanıcıların nesneleri daha basit bir şekilde kullanmasını amaçlar.

Abstraction Neden Kullanılır?

  • Gereksiz detayları gizleyerek kodun okunabilirliğini artırır.
  • Yalnızca önemli bilgileri göstererek kullanım kolaylığı sağlar.
  • Kod tekrarını önler ve bakımını kolaylaştırır.
  • Gerçek dünyadaki nesneleri yazılıma daha iyi modellemeye yardımcı olur.

Abstraction Nasıl Uygulanır?

C#’ta soyutlama, abstract class (soyut sınıf) ve interface (arayüz) kullanılarak gerçekleştirilebilir.

1. Abstract Class ile Abstraction

Bir sınıf abstract olarak tanımlandığında, doğrudan bir nesne oluşturulamaz. Soyut sınıflar, temel bir şablon görevi görerek alt sınıfların belirli metotları uygulamasını zorunlu kılar.

Abstract Class Kullanımı

using System;

abstract class Vehicle
{
    public string Brand;

    public void StartEngine()
    {
        Console.WriteLine("Motor çalıştırılıyor...");
    }

    // Soyut metot: Alt sınıflar bu metodu ezmelidir
    public abstract void Drive();
}

class Car : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine($"{Brand} arabası yola çıkıyor.");
    }
}

class Motorcycle : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine($"{Brand} motosikleti sürülüyor.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Car myCar = new Car { Brand = "Toyota" };
        myCar.StartEngine();
        myCar.Drive();

        Motorcycle myBike = new Motorcycle { Brand = "Honda" };
        myBike.StartEngine();
        myBike.Drive();
    }
}

Programın Çıktısı

Motor çalıştırılıyor...
Toyota arabası yola çıkıyor.
Motor çalıştırılıyor...
Honda motosikleti sürülüyor.

Abstract Class ile Metotların Ezilmesini Zorunlu Kılma

Eğer bir metot soyut (abstract) olarak tanımlanırsa, alt sınıfların bu metodu override ederek uygulaması gerekir.

abstract class Animal
{
    public abstract void MakeSound(); // Alt sınıflar tarafından uygulanmalı
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Köpek havlıyor: Hav hav!");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Kedi miyavlıyor: Miyav miyav!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.MakeSound(); // Köpek havlıyor: Hav hav!
        myCat.MakeSound(); // Kedi miyavlıyor: Miyav miyav!
    }
}

2. Interface ile Abstraction

interface, soyutlamayı sağlamak için kullanılan başka bir yöntemdir. Interface'ler, yalnızca metot imzalarını içerir, içlerinde metot gövdeleri bulunmaz. Bir sınıf birden fazla interface'i uygulayabilir.

Interface Kullanım

interface IShape
{
    double GetArea();
}

class Circle : IShape
{
    public double Radius;

    public Circle(double radius)
    {
        Radius = radius;
    }

    public double GetArea()
    {
        return Math.PI * Radius * Radius;
    }
}

class Rectangle : IShape
{
    public double Width, Height;

    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

    public double GetArea()
    {
        return Width * Height;
    }
}

class Program
{
    static void Main(string[] args)
    {
        IShape myCircle = new Circle(5);
        IShape myRectangle = new Rectangle(4, 6);

        Console.WriteLine($"Dairenin Alanı: {myCircle.GetArea():F2}");
        Console.WriteLine($"Dikdörtgenin Alanı: {myRectangle.GetArea():F2}");
    }
}

Programın Çıktısı

Dairenin Alanı: 78.54
Dikdörtgenin Alanı: 24.00

Abstract Class ve Interface Arasındaki Farklar

Özellik Abstract Class Interface
Kullanım Amacı Ortak özellikler ve metotları tanımlamak Sınıfların uygulaması gereken davranışları belirlemek
Metot Gövdesi Abstract ve normal metotlar içerebilir Sadece metot imzaları içerir (C# 8.0 sonrası varsayılan metotlar desteklenir)
Çoklu Kalıtım Tek bir abstract class miras alınabilir Bir sınıf birden fazla interface'i uygulayabilir
Erişim Belirleyiciler Public, protected gibi erişim belirleyicileri kullanılabilir Tüm metotlar varsayılan olarak public'tir

Ne Zaman Abstract Class, Ne Zaman Interface Kullanmalıyım?

  • Eğer temel bir yapı oluşturuyor ve ortak metotları paylaşmak istiyorsanız, abstract class kullanın.
  • Birden fazla sınıfa ortak davranışlar kazandırmak istiyorsanız, interface kullanın.
  • Eğer bir sınıfın sadece davranışlarını (ne yapması gerektiğini) tanımlamak istiyorsanız, interface kullanın.

Sonuç

Abstraction, kodun daha düzenli, okunabilir ve yönetilebilir olmasını sağlar. C#’ta soyutlama, abstract class ve interface kullanılarak gerçekleştirilebilir. Abstract sınıflar, hem normal hem de soyut metotlar içerebilirken, interface’ler yalnızca metot imzalarını içerir. Hangi yapıyı seçeceğiniz, projenizin ihtiyaçlarına bağlıdır.

Bu içeriği beğendiyseniz paylaşarak destek olabilirsiniz!


Eğitim İçeriği

Eğitim C# Dersleri
Kategori Programlama Dili
Ders Adeti 80 Ders
Dil Türkçe
Güncelleme 04/2024
  • HTML Dersleri

    HTML Dersleri Sıfırdan İleri Seviyeye

    Kategori Web Programlama
    Ders Süresi 19 Ders
    Dil Türkçe
    Güncelleme 12/2020
    Derse Başla
  • Java Dersleri

    Java Dersleri ve Nesne Yönelimli Programlama

    Kategori Programlama Dili
    Ders Süresi 125 Ders
    Dil Türkçe
    Güncelleme 09/2020
    Derse Başla
  • CSS Dersleri

    CSS Dersleri Başlangıçtan İleri Seviyeye

    Kategori Web Programlama
    Ders Süresi 49 Ders
    Dil Türkçe
    Güncelleme 10/2021
    Derse Başla
  • Java Örnek Projeler

    Java Örnek Projeler

    Kategori Programlama Dili
    Ders Süresi 20 Ders
    Dil Türkçe
    Güncelleme 10/2022
    Derse Başla
  • C# Dersleri

    C# Dersleri ve Nesne Yönelimli Programlama

    Kategori Programlama Dili
    Ders Süresi 100 Ders
    Dil Türkçe
    Güncelleme 04/2024
    Derse Başla