View Full Version : [Java] Dove iniziare
~FullSyst3m~
10-02-2009, 08:20
Visto che sto studiando matematica per l'uni ho pensato di iniziare a dare un'occhiata a Java pure visto che il prossimo anno lo farò all'uni (o forse a primo anno fanno fare C? Non ricordo.) In ogni caso: da quale guida/manuale/libro posso iniziare a studiarlo?
banryu79
10-02-2009, 08:49
Questo sito (c'è un manuale, in italiano, da scaricare) potrebbe essere un'inizio: claudio de sio cesari (http://www.claudiodesio.com/).
cdimauro
10-02-2009, 08:57
Visto che sto studiando matematica per l'uni ho pensato di iniziare a dare un'occhiata a Java pure visto che il prossimo anno lo farò all'uni (o forse a primo anno fanno fare C? Non ricordo.) In ogni caso: da quale guida/manuale/libro posso iniziare a studiarlo?
AAAAAARRRRRRGGGGGHHHHHHH
Un colpo al cuore!!! :cry:
~FullSyst3m~
10-02-2009, 09:47
AAAAAARRRRRRGGGGGHHHHHHH
Un colpo al cuore!!! :cry:
Non ne posso fare a meno. Il prossimo anno lo farò all'uni, almeno vedo un pò come è. La stessa cosa vale per il C.
Questo sito (c'è un manuale, in italiano, da scaricare) potrebbe essere un'inizio:
Lo avevo già sentito. Se non ricordo male avevo letto di un libro "Java mattone dopo mattone", o una cosa del genere. Molti dicono che per iniziare è perfetto.
wingman87
10-02-2009, 11:27
Si', pero' e' un po' vecchiotto. Del libro che ti ha linkato banryu c'e' anche la versione piu' aggiornata (a Java 6) che puoi acquistare in libreria.
banryu79
10-02-2009, 11:56
AAAAAARRRRRRGGGGGHHHHHHH
Un colpo al cuore!!! :cry:
Esagerato, eppoi mica è una traggedia :D
Si', pero' e' un po' vecchiotto. Del libro che ti ha linkato banryu c'e' anche la versione piu' aggiornata (a Java 6) che puoi acquistare in libreria.
Verissimo, ma penso che per cominiciare soltato a dare un'occhiata al linguaggio, la versione 1.5 sia ancora validissima.
Potresti prendere direttamente i volumi della Sun "Core Java".
Mi sento di sconsigliare "Thinking in Java" se non hai già conoscenza della programmazione ad oggetti.
cdimauro
10-02-2009, 12:07
Esagerato, eppoi mica è una traggedia :D
In effetti gli servirà per apprezzare ancora di più Python. :cool:
banryu79
10-02-2009, 12:11
In effetti gli servirà per apprezzare ancora di più Python. :cool:
Documentazione a parte, specie se si abitua troppo ai Javadoc e alla documentazione della Sun :asd:
cdimauro
10-02-2009, 13:12
Tranquillo: rimane sempre il linguaggio e la sua enorme libreria con cui dovrà avere a che fare. :fagiano:
io ho trovato ottimo questo libro
http://www.hoepli.it/libro.asp?ib=9788850326235&pc=000022007002017
Vincenzo1968
10-02-2009, 13:45
Non ne posso fare a meno. Il prossimo anno lo farò all'uni, almeno vedo un pò come è. La stessa cosa vale per il C.
...
Eh si, è il caso di citare nuovamente il don Gaetano di Sciascia:
non c'è niente da fare, mio caro, bisogna che tu ci strida.
:bimbo:
~FullSyst3m~
10-02-2009, 14:25
Si', pero' e' un po' vecchiotto. Del libro che ti ha linkato banryu c'e' anche la versione piu' aggiornata (a Java 6) che puoi acquistare in libreria.
Vorrei evitare di spendere soldi al momento, per iniziare a dare uno sguardo e fare qualche prova credo che basti qualche libro gratuito.
Verissimo, ma penso che per cominiciare soltato a dare un'occhiata al linguaggio, la versione 1.5 sia ancora validissima.
Leggerò questo allora.
Potresti prendere direttamente i volumi della Sun "Core Java".
Mi sento di sconsigliare "Thinking in Java" se non hai già conoscenza della programmazione ad oggetti.
Dove li prendo? Oggi non ho proprio voglia di cercare.
Comunque ho conoscenza della OOP.
In effetti gli servirà per apprezzare ancora di più Python
Già il solo pensiero me lo fa apprezzare ancora di più. Credo che sto facendo un'azione da kamikaze visto che sono sterile di idee e non ho scritto più nulla, ma devo guardarlo almeno.
banryu79
10-02-2009, 16:21
Già il solo pensiero me lo fa apprezzare ancora di più. Credo che sto facendo un'azione da kamikaze visto che sono sterile di idee e non ho scritto più nulla, ma devo guardarlo almeno.
Solo una cosa: occhio che non stai semplicemente andando a guardare un linguaggio sì diverso da Python ma ancora appartenente alla stessa "famiglia" (come potrebbe essere con Ruby).
Java è statically typed là dove tu sei abituato ad avere a che fare con un dynamic type system: questo è lo sbalzo maggiore che sentirai.
Oltre alla leggendaria verbosità di Java, naturalmente.
~FullSyst3m~
10-02-2009, 17:09
Solo una cosa: occhio che non stai semplicemente andando a guardare un linguaggio sì diverso da Python ma ancora appartenente alla stessa "famiglia" (come potrebbe essere con Ruby).
Java è statically typed là dove tu sei abituato ad avere a che fare con un dynamic type system: questo è lo sbalzo maggiore che sentirai.
Oltre alla leggendaria verbosità di Java, naturalmente.
E ti sembra poco. Abituato con Python che è dinamicamente e fortemente tipato. Oltretutto la sintassi è un amore in Python... per questo preferisco dargli un'occhiata prima invece di arrivare all'uni completamente all'asciutto.
D4rkAng3l
10-02-2009, 23:37
E ti sembra poco. Abituato con Python che è dinamicamente e fortemente tipato. Oltretutto la sintassi è un amore in Python... per questo preferisco dargli un'occhiata prima invece di arrivare all'uni completamente all'asciutto.
anche Java in un certo senso è strongly typed ed i binding tra variabile e tipo avvengono dinamicamente...tranne che cambia un po' il metodo di fare il binding dinamico che viene eseguito dalla JVM (c'ho appena fatto un esame su sta cosa).
Praticamente in Java tu devi dichiarare un tipo apparente che verrà controllato dal compilatore e garantirà la type safe ma poi ci sono modi per attribuire ad una variabile con un certo tipo apparente il riferimento ad un oggetto di un "altro tipo"....altrimenti non avresti il polimorfismo in Java...
Ti faccio un esempietto pratico...Java supporta il cosidetto polimorfismo per inclusione....
Tu hai una classe Rettangolo che contiene un certo numero di metodi tra cui il metodo dilata().
La classe Rettangolo è padre della sottoclasse Quadrato (un quadrato è un rettangolo con il vincolo di avere tutti i lati uguali).
A questo punto dentro Quadrato ridefinisci i metodi di Rettangolo che devono comportarsi in maniera diversa...quindi ad esempio ridefinisci il metodo dilata() in modo tale che non possa dilatare un solo lato di un quadrato rendendoti l'oggetto non conforme alla sua classe...
Quando tu dichiari una variabile di tipo Rettangolo (ad esempio nel main() potrai metterci dentro il riferimento ad un oggetto di tipo Quadrato (perchè è sottoclasse di Rettangolo) ad esempio così:
Rettangolo R = new Quadrato(2);
che dichiara R come Rettangolo e ci mette dentro il riferimento ad un nuvo oggetto Quadrato con lato di lunghezza pari a 2.
Se adesso tu invochi il metodo dilata() su R, tipo così:
R.dilata(5);
che metodo invochi? bene R è dichiarato come Rettangolo e Rettangolo è il suo tipo apparente ma visto che è stato costruito come Quadrato la JVM esegue dinamicamente il binding tra l'invocazione del metodo ed il corpo del metodo ridefinito in Quadrato perchè il metodo è stato forzato (la signature però deve essere la stessa).
Ciò garantisce la type safety....
Se ad esempio dentro Quadrato hai dichiarato degli altri metodi che non erano presenti in Rettangolo (come ad esempio un metodo raggioCerchioInscritto() che calcola il raggio del cerchio inscritto del Quadrato).
Se hai dichiarato R come Rettangolo e fai:
R.raggioCerchioInscritto(); il compilatore ti darà un errore a compile time...
Quindi JAVA è un caso un po' strano perchè supporta una forma di polimorfismo ma è comunque type safe...
Spero di essere stato sufficientemente chiaro :)
cdimauro
11-02-2009, 07:50
Questo vale soltanto per le istanze degli oggetti, ed è una cosa che puoi fare con qualunque altro linguaggio staticamente tipato. Ma non puoi cambiare il tipo / destinazione a una variabile dichiarata "int", ad esempio, facendola "diventare" string.
Con Python il binding è sempre dinamico, e una variabile può contenere qualunque tipo di dato, può cambiare il tipo come e quando vuole, ed è anche possibile distruggerla se non serve più.
Il tutto mantenendo una tipizzazione forte. Molto più forte di Java e di altri linguaggi, che hanno meccanismi di conversione automatica dei tipi che in Python richiedono espressamente un intervento da parte del programmatore.
~FullSyst3m~
11-02-2009, 10:51
anche Java in un certo senso è strongly typed ed i binding tra variabile e tipo avvengono dinamicamente...tranne che cambia un po' il metodo di fare il binding dinamico che viene eseguito dalla JVM (c'ho appena fatto un esame su sta cosa).
Praticamente in Java tu devi dichiarare un tipo apparente che verrà controllato dal compilatore e garantirà la type safe ma poi ci sono modi per attribuire ad una variabile con un certo tipo apparente il riferimento ad un oggetto di un "altro tipo"....altrimenti non avresti il polimorfismo in Java...
Ti faccio un esempietto pratico...Java supporta il cosidetto polimorfismo per inclusione....
Tu hai una classe Rettangolo che contiene un certo numero di metodi tra cui il metodo dilata().
La classe Rettangolo è padre della sottoclasse Quadrato (un quadrato è un rettangolo con il vincolo di avere tutti i lati uguali).
A questo punto dentro Quadrato ridefinisci i metodi di Rettangolo che devono comportarsi in maniera diversa...quindi ad esempio ridefinisci il metodo dilata() in modo tale che non possa dilatare un solo lato di un quadrato rendendoti l'oggetto non conforme alla sua classe...
Quando tu dichiari una variabile di tipo Rettangolo (ad esempio nel main() potrai metterci dentro il riferimento ad un oggetto di tipo Quadrato (perchè è sottoclasse di Rettangolo) ad esempio così:
Rettangolo R = new Quadrato(2);
che dichiara R come Rettangolo e ci mette dentro il riferimento ad un nuvo oggetto Quadrato con lato di lunghezza pari a 2.
Se adesso tu invochi il metodo dilata() su R, tipo così:
R.dilata(5);
che metodo invochi? bene R è dichiarato come Rettangolo e Rettangolo è il suo tipo apparente ma visto che è stato costruito come Quadrato la JVM esegue dinamicamente il binding tra l'invocazione del metodo ed il corpo del metodo ridefinito in Quadrato perchè il metodo è stato forzato (la signature però deve essere la stessa).
Ciò garantisce la type safety....
Se ad esempio dentro Quadrato hai dichiarato degli altri metodi che non erano presenti in Rettangolo (come ad esempio un metodo raggioCerchioInscritto() che calcola il raggio del cerchio inscritto del Quadrato).
Se hai dichiarato R come Rettangolo e fai:
R.raggioCerchioInscritto(); il compilatore ti darà un errore a compile time...
Quindi JAVA è un caso un po' strano perchè supporta una forma di polimorfismo ma è comunque type safe...
Spero di essere stato sufficientemente chiaro :)
Python è davvero tutto un altro mondo comunque.
Appena finisco di fare matematica inizio a dare un'occhiata al libro di De Sio Cesari.
~FullSyst3m~
11-02-2009, 22:37
E' di 700 pagine il libro di De Sio. Sembra completo, ho iniziato a dargli un'occhiata adesso.
D4rkAng3l
11-02-2009, 22:55
E' di 700 pagine il libro di De Sio. Sembra completo, ho iniziato a dargli un'occhiata adesso.
Se ti può interessare datti un'occhiata anche a queste dispense (solo quelle riguardanti Java e al più la dispensa relativa al polimorfismo che però non è completissima perchè altri argomenti erano sul libro): http://www.informatica.uniroma2.it/f0?fid=f1&id=LP
sono fatte abbastanza bene e sono un buon inizio poichè molto commentate e spiegate passo passo
Ciao
Andrea
~FullSyst3m~
11-02-2009, 23:04
Se ti può interessare datti un'occhiata anche a queste dispense (solo quelle riguardanti Java e al più la dispensa relativa al polimorfismo che però non è completissima perchè altri argomenti erano sul libro): http://www.informatica.uniroma2.it/f0?fid=f1&id=LP
sono fatte abbastanza bene e sono un buon inizio poichè molto commentate e spiegate passo passo
Ciao
Andrea
E' qualche dispensa universitaria?
D4rkAng3l
11-02-2009, 23:12
E' qualche dispensa universitaria?
Si...sono quelle del mio corso di linguaggi di programmazione del secondo anno...la parte di Java è abbastanza semplice e non arriva ad argomenti evoluti perchè non era un esame di Java vero e proprio ma bensì di inguaggi di programmazione e Java era circa 1/4 del programma totale però le ho trovate ben fatte e molto chiare quindi per iniziare a capire come funzionano le classi, gli oggetti vanno bene (se già programmi OO ti troverai ancora meglio e puoi passare praticamente alla parte più applicativa)
Se ti va dagli un'occhiata :)
~FullSyst3m~
11-02-2009, 23:19
Si...sono quelle del mio corso di linguaggi di programmazione del secondo anno...la parte di Java è abbastanza semplice e non arriva ad argomenti evoluti perchè non era un esame di Java vero e proprio ma bensì di inguaggi di programmazione e Java era circa 1/4 del programma totale però le ho trovate ben fatte e molto chiare quindi per iniziare a capire come funzionano le classi, gli oggetti vanno bene (se già programmi OO ti troverai ancora meglio e puoi passare praticamente alla parte più applicativa)
Se ti va dagli un'occhiata :)
La OO l'ho studiata tramite Python. Ho visto ora il link, ci sono pure i voti dei vari esami. Almeno mi faccio un'idea di come sarà all'uni. Ma al primo anno si fa programmazione "pratica"?
Comunque darò un'occhiata alle dispense domani, grazie.
D4rkAng3l
11-02-2009, 23:29
La OO l'ho studiata tramite Python. Ho visto ora il link, ci sono pure i voti dei vari esami. Almeno mi faccio un'idea di come sarà all'uni. Ma al primo anno si fa programmazione "pratica"?
Comunque darò un'occhiata alle dispense domani, grazie.
hauhua quei voti sono poco significativi...se vedi ci sono i nickname ed il nickname lo metteva solo chi era quasi certo di averlo passato...molti non hanno consegnato...se poi vedi sono 2 scritti: il primo scritto dove nonostante i nick ha bocciato un fottio ed il secondo (che era solo per chi aveva passato il primo...se non passavi la prima parte non lo potevi fare) dove ha bocciato poco....
Tieni conto che eravamo circa 50 a provare il primo scritto e che lo abbiamo passato in circa 20...ed è un esame impegnativo ma non impossibile (studiando c'ho preso 27) ....domani devo dare calcolo numerico e già sento il bruciore al sedere [vasellina mode ON] :D
~FullSyst3m~
12-02-2009, 11:10
hauhua quei voti sono poco significativi...se vedi ci sono i nickname ed il nickname lo metteva solo chi era quasi certo di averlo passato...molti non hanno consegnato...se poi vedi sono 2 scritti: il primo scritto dove nonostante i nick ha bocciato un fottio ed il secondo (che era solo per chi aveva passato il primo...se non passavi la prima parte non lo potevi fare) dove ha bocciato poco....
Tieni conto che eravamo circa 50 a provare il primo scritto e che lo abbiamo passato in circa 20...ed è un esame impegnativo ma non impossibile (studiando c'ho preso 27) ....domani devo dare calcolo numerico e già sento il bruciore al sedere [vasellina mode ON] :D
Infatti mi sono stranito quando ho visto i nick, non capivo come mai non c'erano i nomi. Ma quanto è durato il corso di quell'esame lì? E' stato difficile? Almeno mi faccio un'idea.
Ciccio17
12-02-2009, 13:41
Puoi iniziare a dare un occhiata non al linguaggio, ma alla programmazione in generale ( a meno che tu non la stia già studiando)
Istruzioni condizionali, cicliche, array, ordinamenti
che sono argomenti comuni per ogni linguaggio di programmazione. Forse ti è piu d'aiuto questo.
bye :)
~FullSyst3m~
12-02-2009, 14:54
Puoi iniziare a dare un occhiata non al linguaggio, ma alla programmazione in generale ( a meno che tu non la stia già studiando)
Istruzioni condizionali, cicliche, array, ordinamenti
che sono argomenti comuni per ogni linguaggio di programmazione. Forse ti è piu d'aiuto questo.
bye :)
Questi li ho studiati quando ho fatto Python.
D4rkAng3l
12-02-2009, 15:11
Infatti mi sono stranito quando ho visto i nick, non capivo come mai non c'erano i nomi. Ma quanto è durato il corso di quell'esame lì? E' stato difficile? Almeno mi faccio un'idea.
Il corso era un corso impegnativo di 6 mesi...ti ripeto su circa 50 persone lo abbiamo passato in circa 20...
Tuttavia è un esame che è stato spiegato molto bene...e studiando molto lo si passava...per esempio oggi probabilmente sono stato steccato a calcolo numerico dove passa molta meno gente ed il corso era incomprensibile perchè spiegato ad cazzum :cry:
~FullSyst3m~
12-02-2009, 15:19
Il corso era un corso impegnativo di 6 mesi...ti ripeto su circa 50 persone lo abbiamo passato in circa 20...
Tuttavia è un esame che è stato spiegato molto bene...e studiando molto lo si passava...per esempio oggi probabilmente sono stato steccato a calcolo numerico dove passa molta meno gente ed il corso era incomprensibile perchè spiegato ad cazzum :cry:
Io credo che una persona non si deve basare su cosa fanno gli altri. Comunque ora ti devi fare tutto da solo visto che è stato spiegato a cazzum?
D4rkAng3l
12-02-2009, 15:31
Io credo che una persona non si deve basare su cosa fanno gli altri. Comunque ora ti devi fare tutto da solo visto che è stato spiegato a cazzum?
beh ovvio che non ci si basa su quello che fanno gli altri però ti assicuro che se un esame lo passano 10 persone su 50\60 un motivo ci sarà e può essere:
1) Esame spieato bene ma particolarmente tosto con professore che mette cose non standard dove devi avere l'intuizione giusta altrimenti amen.
2) Esame tosto o magari non impossibile ma cmq spiegato a cazzo di segugio.
~FullSyst3m~
12-02-2009, 16:06
beh ovvio che non ci si basa su quello che fanno gli altri però ti assicuro che se un esame lo passano 10 persone su 50\60 un motivo ci sarà e può essere:
1) Esame spieato bene ma particolarmente tosto con professore che mette cose non standard dove devi avere l'intuizione giusta altrimenti amen.
2) Esame tosto o magari non impossibile ma cmq spiegato a cazzo di segugio.
Si infatti, chissà cosa mi aspetta il prossimo anno :muro:
~FullSyst3m~
19-02-2009, 20:40
Si...sono quelle del mio corso di linguaggi di programmazione del secondo anno...la parte di Java è abbastanza semplice e non arriva ad argomenti evoluti perchè non era un esame di Java vero e proprio ma bensì di inguaggi di programmazione e Java era circa 1/4 del programma totale però le ho trovate ben fatte e molto chiare quindi per iniziare a capire come funzionano le classi, gli oggetti vanno bene (se già programmi OO ti troverai ancora meglio e puoi passare praticamente alla parte più applicativa)
Se ti va dagli un'occhiata :)
Ho finito ora di leggere la dispensa. Apparte qualche cosa specifica di Java, come ad esempio il funzionamento della JVM, c'erano cose che sapevo avendo fatto la OO con Python. Ora dò un'occhiata al libro di De Sio.
DanieleC88
20-02-2009, 21:43
Python è davvero tutto un altro mondo comunque.
Python è un altro linguaggio con una sintassi ed una semantica diverse (duck typing incluso :D), non un altro mondo.
Se proprio vuoi fare Java, prova a dare un'occhiata anche a Thinking in Java e non aver paura di rifare ciò che hai già fatto con Python. Fa sempre bene ripetere, e poi ti permetterà - affrontando problemi che già conosci - di imparare meglio il nuovo linguaggio confrontandolo con quello vecchio. :D
ciao ;)
~FullSyst3m~
20-02-2009, 21:58
Python è un altro linguaggio con una sintassi ed una semantica diverse (duck typing incluso :D), non un altro mondo.
Se proprio vuoi fare Java, prova a dare un'occhiata anche a Thinking in Java e non aver paura di rifare ciò che hai già fatto con Python. Fa sempre bene ripetere, e poi ti permetterà - affrontando problemi che già conosci - di imparare meglio il nuovo linguaggio confrontandolo con quello vecchio. :D
ciao ;)
Un altro mondo intesto proprio nel senso di ordine di codice, sintassi e semantica. E' un modo di dire "tutto un altro mondo".
Non ho paura di rifare le cose, assolutamente, comunque adesso guardo quello di De Sio, poi si vedrà.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.