Cormac'ın gerçekten harika bir cevabı var, ama ilk başta kafa karışıklığı nedeni hakkında biraz ayrıntı vermek istiyorum.
OO'da kalıtım genellikle "elma ve portakal her ikisi de meyvelerin alt sınıflarıdır" gibi gerçek dünya metaforları kullanılarak öğretilir. Ne yazık ki bu, OO'daki türlerin, programdan bağımsız olarak mevcut bazı taksonomik hiyerarşilere göre modellenmesi gerektiğine dair yanlış inanca yol açmaktadır.
Ancak yazılım tasarımında, türler uygulamanın gereksinimlerine göre modellenmelidir. Diğer alanlardaki sınıflandırmalar genellikle önemsizdir. "Elma" ve "Portakal" nesneleri ile gerçek bir uygulamada - bir süpermarket için bir envanter yönetim sistemi - muhtemelen hiç farklı sınıflar olmayacak ve "Meyve" gibi kategoriler süpertipler yerine özellikler olacaktır.
Daire-elips problemi kırmızı bir ringa balığıdır. Geometride, bir daire bir elipsin uzmanlaşmasıdır, ancak örneğinizdeki sınıflar geometrik şekiller değildir. En önemlisi, geometrik figürler değişmez. Bunlar edilebilir dönüştürülmüş olsa da, ancak daha sonra bir çember olabilir , bir üç nokta dönüştürülecektir. Dolayısıyla, dairelerin yarıçapı değiştirebileceği ancak üç noktaya geçemediği bir model geometriye karşılık gelmez. Böyle bir model belirli bir uygulamada mantıklı olabilir (örneğin bir çizim aracı), ancak sınıflandırma hiyerarşisini nasıl tasarladığınız için geometrik sınıflandırma önemsizdir.
Circle, Elips'in bir alt sınıfı mı yoksa tam tersi mi olmalı? Tamamen bu nesneleri kullanan belirli bir uygulamanın gereksinimlerine bağlıdır. Bir çizim uygulamasının, çemberleri ve elipsleri tedavi etme konusunda farklı seçenekleri olabilir:
Dairelere ve elipslere, farklı kullanıcı arayüzüne sahip farklı şekil türleri olarak davranın (örneğin, bir üç nokta üzerinde iki yeniden boyutlandırma tutamacı, bir daire üzerinde bir tutamaç). Bu, uygulama açısından geometrik olarak bir daire olan ancak bir Daire olmayan bir elips olabileceğiniz anlamına gelir.
Daireler dahil tüm elipslere aynı şekilde davranın, ancak x ve y'yi aynı değere "kilitleme" seçeneğine sahiptir.
Üç nokta yalnızca ölçekleme dönüşümünün uygulandığı dairelerdir.
Her olası tasarım farklı nesne modeline yol açacaktır -
İlk durumda, Circle ve Elips kardeş sınıfları olacak
İkincisinde, ayrı bir Circle sınıfı olmayacak
3. sınıfta ayrı bir Elips sınıfı olmayacak. Dolayısıyla, daire-elips sorunu denilen sorun, bunların hiçbirine resme girmez.
Soruyu olduğu gibi cevaplamak için: Daire elips uzatmalı mı? Cevap: Onunla ne yapmak istediğinize bağlı. Ama muhtemelen hayır.