Implementazione di un'interfaccia già implementata da una classe genitore?

2

Se una classe estende un genitore che definisce un'interfaccia, tale classe dovrebbe anche implementare esplicitamente l'interfaccia?

Ad esempio, è meglio includere o rimuovere la parte tra parentesi quadre sotto:

interface IVerbable {}

abstract class BaseVerber implements IVerbable {}

class Verber extends BaseVerber [implements IVerbable] {}

Dal punto di vista funzionale, non vi è alcuna differenza nell'implementazione forzata, poiché Verber "è-un" IVerbable in virtù della sua parentela, anche se non implementa esplicitamente l'interfaccia stessa:

var_dump(new Verber() instanceof IVerbable); // bool(true)

Non funzionalmente, sembrano esserci due vantaggi all'implementazione in entrambi i posti:

  • Una persona che legge il codice sa immediatamente che implementa l'interfaccia, senza dover visualizzare la definizione del genitore.
  • In secondo luogo, PhpDocumentor non segue la traccia se la classe astratta non fornisce un'implementazione predefinita dell'interfaccia. L'implementazione concreta non erediterebbe la documentazione a meno che non implementasse esplicitamente l'interfaccia, o l'abstract fornisse un'implementazione, anche una vuota.

Suppongo che potrebbe essere una cattiva pratica omettere i metodi implementati dalla classe astratta. Probabilmente è meglio mostrare almeno la firma vuota, ma poi stai anche duplicando la firma vuota sia nell'interfaccia che nella classe astratta.

    
posta AgentConundrum 28.01.2015 - 06:39
fonte

1 risposta

1

Secondo me non dovresti aggiungere il secondo implements IVerbable . Ecco perché:

  • Non cambia il significato del codice.
  • È perfettamente naturale navigare tra le classi quando cerchi di capire il codice di qualcun altro. Dovrai farlo comunque
  • È la caratteristica della classe base che implementa l'interfaccia, ciò che la classe derivata eredita come ogni altra cosa. Non ho senso ripetere, poiché non ha senso ripetere qualsiasi altra caratteristica dalla classe base.
  • Non ho dimestichezza con PhpDocumentor, ma non mi sembra una buona idea cambiare il tuo codice solo così uno strumento può capirlo meglio. (Se uno strumento non riesce a capire il tuo codice perché non hai seguito alcuna convenzione generalmente accettata e consigliabile, è un caso diverso.)
risposta data 28.01.2015 - 08:10
fonte

Leggi altre domande sui tag