“Dikdörtgenden Kare Miras” paradoksu için belirli bir isim var mı?


18

Belirli bir OOP arızası, Dikdörtgen'den devralınan bir Kare sınıfı sınıfı ile gösterilir; burada mantıksal olarak Kare bir Dikdörtgen uzmanlığıdır ve bu nedenle miras almalıdır, ancak bir Meydanın uzunluğunu veya genişliğini değiştirmeye çalıştığınızda her şey parçalanır.

Bu durumda neyin yanlış gittiğini açıklamak için özel bir terim var mı?


2
Tam olarak neyin yanlış gittiğini açıklar mısınız? Ne demek istediğini anlamıyorum
gnat

1
Bir dikdörtgenin, uzunluk ve genişlik ileterek boyut ayarlamasına izin veren sanal bir yöntemi olduğu varsayılarak, bir kare üzerinde farklı bir uzunluk ve genişlik ayarlamak bir dikdörtgen döndürebilir ve bir dikdörtgen üzerinde aynı uzunluk ve genişliğin ayarlanması bir kare döndürebilir. Kareyi açıkça bilmesi gereken herhangi bir kod bir kareye yayınlamaya çalışabilir. Nasıl bir hata olduğunu görmüyorum ...

8
Bu bir paradoks değil. Bu, sorunlu alanın uygunsuz bir şekilde modellenmesi durumudur. Kalıtım hiyerarşisi, sorunlu alandaki bir şey hiyerarşisiyle aynı hizaya gelmeyecektir. Olduğu zaman güzel, ama iyi bir modeldeki hile, işleri gerçek dünyadan farklı bir şekilde nerede yapmanız gerektiğini anlamaktır.
Michael Kohne

1
FWIW: Daha spesifik olarak, sorun okuma ve yazma arayüzlerinin uyuşmamasıdır. Yani bir daireyi bir elipsin uzmanlaşması olarak okuyabilir, ancak sadece bir dairenin uzmanlığı olarak bir elips yazabilirsiniz.
Macke

1
@GrandmasterB Görünüşe göre çelişkili bir doğa sergileyen herhangi bir kişi, şey veya durumdan geçiyorum. Çelişki, meydanın farklı özelliklere sahip olması durumunda, bir Meydanın bir tür Dikdörtgen olmadığını söylememiz gerekir; Muhtemelen hiçbir gerçek uygulama Dikdörtgen ve Kare tiplerine sahip olmayacaktır, sadece sınıf tabanlı paradigmalarda ortaya çıkabilecek belirli bir sorunu göstermek için bir soyutlamadır.
Victor

Yanıtlar:


27

Wikipedia sadece Circle-elips problemi olarak bahsediyor

Daire elips sorunu (bazen bilinen yazılım geliştirme kare dikdörtgen bir sorun ) nesne modellemede alt tip polimorfizmi kullanılırken ortaya çıkabilecek tuzaklar bir dizi gösterilmektedir. Sorunlara en çok nesne yönelimli programlama kullanılırken rastlanır.

Bu, Liskov ikame prensibi olarak bilinen SOLID kısaltmasında L'dir . Bu sorun, bu prensibin ihlali olarak ortaya çıkar.

Sorun, çemberleri ve elipsleri (veya benzer şekilde kareler ve dikdörtgenler) temsil eden sınıflar arasında hangi alt tip veya miras ilişkisinin olması gerektiğiyle ilgilidir. Daha genel olarak, sorun, bir temel sınıf, bir nesneyi türetilmiş bir sınıfta bulunan (daha güçlü) bir değişkeni geçersiz kılacak ve Liskov ikame prensibinin ihlal edilmesine neden olacak şekilde mutasyona uğratan yöntemler içerdiğinde ortaya çıkabilecek zorlukları göstermektedir ...


1
Ve bunu okuduktan sonra, Vikipedi "Liskov ikame ilkesinin [ihlali]" olarak daha akademik bir açıklamadan bahsediyor. Teşekkürler :)
Victor

1
Şey, ona nasıl baktığınıza bağlı olarak sadece bir ihlal. Şahsen, tüm daireler elips şeklindedir; ihlal yok. Elips için yöntemler kısıtlayıcı hale gelirse bir ihlal olmaya başlar. O zaman, bu özel senaryoda, bir daire, o elips sözleşmesinin bir alt türü olamaz.
Mark Canlas

6
@MarkCanlas Sorun tartışmasız Liskov ikame ilkesinin ihlalidir. Diğer ilkelerin ihlali olmayabilir, ancak kimse bunu iddia etmedi. Sözleşmeler kırılacak herhangi bir değişmez içermediğinden (bunun doğru olduğu durumlarda yararlı bir model hayal edemememe rağmen) sorun oluşmadığında, LSP'nin ihlali olmayabilir, ancak bu sorun , oluştuğunda, bir LSP ihlali nedeniyle değildir.

7
@Mark Canlas: hayır, sabit daire sabit bir elips, değişebilir daire değiştirilebilir bir elips değildir. Geometride sabitliğin olduğu varsayılırsa, bir elipsi değiştiremezsiniz, başka bir elips alabilirsiniz
maxim1000

1
Liskov İkame Prensibi'nin Tarih Kısıtlaması / Kuralı, bir alt tip yeni yöntemler eklediğinde, bu yöntemlerin nesnenin durumunu, olmayan bir tarih (yani bir dizi durum) oluşturacak şekilde değiştirmesine izin verilmediğini söyler. süper tipte izin verilir. Örneğin, değişmez bir değişkenin alt tipini yapamazsınız, çünkü sadece üst tipin yöntemleriyle manipüle edildiğinde durum her zaman aynıdır, oysa alt tipin mutasyon yöntemleriyle manipüle edildiğinde durum değişir. Bu, süper tipin izin vermediği bir tarih.
Jörg W Mittag


8

Liskov İkame İlkesinden daha temel bir düzeyde, bu bir kategori hatası veya kategori hatasıdır

İçinde davranış modelleme bağlamında bir kare sadece dikdörtgen bir tür değil.

Bunu fark ettiğinizde, ilk varsayım (bir kare dikdörtgen şeklindedir) oyundan kaldırıldığından sorun buharlaşır.

Bu cevapla ilgili sorun, okuldan bu yana geometri yapan herkese bir meydanın bir dikdörtgen türü olduğu şeklinde delinmesidir. Ancak bunun sadece çok spesifik bir bağlamda (geometrik şekillerin iç açılarının özelliklerine göre sınıflandırılması) doğru olduğunu anlamak çok önemlidir. Davranış açısından kare bir dikdörtgen değildir. Bir sınıflandırma kümesini yanlış bağlamda görüntülemek bir kategori hatasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.