Клас LinkedList існує з такими функціями, як add_first (), add_last (), add_after (), remove_first (), remove_last () та remove ()
Тепер існує клас Stack, який забезпечує такі функції, як push (), pop (), peek () або top (), і для реалізації цих методів він розширює методи класу LinkedList. Це порушення Принципу заміни Ліскова?
Наприклад, розглянемо випадок add_after (), щоб додати вузол на n-му місці пов'язаного списку. Це можна зробити в базовому класі, але не в класі Stack. Чи ослаблені постумови тут чи ви модифікуєте метод add_after (), щоб додати його до вершини стека?
Крім того, якщо це не порушення, це погана конструкція? І як би ви реалізували функцію Stack за допомогою класу LinkedList?
LinkedList
? Можливо, ви захочете прислухатися до порад певного Джошуа Блоха (який відіграв головну роль у розробці рамки колекцій Java), коли він сказав: "Віддавайте перевагу композиції над спадщиною" - Можливо, ви маєте LinkedList
всередині свого класу стека, але насправді не розширюєте його?
LinkedList
який робить важкий підйом за кадром (композиція). Таким чином, користувачі вашого коду не можуть випадково використовувати стек там, де їм потрібен Список, або навпаки.