Menu
Coddy logo textTech

Programlamada Soyutlama (Abstraction) Nedir?

Programlamada soyutlama (abstraction), bir şeyin nasıl çalıştığına dair ayrıntıları daha basit bir arayüzün arkasına gizlemek demektir; böylece onu yalnızca ne yaptığını bilerek kullanabilirsin. sorted(names) çağırmak, sıralama algoritmasını yazmadan, hatta görmeden bir listeyi sıralar.

Yazan Kevin Spektor, Kurucu ortak ve CTO

Güncellendi: 24 Eylül 2026

print("hi") yazdığında bu harflerin ekrana nasıl ulaştığını düşünmezsin. O tek satırın altında Python metni byte'lara çevirir ve işletim sisteminden onları yazmasını ister, işletim sistemi onları terminaline verir, terminal de her harfi bir font kullanarak piksel olarak çizer. Her katman üstündekine basit bir söz verir ve bu sözü nasıl tuttuğunu gizler. Bu gizleme soyutlamadır ve her program bunun gibi birçok katmanın üzerinde durur.

Soyutlama seviyeleri

SeviyeNeyle çalışırsınNeyi gizler
Senin programınprint("hi"), sorted(names)Kütüphanenin işi nasıl yaptığını
Python ve standart kütüphanesiString'ler, listeler, dosyalarBellek yönetimini, sistem çağrılarını
Yorumlayıcı (CPython)BytecodeOnu çalıştıran C kodunu ve makine kodunu
İşletim sistemiDosyalar, süreçlerDisk bloklarını, aygıt sürücülerini, CPU zamanlamasını
DonanımMakine komutlarıTransistörleri ve elektrik sinyallerini

Her seviye altındakinden kurulur ve onu bilmeden anlaşılabilir. Disk bloğunun ne olduğunu bilmeden çalışan Python kodu yazabilirsin; işletim sistemi de bir dosyanın Python kodu tuttuğunu bilmeden onu saklayabilir.

Soyutlama kodda nasıl çalışır

Programcılar kendi katmanlarını iki ana yolla kurar.

Prosedürel soyutlama bir fonksiyondur. Adı, parametreleri ve dönüş değeri arayüzdür; gövdesi gizli ayrıntıdır. average(scores) bir kez var olduğunda programın geri kalanı onu, nasıl topladığını ve böldüğünü okumadan kullanır.

Veri soyutlaması bir tipi, şeyleri nasıl sakladığıyla değil, onunla neler yapabildiğinle tanımlar. Bir kuyruk "arkaya ekle, önden al" demektir. Öğelerin bellekte nasıl durduğu özel bir karardır:

serving soup
serving pasta
serving cake

En alttaki kod deque hakkında hiçbir şey bilmez. Onu sıradan bir liste ve pop(0) ile değiştirirsen çıktı aynı kalır, yalnızca uzun kuyruklarda daha yavaştır, çünkü bir listenin ilk öğesini silmek diğer her öğeyi kaydırır. Arayüz aynı kaldı, bu yüzden sınıfın dışında hiçbir şeyin değişmesi gerekmedi.

Soyut sınıflar ve interface'ler

Nesne yönelimli programlamada soyutlama genellikle bir sınıf ailesinin ne yapması gerektiğini belirtip nasıl yapacağını her sınıfa bırakmak demektir. Python'da abc modülü bir metodu soyut olarak işaretler; uygulanmamış soyut metodu olan bir sınıf örneklenemez:

email to ana@example.com: Your package arrives today
sms to +15550100: Your package arrives today
Notifier is abstract: create an Email or an SMS instead

remind() yalnızca soyutlamaya bağlıdır: send metodu olan herhangi bir şey. Push bildirimleri eklemek tek bir yeni sınıf yazmak demektir ve remind() hiç değişmez. O son adım, yani tek bir çağrının farklı sınıflar için farklı kod çalıştırması, çok biçimliliktir: soyutlama ortak arayüzü tanımlar, çok biçimlilik onu çalıştırır.

Java'da aynı araçlar anahtar kelime olarak bulunur:

interface Notifier {
    void send(String to, String text);
}

class Email implements Notifier {
    public void send(String to, String text) { /* talk to the mail server */ }
}

new Notifier() yazmak bir derleme hatasıdır, çünkü bir interface'in çalıştırılacak bir uygulaması yoktur. Dokümanlar Java'daki soyut sınıfları ve interface'leri ayrıntılı açıklar.

Soyutlama ve kapsülleme farkı

Bu iki fikir o kadar sık birlikte görünür ki kolayca karıştırılır.

