Es gibt eine Klasse LinkedList mit Funktionen wie add_first (), add_last (), add_after (), remove_first (), remove_last () und remove ().
Jetzt gibt es einen Klassenstapel, der Funktionen wie push (), pop (), peek () oder top () bereitstellt. Um diese Methoden zu implementieren, werden die LinkedList-Klassenmethoden erweitert. Handelt es sich um eine Verletzung des Liskov-Substitutionsprinzips?
Betrachten Sie beispielsweise den Fall add_after (), um einen Knoten an der n-ten Position einer verknüpften Liste hinzuzufügen. Dies kann in der Basisklasse erfolgen, jedoch nicht in der Stack-Klasse. Werden hier Nachbedingungen abgeschwächt oder ändern Sie die Methode add_after (), um sie an die Spitze des Stapels zu setzen?
Auch wenn nicht eine Verletzung, ist das schlechtes Design? Und wie würden Sie die Stack-Funktionalität mithilfe der LinkedList-Klasse implementieren?
LinkedList
? Vielleicht möchten Sie den Rat eines bestimmten Joshua Bloch (der eine wichtige Rolle beim Entwerfen des Java-Kollektions-Frameworks spielte) befolgen, als er sagte: "Komposition vor Vererbung" - Haben LinkedList
Sie vielleicht eine in Ihrer Stapelklasse, aber erweitern Sie sie nicht wirklich?
LinkedList
, das die Arbeit hinter den Kulissen erledigt (Komposition). Auf diese Weise können Benutzer Ihres Codes nicht versehentlich einen Stapel verwenden, für den sie eine Liste benötigten, oder umgekehrt.