È buona norma mettere i metodi astratti in una classe astratta anche se i metodi sono già definiti nella sua interfaccia?

4

Diciamo che abbiamo un'interfaccia Foo con un metodo "public void someMethod ()", e abbiamo una o più classi astratte che "implementano" Foo ma non necessariamente forniscono un'implementazione per someMethod ().

Sarebbe un buon design mettere per esempio "public abstract void someMethod ()" in queste classi astratte, o sarebbe solo uno sforzo maggiore senza una buona ragione?

P.S. Il mio linguaggio di programmazione in questione è Java, nel caso in cui questo influenzi la risposta.

    
posta dammkewl 05.01.2015 - 13:54
fonte

2 risposte

6

No. Questo è solo un codice duplicato che non fornisce vantaggi, a meno che tu stia specializzando l'interfaccia per quella classe base astratta.

Si potrebbe sostenere che avendo il metodo esplicitamente dichiarato aiuta le cose a essere più leggibili, ma direi che dovrebbe essere chiaro dalla dichiarazione dell'interfaccia cosa sta succedendo. Se non lo è, la tua interfaccia necessita di un nome migliore e / o la tua classe base astratta sta facendo troppe cose.

Se tutto quello che stai facendo è un codice duplicato, fai più lavoro in anticipo, più lavoro quando cambia e rendi più probabile che la classe astratta non sia sincronizzata con l'interfaccia, portando a due distinti molto simili metodi.

    
risposta data 05.01.2015 - 14:48
fonte
2

Ci sono casi in cui potrebbe essere appropriato.

Considera una classe base astratta che contiene un'implementazione predefinita di InitializeSomeMethod() e quel metodo chiama someMethod() ma non esiste un'implementazione predefinita per someMethod . La classe base può definire someMethod come abstract e quindi consentirgli di essere chiamata da InitializeSomeMethod() .

Tuttavia, se si accede all'oggetto tramite le sue interfacce e non la classe base, e la classe base non ha bisogno di accedere a quei metodi o proprietà, non è necessario definirli come astratti.

    
risposta data 05.01.2015 - 20:42
fonte

Leggi altre domande sui tag