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.