Liskov'un yerine geçme ilkesi - Vikipedi
İçeriğe atla
Ana menü
Gezinti
  • Anasayfa
  • Hakkımızda
  • İçindekiler
  • Rastgele madde
  • Seçkin içerik
  • Yakınımdakiler
Katılım
  • Deneme tahtası
  • Köy çeşmesi
  • Son değişiklikler
  • Dosya yükle
  • Topluluk portalı
  • Wikimedia dükkânı
  • Yardım
  • Özel sayfalar
Vikipedi Özgür Ansiklopedi
Ara
  • Bağış yapın
  • Hesap oluştur
  • Oturum aç
  • Bağış yapın
  • Hesap oluştur
  • Oturum aç

İçindekiler

  • Giriş
  • 1 Tarihçe
  • 2 Tanım ve özellikler
    • 2.1 Özellikleri
  • 3 Örnek: Dikdörtgen–Kare Problemi
  • 4 Yazılım tasarımına etkileri
  • 5 Tartışmalar ve eleştiriler
  • 6 Kaynakça

Liskov'un yerine geçme ilkesi

  • Català
  • Čeština
  • Deutsch
  • English
  • Español
  • فارسی
  • Français
  • עברית
  • Magyar
  • İtaliano
  • 日本語
  • 한국어
  • Nederlands
  • Polski
  • Português
  • Русский
  • Українська
  • 中文
  • 粵語
Bağlantıları değiştir
  • Madde
  • Tartışma
  • Oku
  • Değiştir
  • Kaynağı değiştir
  • Geçmişi gör
Araçlar
Eylemler
  • Oku
  • Değiştir
  • Kaynağı değiştir
  • Geçmişi gör
Genel
  • Sayfaya bağlantılar
  • İlgili değişiklikler
  • Kalıcı bağlantı
  • Sayfa bilgisi
  • Bu sayfayı kaynak göster
  • Kısaltılmış URL'yi al
  • Karekodu indir
Yazdır/dışa aktar
  • Bir kitap oluştur
  • PDF olarak indir
  • Basılmaya uygun görünüm
Diğer projelerde
  • Vikiveri ögesi
Görünüm
Vikipedi, özgür ansiklopedi
(LSP sayfasından yönlendirildi)
SOLID
  • Tek sorumluluk ilkesi
  • Açıklık-kapalılık ilkesi
  • Liskov'un yerine geçme ilkesi
  • Arayüz ayrımı ilkesi
  • Bağımlılığın tersine çevrilmesi ilkesi
  • g
  • t
  • d

Liskov’un yerine geçme ilkesi (İngilizce: Liskov Substitution Principle, kısaca LSP), nesne yönelimli programlamada bir yazılım bileşeninde kullanılan bir alt sınıfın, üst sınıfın yerine geçerek sistemin doğru çalışmasını sürdürebilmesi gerektiğini ifade eden bir yazılım tasarım ilkesidir. İlk kez Barbara Liskov tarafından 1987 yılında tanımlanmıştır. Bu ilke, SOLID ilkeleri adıyla bilinen beş temel yazılım mühendisliği ilkesinden biridir.[1][2]

Tarihçe

[değiştir | kaynağı değiştir]

Liskov’un yerine geçme ilkesi, bilgisayar bilimci Barbara Liskov ve Jeannette Wing tarafından 1987 yılında A Behavioral Notion of Subtyping başlıklı bilimsel bildiride tanıtılmıştır.[3] Bu bildiride, alt türlerin, üst türlerin tüm davranışsal beklentilerini karşılaması gerektiği öne sürülmüş ve bu kavram, nesne yönelimli sistemlerde alt sınıfların doğru şekilde kalıtım yoluyla kullanılabilmesi için bir temel oluşturmuştur.

Bu ilke, yazılım mühendisliği dünyasında yaygınlık kazanarak, Robert C. Martin’in öncülüğünde geliştirilen SOLID ilkeleri arasında yerini almıştır.[1]

Tanım ve özellikler

[değiştir | kaynağı değiştir]

Liskov’un yerine geçme ilkesi, genellikle şu şekilde özetlenir:

"Bir programın, bir sınıfın nesneleri yerine bu sınıfın alt sınıflarının nesneleri kullanıldığında, programın doğruluğu bozulmadan çalışmaya devam etmesi gerekir."[3]

Özellikleri

[değiştir | kaynağı değiştir]
  • Alt sınıf, üst sınıfın tüm davranışsal beklentilerini karşılamalıdır.
  • Alt sınıf, üst sınıfın arayüzünü genişletebilir, ancak değiştiremez.
  • Alt sınıflar, üst sınıftan devralınan fonksiyonların ön koşullarını daraltmamalı, sonuçlarını ise genişletmemelidir.[4]

Örnek: Dikdörtgen–Kare Problemi

[değiştir | kaynağı değiştir]

LSP’ye klasik bir ihlal örneği, “dikdörtgen–kare problemi” olarak bilinir. Kare, geometrik olarak dikdörtgenin özel bir hâli olsa da yazılım dünyasında bu ilişki kalıtımla ifade edildiğinde istenmeyen durumlar ortaya çıkabilir:

class Dikdortgen {
    protected double genislik;
    protected double yukseklik;

    public void setGenislik(double g) { this.genislik = g; }
    public void setYukseklik(double y) { this.yukseklik = y; }
    public double alanHesapla() { return genislik * yukseklik; }
}

class Kare extends Dikdortgen {
    @Override
    public void setGenislik(double g) {
        super.setGenislik(g);
        super.setYukseklik(g);
    }

