|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Interfaccia in java
da wikipedia
Nella programmazione, in particolare in quella orientata agli oggetti, l'interfaccia di una classe è formata dall'insieme dei dati e dei metodi visibili all'esterno di un oggetto. http://it.wikipedia.org/wiki/Interfaccia e poi Il termine interfaccia viene spesso utilizzato nelle discipline tecniche con il significato di dispositivo fisico o virtuale che permette la comunicazione fra due o più entità di tipo diverso; http://it.wikipedia.org/wiki/Interfa...informatica%29 non ci vedo molti punti in comune, sembra quasi un termine abusato(quasi). Mi chiedevo se in java, dato che è un pò che non lo uso, se è il modo escogitato per poter usare metodi di altre classi all'interno di una propria classe e cioè: nella mia classe specifico che voglio implementare una particolare classe Implements, poi dichiaro i metodi astratti(solo lo scheletro=le definizioni dei metodi) e questi diventano disponibili nella mia classe!
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Solo con le interfacce puoi fare "implements",
con le altre solo "extends"... Oppure non capisco cosa vuoi dire.
__________________
|Java Base| |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Usare nel senso di invocare? Crei un oggetto della mia classe
e ci invochi i metodi (non statici). Riutilizzare l'implementazione? Estendi la classe.
__________________
|Java Base| |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
In un linguaggio OO si parla di interfaccia anche in un altro senso, intendendo una struttura logica atta a descrivere le caratteristiche comuni (e pubbliche) di una o piu' classi (le quali, appunto, implementano tale interfaccia). Ma anche qui il significato e' lo stesso: descrivere come un'entita' terza possa dialogare con gli oggetti che implementano una data interfaccia... in questo senso l'interfaccia e' come un patto stipulato tra le parti, in cui chi implementa l'interfaccia garantisce di esporre alcuni metodi e dati specificati nel contratto stesso. Come vedi in tutti i casi si tratta di descrivere un modello di comunicazione. In java, poi, esiste anche la classe astratta che e' una via di mezzo tra una classe e un'interfaccia. Mentre nell'interfaccia si danno solo metodi (pubblici), nella classe astratta possono esistere campi e metodi aventi qualsiasi tipo di accessibilita', ma in particolare ci saranno dei metodi astratti di cui e' data solo la dichiarazione, ma non l'implementazione, che e' demandata alle classi derivate. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
Sara' compito del programmatore fare in modo che il metodo lavori correttamente , ma a te, semplice utente del metodo, questo non interessa Ancora, supponi di avere l'interafccia Studente con le due classi che la implementano: StudenteInCorso e StudenteLaureato. Supponi di dover dire a ogni tipo di studente di FareUnLavoro. E supponi che entrambi i tipi di studenti debbano svolgere i compiti A,B, ma che solo gli studenti laureati debbano fare anche il compito C... allora tu dirai soltanto a ogni studente di FareUnLavoro, sara' poi compito di ogni studente sapere che tipo di studente e' e svolgere il compito in modo corretto... lo studente laureato avra' il metodo FareUnLavoro implementato in modo da svolgere i compiti A,B,C, mentre lo studente in corso implementera' tale metodo per svolgere solo A,B... ma a te tale implementazione non interessa, ti interessa soltanto dire agli studenti di svolgere il rispettivo compito. allora tramite l'interfaccia tu te ne freghi del tipo effettivo di studente e gli dici soltanto di svolgere il compito, perche' tanto sai che per contratto (l'interfaccia) ogni studente ha un metodo chiamato FareUnLavoro... tu non ti devi preoccupare ne' del tipo di studente, ne' dell'implementazione del metodo... Senza interfaccia avresti dovuto porti il problema di gestire oggetti di tipo diverso. Ultima modifica di mad_hhatter : 23-03-2007 alle 10:36. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
ma se volessi usare un metodo della tua classe su un oggetto della mia classe senza dover istanziare un oggetto della tua classe ? Magari un metodo di riordinamento presente nella tua classe. Magari non è fattibile
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
piano, il protocollo di comunicazione tra oggetti e' che un oggetto puo' instanziarne un altro e dirgli di invocare un metodo, ma l'implementazione a te resta sconosciuta e inaccessibile. non puoi accedere al codice, devi creare un oggetto e usarlo. e basta
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
si... il concetto chiave e' quello di rendere pubbliche le caratteristiche COMUNI nascondendo le differenze. serve a mascherare le differenze facendo apparire cose diverse come appartenenti a un TIPO unico e piu' astratto (come nel caso dello studente: ti interessa la parola studente, mentre vuoi ignorare di che tipo di studente stiamo parlando)
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
puoi usare un metodo di una classe senza istanziare oggetti di quel tipo solo se il metodo e' statico! ma comunque puoi solo usarlo cosi' com'e', non puoi prenderne il codice che lo implementa e modificarlo a tuo piacimento
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Quote:
dei tuoi oggetti e lo riordini con il metodo statico Arrays.sort.
__________________
|Java Base| |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
un oggetto e' una scatola nera di cui non conosci nulla se non l'interfaccia che espone, cioe' i metodi e i dati pubblici (cioe' visibili, appunto) l'interfaccia e' quel qualcosa che ti permette di usare quella scatola nera (in questo senso e' leggermente diverso dal tuo concetto di interfaccia). tieni presente che usare nel caso di oggetti significa un qualcosa di monodirezionale: io prendo un oggetto e so come usarlo: so cosa puo' fare e che cosa mi produce, ma non si tratta di traduzione o di comunicazione bidirezionale.. in questo senso i concetti sono diversi |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
Creo un certo numero di classi anche differenti tra loro ma in tutte implemento(Implements) la medesima interfaccia esempio: Comparable e grazie a questa posso riordinare oggetti anche diversi tra loro che però, credo debbano possedere almeno una propietà in comune, adesempio il peso. Non potrei riordinare pere con mele credo (colore dei capelli, peso di un automobile). Ma l'implementazione di riordino non la devo implementare io, giusto ?
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
certo, nel caso del Comparable tutti gli oggetti devono avere un qualcosa che permetta di confrontarli... in effetti, come esempio forse non è il migliore... molto meglio quello degli studenti. Il succo è che l'interfaccia ti mette in grado di lavorare con tipi di oggetti diversi permettendoti di vederli in modo coerente, introducendo un tipo di dato più astratto che accomuna tutti gli oggetti. in questo senso l'architettura e la semantica degli oggetti deve essere tale da permettere questo tipo di lavoro (come hai detto tu, i comparable devo avere un dato comune che possa essere usato per fare la comparazione... ma questo è un esempio specifico; nell'esempio degli studenti a te serviva solo un metodo comune, nient'altro. per il resto i due tipi di studenti potevano essere due cose molto diverse tra loro!) L'interfaccia così come la classe astratta servono a introdurre un livello di astrazione e di aggregazione tale da mascherare le peculiartà (a cui non sei interessato come UTENTE di tali oggetti) e a evidenziare, rendendo esplcite, le caratteristiche comuni a tutti i diversi tipi di oggetto (caratteristiche a cui sei interessato!!!). Per quanto riguarda l'implementazione... se tu hai un metodo Ordina() che accetta come parametro una collezione di Comparable e tu vuoi usarlo semplicemente, non ti interessa l'implementazione. Sai solo che serve a ordinare oggetti che devono avere determinate caratteristiche e, finché ce le hanno, puoi ordinare tutti i tipi di oggetto che vuoi. Se però sei interessato a CREARE un nuovo tipo di oggetto che sia comparabile con altri già esistenti (secondo la relazione d'ordine definita dall'interfaccia Comparable), allora dovrai appunto creare un metodo "compareTo" (ad esempio) che è quel famoso metodo richiesto dall'interfaccia e implementarlo (stavolta si) in modo tale da svolgere il compito che ti sei prefisso. Come vedi, il ruolo di un'interfaccia cambia a seconda del fatto che tu voglia soltanto usarla oppure che tu voglia ampliare l'insieme dei tipi particolari che fanno parte del concetto piu astratto il cui nome è il nome dell'interfaccia (in questo caso: l'insieme degli oggetti Comparabili) |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
l'interfaccia, infatti, è lo strumento, o uno degli strumenti, attraverso cui si esplica il concetto, importantissimo nella programmazione OO, di POLIMORFISMO.
Se hai già esperienza di questo termine spero di averti chiarito di più le cose. Nel caso fosse una parola nuova, semplicemente fai finta che non te l'abbia mai nominata |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
mi ricordo che era un qualcosa legato ai metodi con stesso nome ma comportamento leggermente diverso
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:01.











|







