Một lớp LinkedList tồn tại với các hàm như add_first (), add_last (), add_after (), remove_first (), remove_last () và remove ()
Bây giờ có một lớp Stack cung cấp các chức năng như push (), pop (), peek () hoặc top () và để thực hiện các phương thức này, nó mở rộng các phương thức lớp LinkedList. Đây có phải là vi phạm Nguyên tắc thay thế Liskov không?
Ví dụ, hãy xem xét trường hợp add_after () để thêm một nút ở vị trí thứ n của Danh sách được liên kết. Điều này có thể được thực hiện trong lớp cơ sở nhưng không phải trong lớp Stack. Các postconditions đang bị suy yếu ở đây hay bạn sửa đổi phương thức add_after () để thêm vào đầu Stack?
Ngoài ra, nếu không vi phạm, đây có phải là thiết kế xấu? Và bạn sẽ triển khai chức năng Stack bằng cách sử dụng lớp LinkedList như thế nào?
LinkedList
không? Bạn có thể muốn nghe theo lời khuyên của Joshua Bloch (người đóng vai trò chính trong việc thiết kế khung bộ sưu tập Java) khi anh ta nói "Thích sáng tác hơn thừa kế" - Có thể có một LinkedList
lớp trong ngăn xếp của bạn, nhưng không thực sự mở rộng nó?
LinkedList
nặng trong hậu trường (bố cục). Bằng cách đó, người dùng mã của bạn không thể vô tình sử dụng Stack khi họ cần Danh sách hoặc ngược lại.