← Back to list

Abstract Class - Interface: Arasındaki Farklar Nelerdir? Hangi Durumda Hangi Yapıyı Kullanmalı?

Nesne yönelimli programlamada, yazılım tasarımının kalitesini belirleyen en önemli kavramlardan biri doğru yapı seçimidir.

İpek Özbay · 2024-09-16 17:37 · 1 claps · 4.2 min read
#interfaces #abstract-class #abstract-class-interface #objects
Open on Medium ↗
Wiki topics: TLS · Design Tools & Workflow 🎮 · Gaming

Abstract Class - Interface: Arasındaki Farklar Nelerdir? Hangi Durumda Hangi Yapıyı Kullanmalı?

Nesne yönelimli programlamada, yazılım tasarımının kalitesini belirleyen en önemli kavramlardan biri doğru yapı seçimidir.

Abstract class ve interface bu yapılar arasında yer alır ve her ikisi de sınıfların ortak özellikleri paylaşmasını sağlar, ancak çeşitli kullanım senaryolarında farklı avantajlar sunar.

Mülakatlarda sıkça karşılaştığım ve yazılım geliştirme sürecinde önemli rol oynayan bu iki yapının farklarını anlamak, doğru tasarım kararları vermek açısından kritik öneme sahiptir. Bu yazıda, abstract class ve interface arasındaki temel farkları inceleyerek, her birinin hangi durumlarda tercih edilmesi gerektiğine dair bir anlayış sağlayacağız.

Abstract Class Interface — Konu Başlıkları

  • Abstract Class Nedir ?
  • Interface Nedir ?
  • Abstract Class ve Interface Arasındaki Farklar
  • Abstract Class ve Interface: Hangi Durumda Hangisini Kullanmalı?

Abstract Class Nedir?

Abstract class, nesne yönelimli programlamada (OOP) soyutlama(abstraction) yapmak için kullanılan bir sınıf(class) türüdür. Bu sınıflar, diğer sınıflar için temel olarak işlev görür, ancak kendileri doğrudan bir nesne olarak örneklenemezler yani nesnesi yaratılamaz. Abstract class’lar genellikle ortak davranışları ve özellikleri paylaşan alt sınıfların geliştirilmesinde kullanılır ve içinde hem soyut (abstract) hem de somut (concrete) metotlar barındırabilir.

Interface Nedir?

Interface, nesne yönelimli programlamada (OOP) bir sınıfın uygulaması gereken metotların yalnızca imzalarını barındıran, ancak bu metotlar için herhangi bir metot içeriği bulundurmayan bir yapıdır. Yapıcı(Constructor) metotları bulunmamaktadır. Bir interface kontrat gibi çalışır ve bir sınıf bu interface’i uygulamak istediğinde, o interface’te tanımlı tüm metotları gerçekleştirmek zorundadır. Aksi takdirde program hata verecektir.

Interface’ler, soyutlamanın en saf halidir çünkü içlerinde hiçbir somut (concrete) metot bulunmaz. Tüm metotlar, uygulamayu gerçekleştirecek sınıf tarafından tanımlanmak zorundadır. Interface’ler, bir sınıfın birden fazla interface’i uygulayabilmesi sayesinde çoklu kalıtım sağlamak için yaygın olarak kullanılır. Bu, sınıfların farklı yetenekleri bir araya getirmesine olanak tanır.

Abstract Class ve Interface Arasındaki Farklar

Abstract Class ve Interface’in teknik olarak ne olduğunu bir önceki başlıkta anladık. Aralarındaki farklardan teknik olarak bahsetmeden önce bir görsel üzerinden yorumlacağız. Aşağıdaki görselde görüldüğü üzere solda abstract class, güçlü bir gövdesi ve dalları olan bir ağaç olarak, sağda ise interface, bir bina taslağı veya planı olarak tasvir edilmiş. Güçlü bir ağaca benzetilmiş olan Abstract Class, kökleriyle birlikte zemine sağlam bir şekilde bağlı, bu da abstract class’ın bir temel yapı sunduğunu gösteriyor. Dalların olması, soyut sınıfın genişletilebilir ve üzerinde daha fazla şey inşa edilebilir olduğunu anlatıyor.

Interface, detaylı bir bina tasarımı veya iskeleti olarak gösteriliyor. Bu, interface’in sadece bir şablon sunduğunu, uygulanabilir bir yapı içermediğini vurgulamaktadır. Planlar, işlevselliğin nasıl olacağını tanımlar ancak kendisi bir uygulama içermemektedir.

Abstract Class — Interface

Abstract Class — Interface

