INTRODUZIONEQuali principi SOLIDI vengono violati?
Io lavoro sulla mia tesi di laurea sui problemi di successione e di elaborare alcune indicatori che dimostrano che un problema di eredità esiste.
Come il seguente esempio:
ESEMPIO
public static String getAnimalNoise(Animal animal) {
if (animal instanceof Dog)
return "Woof";
if (animal instanceof Cat)
return "Miau";
return "";
}
Il metodo restituisce la stringa "Woof"
se il dato caso animale è un Dog
e "Miau"
se è un Cat
. La stringa vuota perché alcuni animali non emettono alcun rumore.
Quindi la soluzione corretta dovrebbe essere il polimorfismo di utilizzo con un metodo getNoise
nella classe Animale.
Ho analizzato diversi indicatori di problemi di ereditarietà e voglio dire se alcuni di essi violano uno SOLID Principle.
ho pensato che l'esempio precedente viola il:
- principio responsabilità singola (SRP)
- Apri/principio chiuso (OCP)
- Liskov principio di sostituzione (LSP)
- Principio di inversione delle dipendenze (DIP)
Ma non sono proprio sicuro se sia vero per tutti.
ho pensato:
VIOLAZIONI PRINCIPIO
SRP violazione
Perché istruzioni condizionali a tutti viola la SRP, perché, come il caso istruzione switch o più di una dichiarazione if-else sono considerate più di una risposta bilità.
Esistono due casi, quindi esistono più motivi per modificare il metodo.
violazione OCP
Perché se un nuovo animale viene aggiunto un nuovo caso deve essere aggiunto al metodo modo il metodo non è vicino per le modifiche.
LSP VIOLATION
Ogni ramo esegue diverse azioni dipendenti dal tipo animale sub. Quale credo viola lo LSP?! Conosco l'esempio del rettangolo e del quadrato e del getArea ma questi esempi di sono adatti anche alla violazione.
DIP VIOLAZIONE
Le istruzioni condizionali prendono dipendenza che significa che le dichiarazioni dipendono dettagli e non su astrazioni che viola la DIP.
DOMANDA:
Quindi la domanda è, per l'esempio dato, sono i principi indicati davvero violato ed è il ragionamento è corretto?
Questo potrebbe essere più on-topic su Programmers.SE. – MSalters