|
|
|
![]() |
|
Strumenti |
![]() |
#61 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Immagino siano state introdotte principalmente per sopperire alla mancanza delle closure in Java.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#62 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#63 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
ma se non esistesse il null, un oggetto non inizializato a cosa punterebbe? Ad un oggetto con tutti i field inizializzati al valore di default? Ad un oggetto completamente vuoto che occupa lo spazio necessario (con eventuali collections e arrays vuoti ovviamente)? Per me se un oggetto non è inizializzato non dovrebbe avere un riferimento, quindi, ad occhio un riferimento nullo mi pare che faccia esattamente questo.. o sbaglio? ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#64 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
In altri linguaggi (ad esempio smalltalk), esiste esplicitamente un oggetto nullo.
Le implicazione su come viene implementato l'oggetto nullo hanno ripercussioni su tutto l'ambiente. Le due alternative principali sono se l'oggetto nullo deve generare errori, o se deve consumare in modo silente i messaggi. Smalltalk ed objective-C hanno fatto scelte diverse: http://blade.nagaokaut.ac.jp/cgi-bin...uby-talk/17785 La gestione dll'oggetto nullo che esegue le chiamate senza generare errori è specifico design pattern (a livello applicativo). Vantaggio principale del pattern è la semplificazione del codice che non ha più bisogno di molte validazioni e controlli: http://en.wikipedia.org/wiki/Null_Object_pattern Probabilmente la scelta di Java risente del fatto storico di dover supportare dispositivi embedded, richiedendo così un implementazione "semplice" e più di basso livello.
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
#65 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Ah, dimenticavo: su Wikipedia può scriverci chiunque, ma anche altri siti che "trattano" l'argomento (come quelli che hai in firma) non sono esenti da immane assurdità che hanno riportato. Per maggiori informazioni, vale sempre il link che ho postato sopra. Per il resto non ha il benché minimo senso andare a confrontare applicazioni totalmente diverse, come ad esempio Azureus e uTorrent, o tirare fuori un'applicazione che non ha un ESATTO corrispondente con un altro linguaggio (es: Eclipse, NetBeans, Poseidon, ecc.; gli esempi si sono sprecati). Ha senso invece riportare confronti sulle MEDESIME applicazioni, come ha fatto "TigerShark": il codice fa ESATTAMENTE la stessa cosa, ma l'UNICA differenza è il linguaggio usato. Quote:
Comunque basta che per ogni classe esista una particolare istanza da usare per indicare un oggetto "nullo". Se ho una classe Frutto che mi restituisce come istanze Banana, Pera, Mela, ecc., per indicare l'assenza di un frutto restituirà "NessunFrutto" (il valore "nullo" predefinito della classe). Il vantaggio è che in questo modo il compilatore può generare SEMPRE codice efficiente, perché ha la sicurezza che non incontrerà mai nessun "NULL", ma sempre istanze concrete di ogni particolare classe con cui lavoriamo. A noi programmatori non interessa né ci è necessario sapere se un'istanza è banalmente e genericamente "nulla": è sufficiente sapere che un'istanza di una particolare classe ha un "valore nullo" (per quella precisa classe). Non so se mi sono spiegato, ma eventualmente marco chiarirà meglio il concetto se ne avrà voglia. ![]() P.S. Sono in ferie fino al 6: se riesci a contattare Jocchan fammi sapere che ci vediamo uno di questi giorni, se possibile (anche di giorno, non c'è problema); al limite vediamoci noi due, se lui non può.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#66 | |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
mi permetto di dire la mia (del tutto personale):
Il fatto di avere la possibilità di mettere a null un oggetto secondo me è un vantaggio per i già citati esempi... Quote:
credo che si abbia anche uno spreco di memoria minore non facendolo puntare ad un oggetto concreto..... in pratica volevo solo dire che secondo me il "null" non è un "problema" di java, ma è una scelta filosofica..... il tutto IMHO ![]()
__________________
My gaming placement |
|
![]() |
![]() |
![]() |
#67 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
dopo essermi letto tutto il flame che avete sollevato (e dopo aver capito circa un 20% di quello che c'era scritto
![]() Ho programmato qualche tempo fa un programmino "scolastico" per il calcolo dei primi 5000 numeri primi, forse non sarà la versione più ottimizzata che esista per fare questo (anzi sicuramente XD) , però posso dire che calcolando con il mio orologio a lancette (LOL) il tempo di esecuzione dello stesso codice in C++ e JAVA su un vecchio Pentium III 700mhz con Ubuntu Gutsy, ho rilevato che mentre in Java ci volevano quasi 40 secondi in C++ ci si limitava a 13...ora avendo fatto la prova più volte io programmatore inesperto cosa posso pensare??.. Senza nessuna polemica e senza alzare polveroni ![]()
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
![]() |
![]() |
![]() |
#68 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5845
|
Indipendentemente dal fatto che Java sia meglio di C++ od il contrario ( a me piacciono entrambi
![]() Detto questo, spesso il codice Java è più elegante e pulito( ovviamente dipende molto anche dal programmatore) quindi spesso si può accettare un maggior tempo di esecuzione a fronte di una maggiore chiarezza del codice. Io che lavoro spesso con applicazioni parallele che operano su decine di processori, posso dirvi che Java è visto come la peste in questi campi. C++ un pò meno, non a caso ci sono molte librerie parallele scritte in C++( ad esempio Charm++) . In questo campo, dove si cerca la massima velocità di esecuzione possibile, prevalgono C e Fortran perchè sono ritenuti più veloci di tutti. Attenzione, non dico migliori sotto tutti i punti di vista, ma solo sotto quello della velocità di esecuzione. Questi due linguaggi infatti, hanno poche astrazioni che facilitano sì la programmazione, ma che rallentano l'esecuzione del programma. In questo campo, la portabilità di Java non serve assolutamente a nulla. Anzi, molto spesso tali applicazioni sono ottimizzate per la macchina in questione. Ultima modifica di Unrue : 30-12-2007 alle 10:59. |
![]() |
![]() |
![]() |
#69 | ||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#70 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#71 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
A volte anche trovare dei riferimenti circolari che impediscono la deallocazione degli oggetti non è così immediato. Io non sono risucito a trovarne in un programma C# che per inviare delle stringhe via seriale (usando 2 classi) arriva ad occupare 70MB di RAM per circa 2MB di dati inviati. Avesse avuto dei memory leak in C++ si sarebbe fermato ad occupare 2MB più del necessario, al massimo 4 visto che le classi coinvolte erano 2. |
|
![]() |
![]() |
![]() |
#72 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Per quanto riguarda lo "spreco" di spazio, servirebbe un oggetto "null" per ogni classe, e francamente non mi pare eccessiva come richiesta.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#73 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
la cosa ideale per me sarebbe un linguaggio dove di default i null object di ciascuna classe hanno metodi vuoti, e opzionalmente questi metodi possono essere overriddati e il programmatore può scriverci quello che vuole (anche lanciare un'eccezione se vuole). l'unico problema è per i metodi che devono ritornare qualcosa; quelli dovrebbero essere overriddati per forza a meno che non si stabiliscano valori di default da ritornare: falso per i booleani, 0 per gli interi, null object per le classi, e così via. |
|
![]() |
![]() |
![]() |
#74 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5845
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#75 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
altra cosa che non mi piace di Java, anche se è una fesseria: detesto il nome NullPointerException
![]() i riferimenti di Java hanno poco a che vedere coi puntatori. |
![]() |
![]() |
![]() |
#76 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#77 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#78 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
E' chiaro che tutto dipende da come si vuole siano gestiti questi casi particolari...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#79 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Per esperienza professionale mi riferisco principalmente al C#, dove codice realizzato con tutti i crismi per la versione 1.1 non è per niente riusabile con la versione 2.0. E scommetto che quelli pensati per il 2.0 non saranno adattabili alle specifiche di programmazione del 3.5. Per lo meno il C++ con tutti i suoi difetti è uno standard ISO, e in quanto tale mantiene i suoi difetti per almeno una decina d'anni ![]() |
|
![]() |
![]() |
![]() |
#80 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Nel mondo reale.
Non tutti la fuori hanno i dual core, più spesso la gente lavora con computer con 512-256 MB di RAM e si lamenta che i programmi sono lenti. Non puoi rispondergli "Guarda che 1GB di ram costa 50Euro", visto che memorie così vecchie non le trovi facilmente. Il C# su macchine del genere è assolutamente inadatto, visto che si prende 25MB solo per una stupidissima interfaccia con una textbox multiline e 3 pulsanti che non fanno assolutamente niente. Per uscire leggermente dall'ambito desktop, vogliamo paragonare la velocità di un sito in PHP rispetto ad uno ASP.NET? A parte che le pagine ASP.NET sono piene di schifezze inserite gratuitamente da ASP stesso che rendono il download decisamente più pesante, il carico di lavoro del server è decisamente più elevato. La cosa si nota decisamente se il "server" è un P4 con 1GB di ram che deve tenere in piedi 3 siti e un centro servizi. Quote:
Magari lo sviluppatore ci ha messo 1 ora per realizzarli, ma poi io utilizzatore perdo 1 ora di tempo per usarli ogni volta, nell'attesa che il programma reagisca ai comandi. Su tutte le macchine che ho avuto sotto mano la JVM si prende sempre i suoi 60MB, l'avvio dei programmi java mi è sempre sembrato mostruosamente lento, magari per il JIT, però poi l'esecuzione stessa del programma non era fulminea. Con questo niente a che ridire con la struttura del linguaggio Java. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:04.