Teknik olarak farklarına gelecek olursak :

  • Bir sınıf sadece tek bir abstract class’tan türetilebilir (Java ve C# gibi çoğu dilde sınıflar yalnızca bir sınıftan miras alabilir). Bu, abstract class’ların çoklu kalıtım desteği sunmadığı anlamına gelir. Interface tarafında ise bir sınıf birden fazla interface’i implement edebilir. Bu, çoklu kalıtımın interface’ler aracılığıyla sağlanabilmesi anlamına gelir.
  • Abstract class’lar, hem soyut (abstract) hem de somut (gövdesi olan) metotlar içerebilir; soyut metotlar sadece tanımlanır ve alt sınıflar tarafından implement edilmek zorundadır, gövdeli metotlar ise miras alınabilir veya alt sınıflar tarafından ezilebilir (override). Bu, ortak davranışların üst sınıfta tanımlanmasını sağlar. Öte yandan, interface’ler geleneksel olarak sadece soyut metotlar içerir, yani interface’te tanımlanan her metot, onu implement eden sınıflar tarafından yeniden yazılmak zorundadır. Ancak, Java 8 ve sonrası gibi modern dillerde interface’ler default metotlar (gövdeye sahip metotlar) ve static metotlar tanımlayabilir. Default metotlar, implement eden sınıflar tarafından miras alınabilirken, static metotlar interface’in kendisine ait olup belirli işlevsellikleri sağlamak için kullanılır.
  • Abstract class’lar, normal değişkenler tanımlayabilir ve bu değişkenler sınıf içindeki somut metotlar tarafından kullanılabilir. Ayrıca, abstract class’lar static ve final değişkenler de içerebilir, bu da sınıf genelinde sabit değerlerin tanımlanmasına olanak tanır. Buna karşın, interface’lerde tüm değişkenler varsayılan olarak public static final olarak tanımlanır; bu, değişkenlerin sabit olduğunu ve sadece sabit değerler (constants) için kullanıldığını belirtir. Interface’lerdeki değişkenler değiştirilemez ve genellikle tüm implementasyonlara sabitler sunmak için kullanılır.
  • Abstract class’tan doğrudan nesne oluşturulamaz çünkü abstract class’lar genellikle eksik (soyut) metotlar içerir ve bu nedenle tamamlanmış bir yapı sunmaz. Ancak, abstract class’ı miras alan somut sınıflardan nesne oluşturulabilir, böylece abstract class’lar sınıflar için bir temel sağlar ve ortak bir yapı oluşturulmasını zorunlu kılar. Buna karşın, interface’ten de doğrudan nesne oluşturulamaz. Interface, yalnızca bir kontrat sunar ve bu kontrat, interface’i implement eden sınıflar tarafından gerçekleştirilir. Interface’ler, somut sınıfların belirli işlevsellikleri kazanmasını sağlar ve sınıfların belirli bir davranış setini uygulamasını garanti eder.
  • Abstract class, sınıflar arasında ortak işlevsellikleri paylaşmak ve yeniden kullanılabilir kod oluşturmak amacıyla kullanılır. Belirli bir hiyerarşi ve ortak davranışlar olduğunda, abstract class bu yapıyı tanımlamak için uygundur. Örneğin, “Hayvan” (Animal) abstract class’ı tüm hayvan sınıfları için ortak özellikleri ve davranışları içerirken, “Köpek” ve “Kedi” gibi alt sınıflar bu yapıyı devralarak kendi özgün davranışlarını ekler. Diğer yandan, interface’ler sınıflara belirli yetenekler kazandırmak için kullanılır. Bir sınıfın belirli işlevleri yerine getirmesi gerektiğinde (örneğin, “Yüzebilir” veya “Uçabilir”), interface’ler bu işlevselliği sağlar ve bir sınıf birden fazla interface’i implement ederek çeşitli yetenekleri bir araya getirebilir.
  • Abstract class’lar genellikle performans açısından interface’lere göre daha hızlı olabilir çünkü somut metotlar içerir ve bu metotlar doğrudan miras alınabilir, dolayısıyla metod çağrıları daha hızlı gerçekleşir. Interface’ler ise daha fazla soyutlama sağladığı için, implementasyonları bazen performans açısından abstract class’lara göre daha yavaş olabilir. Ancak, modern programlama dillerinde bu performans farkı genellikle çok küçüktür.

Abstract Class ve Interface: Hangi Durumda Hangisini Kullanmalı?

Abstract class ve interface kullanımı, yazılım tasarımınıza, ihtiyaçlarınıza göre değişkenlik gödterebilirler. Abstract class tercihi, sınıflararası ortak özellikler ve davranışları paylaşmak istiyorsanız daha mantıklıdır. Bu, örneğin, “Hayvan” (Animal) gibi bir abstract class’ın, “Köpek” ve “Kedi” gibi alt sınıflara temel işlevsellikler ve ortak özellikler sunmasını sağlar. Abstract class, hem soyut hem de somut metotları içerebildiğinden, ortak kodu tek bir yerde tanımlayarak kodun yeniden kullanılabilirliğini artırır.

Bir diğer yandan, interface kullanımı, bir sınıfa birden fazla işlevsellik kazandırmak gerektiğinde tercih edilir. Interface’ler, bir sınıfın birden fazla interface’i implement etmesine olanak tanıyarak farklı yetenekleri bir araya getirmeyi sağlar. Örneğin, bir sınıf hem “Uçabilir” hem de “Yüzebilir” gibi yetenekleri aynı anda taşıyabilir. Interface’ler, genellikle belirli işlevsellikleri belirli bir kontrat şeklinde sunar ve sınıfların bu işlevleri uygulamasını sağlar.

Sonuç olarak, abstract class’lar daha fazla yapı ve ortak kod paylaşımı sunarken, interface’ler esneklik ve çoklu işlevsellik sağlar. Hangi yapının kullanılacağı, projenizin ihtiyaçlarına ve tasarım gereksinimlerine bağlıdır.


메타데이터
post_id
cc32b59cc18d
slug
abstract-class-interface-arasındaki-farklar-nelerdir-hangi-durumda-hangi-yapıyı-kullanmalı-cc32b59cc18d
url
https://medium.com/@ipek_ozbay/abstract-class-interface-aras%C4%B1ndaki-farklar-nelerdir-hangi-durumda-hangi-yap%C4%B1y%C4%B1-kullanmal%C4%B1-cc32b59cc18d
canonical_url
https://medium.com/@ipek_ozbay/abstract-class-interface-aras%C4%B1ndaki-farklar-nelerdir-hangi-durumda-hangi-yap%C4%B1y%C4%B1-kullanmal%C4%B1-cc32b59cc18d
author_url
https://medium.com/@ipek_ozbay
status
ok
fetched_at
2026-08-04 01:08:49