Une classe LinkedList existe avec des fonctions telles que add_first (), add_last (), add_after (), remove_first (), remove_last () et remove ()
Il existe maintenant une classe Stack qui fournit des fonctionnalités telles que push (), pop (), peek () ou top (), et pour implémenter ces méthodes, elle étend les méthodes de la classe LinkedList. Est-ce une violation du principe de substitution de Liskov?
Par exemple, considérons le cas add_after () pour ajouter un nœud à la nième position d'une liste liée. Cela peut être fait dans la classe de base mais pas dans la classe Stack. Les postconditions sont-elles affaiblies ici ou modifiez-vous la méthode add_after () pour l'ajouter en haut de la pile?
En outre, si ce n'est pas une violation, est-ce une mauvaise conception? Et comment implémenteriez-vous la fonctionnalité Stack à l'aide de la classe LinkedList?
LinkedList
? Vous voudrez peut-être suivre les conseils d'un certain Joshua Bloch (qui a joué un rôle majeur dans la conception du cadre des collections Java) quand il a dit "Préférez la composition à l'héritage" - Peut-être avez-vous une LinkedList
classe dans votre pile, mais ne l'étendez pas réellement?
LinkedList
qui fait le gros du travail dans les coulisses (composition). De cette façon, les utilisateurs de votre code ne peuvent pas utiliser accidentellement une pile là où ils avaient besoin d'une liste ou vice versa.