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.
C#’ta soyutlama, abstract class (soyut sınıf) ve interface (arayüz) kullanılarak gerçekleştirilebilir.
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.
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(); } }
Motor çalıştırılıyor... Toyota arabası yola çıkıyor. Motor çalıştırılıyor... Honda motosikleti sürülüyor.
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! } }
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 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}"); } }
Dairenin Alanı: 78.54 Dikdörtgenin Alanı: 24.00
Ö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 |
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.