SoyutlamaKapsülleme
Cevapladığı soruBu ne yapar?Veriye kim dokunabilir?
OdakArayüz: sunulan işlemlerİç kısım: arayüzün arkasındaki veri
Başlıca araçlarFonksiyonlar, soyut sınıflar, interface'ler, modüllerprivate, _name, property'ler, #fields
ÖrnekNotifier.send() e-posta ve SMS için çalışır_balance yalnızca withdraw() üzerinden değişir
SeviyeTasarımUygulama

Soyutlama hangi işlemlerin gösterileceğine karar verir; kapsülleme geri kalanın gizli kalmasını sağlar. Yukarıdaki Queue ikisini birden yapar: add ve next soyutlamadır, _items üzerindeki alt çizgi ise kapsülleme.

Sızdıran soyutlamalar ve diğer hatalar

Joel Spolsky 2002'de sızdıran soyutlamalar yasasını (law of leaky abstractions) adlandırdı: önemsiz olmayan her soyutlama gizli ayrıntının bir kısmını dışarı sızdırır. Kayan noktalı sayılar klasik sızıntıdır. Alttaki ikili saklama kendini gösterene kadar sıradan ondalık sayılar gibi görünürler:

0.30000000000000004
False

Ne 0,1 ne de 0,2 ikili bitlerle tam olarak saklanabilir, bu yüzden toplam biraz kayar. Float'ları yıllarca bunu düşünmeden kullanabilirsin ama sonsuza kadar değil; üzerinde çalıştığın katmanın bir altını bilmenin işe yaramasının nedeni budur.

İki hata daha yaygındır:

  • Fazla erken soyutlamak. Hiç gelmeyecek durumlar için kurulmuş bir sınıf hiyerarşisi okunacak ve değiştirilecek fazladan koddur. Sandi Metz bunu "tekrar, yanlış soyutlamadan çok daha ucuzdur" diye ifade etti.
  • Soyutlamayı abstract anahtar kelimesiyle karıştırmak. Soyut sınıflar araçlardan yalnızca biridir. İyi adlandırılmış her fonksiyon da bir soyutlamadır.

Sırada ne var

Nesne yönelimli tabloyu tamamlamak için kapsülleme ve çok biçimlilik sayfalarını oku. İşletim sistemi sayfası programlarının dayandığı en büyük soyutlamayı gösterir. Pratik için Python kursu sınıfları ve fonksiyonları baştan kurar; Java kursu ise soyut sınıfları ve interface'leri anlatır.

Sıkça Sorulan Sorular

Soyutlamaya bir örnek verir misin?
En basiti bir fonksiyondur: len(items) çağırırsın, Python'un nasıl saydığını değil, ne döndürdüğünü bilerek. Bir arabanın pedalları gündelik halidir; motorun yakıtı nasıl yaktığını bilmeden hızı kontrol edersin. Nesne yönelimli kodda, tek bir send metodu olan Notifier gibi bir arayüz; e-posta, SMS ve push mesajları üzerine kurulmuş bir soyutlamadır.
Python'da soyutlama nasıl yapılır?
Python'daki her fonksiyon, sınıf ve modül, içindeki kod üzerine kurulmuş bir soyutlamadır. Resmi bir sürüm için standart abc modülü, @abstractmethod ile soyut bir taban sınıf tanımlamanı sağlar; Python bundan sonra o sınıftan ya da her soyut metodu uygulamamış herhangi bir alt sınıftan nesne oluşturmayı reddeder.
Java programlamada soyutlama nedir?
Java soyutlamayı soyut sınıflar ve interface'lerle ifade eder. Soyut bir sınıf, gövdesi olmayan ve alt sınıfların uygulaması gereken soyut metotlar içerebilir ve new ile örneklenemez. Bir interface, onu uygulayan her sınıfın sağlaması gereken metotları listeler ve bir sınıf birden fazla interface uygulayabilir.
OOP'nin dört temel ilkesi nedir?
Kapsülleme, soyutlama, kalıtım ve çok biçimlilik. Kapsülleme bir nesnenin verisini korur, soyutlama yalnızca nesnenin ne yaptığını gösterir, kalıtım bir sınıfın başka bir sınıfın kodunu yeniden kullanmasını sağlar, çok biçimlilik ise tek bir kod parçasının ortak bir arayüz üzerinden birçok tiple çalışmasını sağlar.
Soyutlama kodu kötüleştirebilir mi?
Evet, fazla erken geldiğinde ya da yanlış şeyi gizlediğinde. Hiç gelmeyecek durumlar için kurulmuş kodda, hiçbir fayda sağlamadan okunacak ve değiştirilecek fazladan katmanlar olur. Yaygın bir kural, benzer kodu iki ya da üç kez yazana kadar beklemektir; böylece ortak şekle bir ad vermeden önce o şekil netleşir.
Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA