Newsgroup: it.comp.java
Titolo: Aaargh. Voglio morire!

Ho letto Java 2 i fondamenti.
Ho letto Data structures and Problem solving using Java.
Ho letto The Java Language specifications
(
http://java.sun.com/docs/books/jls/html/index.html
).
Ho seguito (cioè non ho dormito come durante analisi) il corso di
informatica I della facoltà di ingegneria delle telecomunicazioni di Padova.
Ma non ho ancora capito a che servono le classi astratte e le interfacce.
Se qualcuno volesse chiarirmelo, così, come se fossi un bambino di 4 anni (a
questo punto, credo di avere il suo stesso QI), gli sarei eternamente grato.
Se poi volete semplicemente inviarmi beffe ed insulti, accomodatevi pure, me
li merito tutti.
Fabio

Dunque premetto d essere alle prime armi pure io.
Per me le cose stanno così.
-Interfacce:
    Servono principalmente a favorire un codice uniforme in situazioni
simili. Infatti quando tu dichiari che una classe implementa una interfaccia
affermi che questa classe si uniforma ai metodi previsti dall'interfaccia,
che dunque devono essere tutti implementati.
La cosa è forse più chiara con un esempio, supponi di avere diverse classi
rappresentanti diversi apparecchi di comunicazione (telefono,
internet,baracchino....)  tutte implementano la stessa interfaccia
(chiamiamola 'comunicazione') contenente i metodi invia e ricevi.
Se ora tu volessi scrivere un programma che sfrutti un oggetto di una di
queste classi sapresti che per ricevere dati devi usare oggetto.ricevi(),
indipendentemente dal tipo di oggetto.
Se invece le classi non garantissero l'aderenza all'interfaccia per ricevere
dal baracchino potrebbe esserci la funzione demodula(), da internet
scarica() e così via.
Dunque le interfacce permettono di rendere più uniforme il codice, aderire
ad esse significa semplificarsi la vita e rendere più facilmente
riutilizzabile quanto scritto sia per se stessi che per gli altri.
-Classi Astratte
    Letteralmente sono classi che hanno metodi astratti (e che quindi non
possono essere istanziate). Il principio è lo stesso delle interfacce ma su
un altro livello (ereditarietà verticale anziche ridefinizione orizzontale).
Supponi di voler creare delle classi relative a vari animali. Defininendo
una superclasse  astratta Animale puoi definire metodi e variabili che
saranno comunemente utili a tutte la varie classi che estendono Animale (ad
esempio una variabile età va bene sia per i tafani che per i gibboni)
.inoltre tramite le funzioni astratte obblighi le classi figlie ad
implementare dei metodi specifici irrinunciabili (in questo la similitudine
con le interfacce). Se ad esempio nella superclasse definisci un metodo
astratto deambula, ogni classe derivata dovrà pecificare al suo interno il
funzionamento del metodo (tutti gli animali possono muoversi ma lo fanno in
maniera differente).
In definitiva definisci o aderisci ad una interfaccia quando vuoi uniformare
il codice, ricorri a classi astratte quando in una gerarchia di classi vuoi
che chi eredita ridefinisca obbligatoriamente dei metodi.
Spero di averti aiutato, ciao.    trini alla frutta

Anche se sto iniziando ora a studiare Java, (ho il libro aperto) e questa
risposta non sarà proprio il TOP,
 intanto e meglio di gnente!
-le interfaccie definiscono quali metodi saranno utilizzati dalle classi che
le implementeranno
ma non danno l'implementazione di tali metodi. Saprai che una classe che
implementa
l'interfaccia dovrà fare delle cose ma Come le dovra fare sarà definito
nella classe stessa.
-le classi astratte differiscono dalle interfacce xchè puoi definire
l'implementazione di alcuni
metodi che useranno le classi che implementeranno la tua classe astratta.
Ora, se vuoi sapere precisamente A CHE SERVONO, potrei dirti di pensare ad
oggetti,
non servono a nulla di immediato ma credo che ti aiutino a strutturare le
altre classi in maniera più
intelligente.
Anche se non ti ho convinto o sono stato vago credo di non aver detto
idiozie, nel caso
cerco smentite!.
P.S.:non credo che sia il caso di voler morire per delle cose del genere!!
Comunque nella vita c'è sempre qualcosa di bello!!
Ciao

...


...


Mille grazie davvero. Non che ora mi senta meno stupido, ma almeno ho capito
(almeno credo) di cosa si sta parlando.
Non riesco perņ a levarmi il sospetto che classi astratte ed interfacce si
pongano ai limiti dell’inutilitą. Bha, l’esperienza forse mi farą cambiare idea.
Grazie ancora. Fabio

No, con Carlo Ferrari.
... come non detto... non lo conosco...
Micio

>Bha, l'esperienza forse mi farà cambiare idea.
decisamente...
pensa ai Thread, qualunque oggetto che si puo' definire RUNNABLE (ovvero
implementa questa interfaccia), puo' venire lanciato su un thread! scusa se
e' poco!
ciao Davide
/ - / - | - \ - \
Davide Piras
pir...@engineer.com
\ - \ - | - / - /

Ma non ho ancora capito a che servono le classi astratte e le interfacce.
http://space.tin.it/computer/csadun/
 per la FAQ.
Per gli aspetti di design (che sono probabilmente quelli che non ti sono 
chiari... non cos'e' un'interfaccia, ma *quando* si usa) l'argomento e' apparso 
parecchie volte in ICJ: cerca su dejanews e troverai. :)
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

pongano ai limiti dell’inutilitą. Bha, l’esperienza forse mi farą cambiare idea.
Ti rammento che le librerie di Java scritte da Sun sono piene di
classi astratte e interfacce. Ci sara' un motivo? :-)
Ciao,  
 P.    === Replace "punto" with "." to get my email address.

Anche tu hai dormito durante Analisi I? Hai tutta la mia stima ;-)
ByEZ,
--
MindFlavor ( mailto:
mindflav...@hotmail.com
 )
Web Site 
http://web.tiscalinet.it/mindflavor

 No, con Carlo Ferrari.
già, il buon carlo.... :-)
-- 
Non c'è più forza nella normalità: c'è solo monotonia.