Questo è un classico esempio di come le persone decidono di violare il principio di sottotitolazione di Liskov. Lo scoraggio fortemente, ma incoraggio forse una soluzione diversa:
- Forse la classe che stai scrivendo non fornisce la funzionalità che l'interfaccia prescrive se non ha l'uso di tutti i membri dell'interfaccia.
- In alternativa, quell'interfaccia potrebbe fare più cose e potrebbe essere separata secondo il Principio di segregazione dell'interfaccia.
Se il primo è il tuo caso, non implementare l'interfaccia su quella classe. Pensalo come una presa elettrica in cui il foro di terra non è necessario, quindi non si attacca realmente a terra. Non collegare nulla con la terra e nessun grosso problema! Ma non appena usi qualcosa che ha bisogno di un terreno, potresti avere un fallimento spettacolare. Meglio non fare un buco nel terreno falso. Quindi se la tua classe in realtà non fa ciò che l'interfaccia intende, non implementare l'interfaccia.
Ecco alcuni suggerimenti da Wikipedia:
Il principio di sostituzione di Liskov può essere semplicemente formulato come "Non rafforzare le pre-condizioni e non indebolire le post-condizioni".
Più formalmente, il principio di sostituzione di Liskov (LSP) è una definizione particolare di una sottotipizzazione, chiamata sottotipizzazione comportamentale (forte), che è stata inizialmente introdotta da Barbara Liskov in un discorso programmatico della conferenza del 1987 intitolato Astrazione e gerarchia dei dati. È una relazione semantica piuttosto che semplicemente sintattica perché intende garantire l'interoperabilità semantica dei tipi in una gerarchia , [...]
Per l'interoperabilità e la sostituibilità semantiche tra diverse implementazioni degli stessi contratti, sono necessarie tutte per impegnarsi negli stessi comportamenti.
Il principio di segregazione delle interfacce parla dell'idea che le interfacce dovrebbero essere separate in set coerenti in modo tale da non richiedere un'interfaccia che faccia molte cose disparate quando si desidera una sola struttura. Pensa di nuovo all'interfaccia di una presa elettrica, potrebbe avere anche un termostato, ma renderebbe più difficile l'installazione di una presa elettrica e potrebbe rendere più difficile l'utilizzo per scopi non di riscaldamento. Come una presa elettrica con termostato, le interfacce di grandi dimensioni sono difficili da implementare e difficili da usare.
Il principio di segregazione dell'interfaccia (ISP) afferma che nessun client dovrebbe essere costretto a dipendere da metodi che non utilizza. [1] L'ISP suddivide le interfacce che sono molto grandi in più piccole e più specifiche in modo che i clienti debbano solo conoscere i metodi che li interessano.