    @Override
    public void setYukseklik(double y) {
        super.setGenislik(y);
        super.setYukseklik(y);
    }
}

Bu örnekte, kullanıcılar `setGenislik()` ve `setYukseklik()` yöntemlerinin birbirinden bağımsız olduğunu varsayar. Ancak `Kare` sınıfı bu varsayımı bozar, dolayısıyla LSP ihlali gerçekleşmiş olur.

Yazılım tasarımına etkileri

[değiştir | kaynağı değiştir]

LSP, nesne yönelimli programlamada kalıtım hiyerarşisinin doğru kurulmasını sağlar. İlkenin uygulanması şu faydaları getirir:

  • Kodun yeniden kullanılabilirliğini artırır.
  • Alt sınıfların üst sınıfların yerine kullanılabilir olmasını garanti eder.
  • Bakımı kolay ve genişletilebilir yazılım sistemleri oluşturulmasına katkı sağlar.[5]

Tartışmalar ve eleştiriler

[değiştir | kaynağı değiştir]

LSP, yazılım mühendisliğinde önemli bir yer edinmiş olsa da bazı durumlarda katı yorumlanmasının tasarımı zorlaştırabileceği ileri sürülmüştür.[6] Özellikle davranışsal açıdan karmaşık soyutlamalarda, alt sınıfların tüm üst sınıf beklentilerini karşılaması zor olabilir. Bu nedenle modern yazılım tasarım yaklaşımlarında kalıtım yerine bileşen kullanımı (composition) ya da arayüz temelli tasarım önerilmektedir.

Kaynakça

[değiştir | kaynağı değiştir]
  1. ^ a b Martin, Robert C. (2002). Agile Software Development: Principles, Patterns, and Practices. Prentice Hall. ISBN 9780135974445. 
  2. ^ Robert C. Martin (2000). "The Liskov Substitution Principle". Object Mentor. 21 Aralık 1996 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Mayıs 2025. 
  3. ^ a b Liskov, Barbara; Wing, Jeannette (1987). "A Behavioral Notion of Subtyping". ACM Transactions on Programming Languages and Systems. 
  4. ^ Meyer, Bertrand. Object-Oriented Software Construction. ISBN 9780136291480. 
  5. ^ Freeman, Eric; Robson, Elisabeth (2004). Head First Design Patterns. O'Reilly Media. ISBN 9780596007126. 
  6. ^ Martin Fowler (2003). "Liskov Substitution Principle". Erişim tarihi: 11 Mayıs 2025. 
  • g
  • t
  • d
Yazılım mühendisliği
Alanlar
Gereksinim çözümlemesi • Yazılım tasarımı • Programlama • Biçimsel yöntemler • Yazılım testi • Yazılım sistemleri • Yazılım dağıtımı • Yazılım bakımı
Kavramlar
Veri modelleme • Kurumsal mimari • Functional specification • Modelleme dili • Programlama paradigması • Yazılım • Yazılım mimarisi • Yazılım geliştirme yöntembilimi • Yazılım geliştirme süreci • Yazılımın niteliği • Yazılım kalite güvencesi • Yapısal analiz
Yönelimler
Atik • Aspect-oriented • Nesne yönelimli • Ontoloji • Servis odaklı • SDLC
Modeller
Geliştirme modelleri: Atik • Yinelemeli model • RUP • Scrum • Spiral model • Waterfall model • XP • V-Model
Diğer modeller: CMMI • Veri modeli • İşlev modeli • IDEF • Bilgi modeli • Metamodeling • Nesne modeli • Görünüm modeli • UML
Yazılım
mühendisleri
Victor Basili • Dennis Ritchie • Kent Beck • Peter Chen • Grady Booch • Fred Brooks • Barry Boehm • Bjarne Stroustrup • Ward Cunningham • Ole-Johan Dahl • Tom DeMarco • Edsger Dijkstra • Martin Fowler • C. A. R. Hoare • Watts Humphrey • Michael A. Jackson • Ivar Jacobson • Craig Larman • James Martin • Bertrand Meyer • David Parnas • Winston W. Royce • James Rumbaugh • Danese Cooper • Niklaus Wirth • Edward Yourdon
İlgili alanlar
Bilgisayar bilimi • Bilgisayar mühendisliği • İşletme mühendisliği • Geçmiş • Matematik • Proje yönetimi • Risk yönetimi • Sistem mühendisliği
"https://tr.wikipedia.org/w/index.php?title=Liskov%27un_yerine_geçme_ilkesi&oldid=35429070" sayfasından alınmıştır
Kategoriler:
  • SOLID ilkeleri
  • Nesne yönelimli programlama
  • Yazılım tasarımı
  • Yazılım mühendisliği
  • 1987 tanıtımları
  • Sayfa en son 21.45, 2 Haziran 2025 tarihinde değiştirildi.
  • Metin Creative Commons Atıf-AynıLisanslaPaylaş Lisansı altındadır ve ek koşullar uygulanabilir. Bu siteyi kullanarak Kullanım Şartlarını ve Gizlilik Politikasını kabul etmiş olursunuz.
    Vikipedi® (ve Wikipedia®) kâr amacı gütmeyen kuruluş olan Wikimedia Foundation, Inc. tescilli markasıdır.
  • Gizlilik politikası
  • Vikipedi hakkında
  • Sorumluluk reddi
  • Davranış Kuralları
  • Geliştiriciler
  • İstatistikler
  • Çerez politikası
  • Mobil görünüm
  • Wikimedia Foundation
  • Powered by MediaWiki
Liskov'un yerine geçme ilkesi
Konu ekle