Le implementazioni dell'interfaccia Node nell'API Web violano il principio di sostituzione di Liskov?

2

L'articolo MDN sull'interfaccia del nodo afferma che

interfaces [that inherit from Node interface] may return null in particular cases where the methods and properties are not relevant. They may throw an exception - for example when adding children to a node type for which no children can exist.

Per me sembra un rafforzamento delle precondizioni in un sottotipo - una violazione di LSP.

Queste implementazioni violano in realtà LSP o la mia comprensione è errata?

    
posta sbichenko 30.11.2014 - 20:47
fonte

2 risposte

3

Tecnicamente: no, questa non è una violazione dell'LSP: il tipo Node ci dà alcune garanzie qui: Qualsiasi metodo può funzionare come sotto riportato o restituire null o lanciare un'eccezione. Qualsiasi sottotipo di Node deve ancora vivere con questo contratto.

In pratica: sì, questo è un design discutibile. L'interfaccia DOM sembra utilizzare una variante del Pattern composito e il design mostra la sua età. Oggi, non è considerata una best practice avere "metodi opzionali" che non devono essere forniti da un sottotipo. Tuttavia, questo mantiene il numero di tipi più gestibili, e nelle lingue tipizzate staticamente rimuove la necessità di casting frequenti - nota che il DOM non è solo usato in JavaScript.

    
risposta data 30.11.2014 - 21:47
fonte
0

La documentazione afferma chiaramente che le interfacce che restituiscono null o generano un'eccezione si comportano come previsto.

Pertanto tali interfacce non interrompono l'LSP, poiché si comportano come previsto. Se la documentazione dicesse che "le interfacce non restituiscono mai null", un'interfaccia che restituisce null viola l'LSP. Poiché la documentazione dice esattamente l'opposto, restituire null va bene.

Penso che sia necessario abituarsi al fatto che l'LSP è destinato a fornire agli sviluppatori qualcosa di utile . desideriamo un comportamento diverso durante l'esecuzione dei contratti. Ho l'impressione che tu andassi in un negozio di bricolage e ti lamentassi di avere colori diversi, perché le vernici in diversi colori violano l'LSP. No, non lo fanno. Mi lamento con il progettista dell'interfaccia utente che sostituendo un pulsante verde con un pulsante blu viola l'LSP? No, non lo so. Hanno un aspetto diverso, ma possono essere sostituiti l'uno con l'altro. Se l'LSP non lo permettesse, francamente nessuno saprebbe cosa significano le lettere e non ci sarebbe alcuna voce su Wikipedia, perché sarebbe inutile.

    
risposta data 14.04.2016 - 17:10
fonte