Existe uma classe LinkedList com funções como add_first (), add_last (), add_after (), remove_first (), remove_last () e remove ()
Agora há uma classe Stack que fornece funcionalidades como push (), pop (), peek () ou top (), e para implementar esses métodos, ela estende os métodos da classe LinkedList. Isso é uma violação do princípio de substituição de Liskov?
Por exemplo, considere o caso add_after () para adicionar um nó na enésima posição de uma Lista vinculada. Isso pode ser feito na classe base, mas não na classe Stack. As pós-condições estão sendo enfraquecidas aqui ou você modifica o método add_after () para adicionar ao topo da pilha?
Além disso, se não for uma violação, esse design é ruim? E como você implementaria a funcionalidade Stack usando a classe LinkedList?
LinkedList
? Você pode querer seguir o conselho de um certo Joshua Bloch (que desempenhou um papel importante no design da estrutura de coleções Java) quando ele disse "Preferir composição sobre herança" - Talvez você tenha uma LinkedList
classe dentro de sua pilha, mas na verdade não a estende?
LinkedList
que faz o trabalho pesado nos bastidores (composição). Dessa forma, os usuários do seu código não podem usar acidentalmente uma pilha onde precisavam de uma lista ou vice-versa.