Istnieje klasa LinkedList z funkcjami takimi jak add_first (), add_last (), add_after (), remove_first (), remove_last () i remove ()
Teraz istnieje stos klas, który zapewnia funkcje takie jak push (), pop (), peek () lub top (), a do implementacji tych metod rozszerza metody klasy LinkedList. Czy jest to naruszenie zasady substytucji Liskowa?
Na przykład rozważmy przypadek add_after (), aby dodać węzeł w n-tej pozycji listy połączonej. Można to zrobić w klasie podstawowej, ale nie w klasie Stack. Czy warunki są osłabiane tutaj, czy modyfikujesz metodę add_after (), aby dodać ją na górę stosu?
Ponadto, jeśli nie jest to naruszenie, czy ten zły projekt? A jak zaimplementowałbyś funkcjonalność stosu za pomocą klasy LinkedList?
LinkedList
? Być może zechcesz posłuchać rady pewnego Joshua Blocha (który odegrał znaczącą rolę w projektowaniu frameworku kolekcji Java), gdy powiedział: „Wolę kompozycję niż dziedziczenie” - Może masz LinkedList
wewnątrz swojej klasy stosu, ale tak naprawdę go nie rozszerzasz?
LinkedList
który wykonuje ciężkie podnoszenie się za kulisy (kompozycja). W ten sposób użytkownicy Twojego kodu nie mogą przypadkowo użyć stosu, w którym potrzebowali listy lub odwrotnie.