Esiste una classe LinkedList con funzioni come add_first (), add_last (), add_after (), remove_first (), remove_last () e remove ()
Ora esiste una classe Stack che fornisce funzionalità come push (), pop (), peek () o top () e per implementare questi metodi estende i metodi della classe LinkedList. È una violazione del principio di sostituzione di Liskov?
Ad esempio, considerare il caso add_after () per aggiungere un nodo all'ennesima posizione di un Elenco collegato. Questo può essere fatto nella classe base ma non nella classe Stack. Le postcondizioni vengono indebolite qui o modifichi il metodo add_after () per aggiungere in cima allo Stack?
Inoltre, se non una violazione, questo cattivo design è? E come implementeresti la funzionalità Stack usando la classe LinkedList?
LinkedList
? Potresti voler dare ascolto al consiglio di un certo Joshua Bloch (che ha avuto un ruolo importante nella progettazione del framework delle raccolte Java) quando ha detto "Preferisci la composizione rispetto all'eredità" - Forse hai una LinkedList
classe interna alla tua pila, ma non la estendi?
LinkedList
che svolge il lavoro pesante dietro le quinte (composizione). In questo modo gli utenti del tuo codice non possono usare accidentalmente uno Stack dove avevano bisogno di un Elenco o viceversa.