Posso dire che l'interfaccia è un insieme di comportamenti generali? [duplicare]

-2

Sono nuovo di OOP. Posso dire che Interface è un insieme di comportamenti generali che possono essere presenti e agire in modo univoco da un insieme di oggetti che hanno in comune? E la classe astratta ha una somiglianza con l'interfaccia ma ha un metodo predefinito che può anche essere posseduto ed eseguito da un insieme di oggetti? Grazie

    
posta Hendy 01.03.2017 - 16:18
fonte

3 risposte

0

No. Di solito diresti:

  • Un'interfaccia è un contratto

  • Una classe astratta è una classe che non puoi avere un'istanza di

risposta data 01.03.2017 - 17:21
fonte
0

No, un'interfaccia in un senso strict non ha alcun comportamento.

Definisce regole formali di interazione.

Per essere più concreti, definisce i tipi di input (argomenti) e output (restituisce) dei metodi ma non fa alcuna affermazione su come i valori di output dipendono dal input e quali effetti collaterali potrebbe avere una chiamata al metodo.

Mi piace aggiungere thet in Java 8, hai la possibilità di aggiungere il comportamento nelle interfacce definendo i metodi predefiniti, ecco perché ho scritto "in senso anti-spartito" all'inizio.

    
risposta data 01.03.2017 - 17:52
fonte
0

"Comportamento generale" non è ciò di cui tratta un'interfaccia.

Comprendi che l'interfaccia può significare due cose diverse in OOP.

L'interfaccia intrinseca di un oggetto è in realtà solo un insieme di messaggi che puoi inviare chiamando i suoi metodi. Non c'è un comportamento definito qui.

Esiste anche il tipo di interfaccia esplicita che alcune lingue hanno. Questo compete con le classi astratte ma ha un insieme leggermente diverso di regole a seconda della lingua.

Con i tipi astratti puoi definire un comportamento che può essere ignorato e che puoi pensare come "comportamento generale". Puoi fare lo stesso trucco in alcune versioni di alcune lingue con un tipo che, sfortunatamente, hanno deciso di chiamare "interfaccia".

Queste interfacce esplicite sono state fornite solo di recente. Lo hanno aggiunto perché volevano non rompere il codice legacy quando espandevano le interfacce pubblicate. Ciò consente loro di fornire quello che preferisco chiamare "comportamento predefinito". È dubbio che avrebbero chiamato questo tipo di "interfaccia" se sapessero che alla fine avrebbe permesso questo.

Quindi no, il comportamento "generale" è molto più una cosa astratta di classe. Ora con la composizione, è una cosa comportamentale "predefinita". Dall'esterno sembra che sia la stessa cosa.

    
risposta data 01.03.2017 - 18:55
fonte