Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] A che mi servono le interfacce?
Forum - C# / VB.NET - [C#] A che mi servono le interfacce?

Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 318
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 20:09
Mercoledì, 03/07/2013
Come da oggetto: che me ne faccio delle innterfacce? Qual é la loro vera utilità?


Assembly is the way
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 20:19
Mercoledì, 03/07/2013


PM Quote
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 21:20
Venerdì, 05/07/2013
Le interfacce servono principalmente per slegare l'entità dall'implementazione, ossia accedere ai membri definiti nell'interfaccia senza sapere che tipo di classe si sta utilizzando.
Tra i vari vantaggi, questo permette di avere molto flessibilità nel refactoring. Permette infatti di cambiare facilmente l'implementazione senza dover andare a cambiare tutti i 1000 pezzi di codice dove è scritto il nome della classe. (vedi Dependency Injection)

Es.
interfaccia              IDataService
implementazioni     XMLDataService, JSONDataService, DBFDataService, ecc....

l'intefaccia mettiamo che abbia due metodi LoadData() e StoreData()

sempre che in tutte le implementazioni il valore di ritorno sia IEnumerable<Person>

è possibile lavorare sempre sull'interfaccia, e fregarsene di che database c'è sotto, cosa di cui si occuperà solo chi fornisce l'implementazione giusta all'inizio

senza usare l'interfaccia ci sarebbe bisogno in ogni momento in cui ci fosse bisogno di accedere ai dati, verificare di che tipo di dati si tratta, e scegliere l'implementazione, oltre al fatto che se volessi un giorno cambiare da XML a JSON, dovrei cambiare 10-20-30 volte tutti i punti in cui c'è il nome specifico dell'implementazione, mentre con l'interfaccia solo una volta

se non sono stato chiaro mi scuso ma sono di fretta, domanda pure


«La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.»

Isaac Asimov
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 318
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 21:43
Lunedì, 08/07/2013
Dedalux apprezzo la professionalità ma non ci ho capito un tubo (ho 15 anni e sono appena entrato nell'informatica). Comunque grazie alla guida di Visual Basic del sito indicatami da GN ho capito la loro utilità. Anche se mi chiedo ancora: ma se deve starci scritto solo il nome dei campi e dei metodi, che senso ha se dopo vado a fare l'implementazione in una classe?

Ultima modifica effettuata da tuttodiMC il 08/07/2013 alle 21:44


Assembly is the way
PM Quote
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 20:12
Mercoledì, 10/07/2013
L'implementazione la fai proprio sulla base dell'interfaccia.
L'interfaccia dice: la classe che mi implementa deve avere questi membri, con questi nomi, e di questi tipi. Delle loro azioni non sono responsabile io.

Ho provato a rispondere, ma sinceramente non ho capito il tuo dubbio.
Ti domandi che senso abbia l'esistenza dell'interfaccia o che altro?
Se riesci a porre la domanda in modo più esteso provo a risponderti meglio. :k:

Ultima modifica effettuata da Dedalux il 10/07/2013 alle 20:12


«La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.»

Isaac Asimov
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 23:18
Mercoledì, 10/07/2013
Vediamo se questo caso particolare ti chiarifica.

Le interfacce sono chiamate, specialmente in alcuni contesti, anche contratto. Questo perchè di fatto è come definire un accordo tra due parti:

- un oggetto che consuma una o più funzionalità definite da un altro (chiama il metodo)
- un oggetto che offre una o più funzionalità (implementa il metodo)

Quindi se poniamo che lo sviluppo dei due oggetti è assegnato a te il primo a me il secondo, e lo sviluppo sarà in parallelo, io e te dovremo poter lavorare accordandoci su qualche cosa. E questa coa è proprio l'interfaccia da utilizzare.

Il tuo codice customer farà riferimento sempre e solo ad una ipotetica IOperationsBlaBla e sarà quindi completamente agnostico da cosa ci sarà dentro il metodo.

Per intenderci:

Codice sorgente - presumibilmente C# / VB.NET

  1. public void DoSomething(IOperationsBlaBla operations)
  2. {
  3. ...
  4.     operations.Method1();
  5. ...
  6. }



Io farò una  classe che la implementerà, quindi darà dei comportamenti:

Codice sorgente - presumibilmente C++

  1. public class NetarrowOperations : IOperationsBlaBla
  2. {
  3. ...
  4. public void Method1() {
  5.   ... // implementazione qui
  6. }
  7. ...
  8. }



A questo punto il tuo codice lavorando su una IOperationsBlaBla potrà accettare la mia classe e lavorare con essa, ma al tempo stesso esserne slegato.

Se infatti un domani tu farai la tua versione della classe implementando la stessa interfaccia la passerai al posto della mia e il tuo vecchio codice non richiederà modifiche.



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 318
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 13:24
Venerdì, 12/07/2013
netarrow mi stai quindi dicendo che l'interfaccia viene utilizzata nello sviluppo in team più che in quello da singolo programmatore?



Assembly is the way
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 14:45
Venerdì, 12/07/2013
No, devono essere utilizzate il più possibile in generale per mantenere il codice loose coupled, estendibile, riutilizzabile manutenibile e testabile. Un caso specifico e concreto di esempio è quello che ti ho fatto io ma il messaggio non voleva essere che in team le usi di più

Lo scopo è produrre un codice che segua i principi SOLID se vuoi approfondire: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

Ultima modifica effettuata da netarrow il 12/07/2013 alle 14:45



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote