Esiste un nome specifico per il paradosso "Square inherits from Rectangle"?

18

Un certo fallimento di OOP è mostrato con una classe Square che eredita da Rectangle, dove logicamente Square è una specializzazione di Rectangle e dovrebbe quindi ereditarlo, ma tutto cade a pezzi quando si tenta di cambiare la lunghezza o la larghezza di un quadrato.

Esiste un termine specifico per descrivere cosa sta andando male in quel caso?

    
posta Victor 24.05.2013 - 19:20
fonte

3 risposte

27

Wikipedia si riferisce semplicemente ad esso come problema Circle-ellipse

The circle-ellipse problem in software development (sometimes known as the square-rectangle problem) illustrates a number of pitfalls which can arise when using subtype polymorphism in object modelling. The issues are most commonly encountered when using object-oriented programming.

This is the L in the acronym S.O.L.I.D. which is known as the Liskov substitution principle. This problem arises as a violation of that principle.

The problem concerns which subtyping or inheritance relationship should exist between classes which represent circles and ellipses (or, similarly, squares and rectangles). More generally, the problem illustrates the difficulties which can occur when a base class contains methods which mutate an object in a manner which might invalidate a (stronger) invariant found in a derived class, causing the Liskov substitution principle to be violated...

    
risposta data 24.05.2013 - 19:26
fonte
8

Lo considererei una violazione del Principio di sostituzione di Liskov - la sottoclasse Square viola in modo specifico l'invarianza di quella lunghezza e la larghezza sono indipendenti.

    
risposta data 24.05.2013 - 20:21
fonte
8

Ad un livello più fondamentale del Principio di sostituzione di Liskov, questo è un errore di categoria o errore di categoria

Nel contesto del comportamento di modellazione un quadrato semplicemente non è un tipo di rettangolo.

Quando ti rendi conto di questo il problema evapora poiché l'ipotesi iniziale (un quadrato è un tipo di rettangolo) viene rimossa dal gioco.

Il problema con questa risposta è che, fin dalla scuola, viene forato in chiunque faccia la geometria che un quadrato è un tipo di rettangolo. Ma è molto importante capire che questo è vero solo in un contesto molto specifico (la classificazione delle forme geometriche basata sulle proprietà dei loro angoli interni). In termini di comportamento, un quadrato non è un rettangolo. Vedere un insieme di classificazioni nel contesto sbagliato è un errore di categoria.

    
risposta data 08.05.2014 - 19:38
fonte

Leggi altre domande sui tag