Newsgroup: it.comp.lang
Titolo: Re: [CONFRONTO] C++  oppure  C# - Devo impararne uno.

 Se vuoi proseguiamo la discussione li.
-- 
Gerolamo 

>Java ti inculca, molto IMHO, un modo di programmare "non bello"
[cut]
ho iniziato a programmare in java, dal quale poi sono passato al c++ 
senza problemi.
volevo solo capire quali sono i punti di questo 'modo di programmazione 
non bello', a tuo parere.
Paolo
PS: scrivendo e' a volte difficile imprimere il giusto tono alla 
conversazione. non ho nessuna intezione polemica! sono solo interessato 
al tuo punto di vista.

 programmazione non bello', a tuo parere.
Scusa se mi sono dilungato.
I punti 2, 3, 4 e 7 spero rispondano alla tua domanda.
Ultima cosa:
rileggendo questo post sembra che io ritenga il Java uno schifo.
Non intendevo quello.
Il Java ha anche aspetti positivi, ci mancherebbe altro!
Solo che mi pare che ci siano delle alternative.
Pareri divergenti o contari sono ben accetti :-)
-- 
Gerolamo 

 Solo che mi pare che ci siano delle alternative.
Con il C# sto sviluppando un'applicazione di medie dimensioni e mi sono
trovato bene. Parte del gruppo di lavoro usa 
VS.NET
, gli altri (me
compreso) usano Mono sotto Linux, nessun problema (SWF a parte). E c'e`
da dire che la documentazione della MS e` abbondante e ben fatta.
Luca
-- 
Home: 
http://kronoz.cjb.net
"L'abilita` politica e` l'abilita` di prevedere quello che
 accadra` domani, la prossima settimana, il prossimo mese e
 l'anno prossimo. E di essere cosi` abili, piu` tardi,
 da spiegare  perche' non e` accaduto."

 Solo che mi pare che ci siano delle alternative.
Per fortuna!!
sono stato un po' prolisso? spero di non averti annoiato.
Paolo

 ben fatta.
Si, è sembrato anche a me nel progetto a cui sto lavorando.
E questo è uin gran vantaggio.
ciaociao
-- 
Gerolamo 

 dall'utilissimo javadoc che rende pressoche' automatica tutta l'operazione
Vero.
Python ha un meccanismo simile.
ciaociao
-- 
Gerolamo 

 da dire che la documentazione della MS e` abbondante e ben fatta.
vuoi dire che c'e' un framework c# per linux??? non ne avevo idea, credo 
che dovro' informarmi!
grazie!

 (es. Python) 
In realtà anche Python si porta dietro una VM... Per quel che ne so le
differenze principali sono:
1. in Python la generazione del bytecode viene effettuata al volo la prima
volta che esegui il programma;
2. in Python non esiste un compilatore JIT. Per la verità ci sarebbe un
quasi-JIT compiler (Psyco), ma purtroppo non è incluso in CPython (lo
devi installare a parte) e non è cross-platform
Ciao
-- 
Marco

 vuoi dire che c'e' un framework c# per linux???
Ce ne sono due ;)
- Mono: progetto portato avanti dalla ximian (novel). SWF a parte e`
  molto completo. La compatibilita` binaria, che poi e` lo scopo di
  .NET, e` totale, almeno per la mia esperienza[1]. Il server XSP 
  riesce a fare girare pagine 
ASP.NET
.
 
http://mono-project.com/
 
- dotGNU: Stallman era convinto che De Icaza (vedi sopra) volesse
  conquistare il mondo insieme a Bill... quindi ha creato il proprio
  progetto .NET. Il compilatore ed il framework non sono al livello di
  quelli di mono, ma di interessante c'e` il supporto per un compilatore
  C -> IL nativo (non quella cosa ibrida che fa MS con il C++).
 
http://www.dotgnu.org/
Luca
[1] Nel senso che limitatamente alla mia applicazione le dll e gli exe
compilati su una piattaforma girano tranquillamente anche sull'altra.
-- 
Home: 
http://kronoz.cjb.net
Una donna sposa un uomo sperando che cambi, e lui non cambiera`. Un
uomo sposa una donna sperando che non cambi, e lei cambiera`.

 Cosa usi come IDE?
ViM ;) C'e` da dire che design della GUI e` abbastanza difficoltoso
perche` devi compilare, far girare e vedere... anche per questo gran
parte della UI e` stata fatta con il RAD di 
VS.NET
.
Luca
[1] Che ovviamente sto usando per scrivere questo post, le email, i
sorgenti del progetto, la documentazione LaTeX del progetto, ecc. :D
-- 
Home: 
http://kronoz.cjb.net
The trouble with computers is that they do what you tell them, 
not what you want.
D. Cohen

 che dovro' informarmi!
Certo:
http://www.mono-project.com/
Ma Kronos ti saprà dire certo di più
-- 
Gerolamo

 un'oggetto!
Il problema e' che e' un idea di fondo sbagliata. Non tutto e' un
oggetto e forzare sull'universo un modello non calzante porta a fare
sforzi, intellettuali e di programmazione, inutili. Senza contare che
insegnare a programmare in Java crea schiere di programmatori
innamorati di questa idea balzana che si perdono alla vista di una
funzione senza una classe intorno, bah!
Ciao,
Nicola

 fuori argomento.
Hai ragione...

 o C/C++ con Win32 SDK...
Sicuro che non convenga di più .NET nella gran maggioranza dei casi?
ciaociao!
-- 
Gerolamo 

 O VB6, o C++ con MFC, o C/C++ con Win32 SDK...
O magari ASM + Win32, torniamo indietro :)
-- 
Lawrence Oluyede (l dot oluyede at virgilio dot it)
"If the implementation is hard to explain, it's a bad idea"
      The Zen Of Python, Tim Peters

 
Devi ammettere pero' che ha dei risvolti estremamente positivi: 
prendiamo ad esempio i template del c++, attraverso questo costrutto 
puoi costruire strutture generiche, e' vero ma il rischio che un 
programmatore tenti di utilizzarle con classi che non implementano gli 
operatori e le funzioni da te utilizzate e' alto e questo genere di 
errore e' difficile da scovare se non si ha il codice del template.
In java questo problema non si potra' mai presentare.  Al momento di 
scrivere la struttura definisci esattamente su quali tipi di dati puo' 
lavorare a partire da Object, se deve essere piu' generica possibile, 
fino alle classi definite ad hoc, se le operazioni sono settoriali.
Paolo
-- 
Anche se detesto quello che dici
difendero' fino alla morte il tuo diritto a dirlo.
       - Voltaire

 fino alle classi definite ad hoc, se le operazioni sono settoriali.
In Java si presentano problemi peggiori, perche' per scrivere codice
generico devi utilizzare i cast, spostando a runtime controlli che con
i template vengono compiuti dal compilatore.
Ciao,
Nicola

 Sicuro che non convenga di piů .NET nella gran maggioranza dei casi?
Secondo me .NET e' tuttora una scommessa.
Ciao,
Nicola

 sforzi, intellettuali e di programmazione, inutili.
Mi permetto di dissentire. Tutto è un oggetto, e non c'è niente di male 
ad imporlo nel linguaggio. Il modo di farlo in java è sbagliato, 
concordo, il concetto no.
Puoi postare un qualsiasi pezzo di codice e te ne faccio vedere uno 
equivalentemente corto pure OO
(beh a parte qualche one liner in perl o K ;)

...

Il fatto che una qualsiasi funzione sia avvolgibile in un oggetto non
significa che l'universo della programmazione sia fatto ad oggetti.
Per esempio, qualsiasi programma inizia l'esecuzione chiamando una
funzione convenzionale. Metterci intorno una classe e' una stortura.
Il punto fondamentale e' che uno strumento concettuale ha senso se e
quando e' utile, non perche' e' bello. Se ci sono cose che si
rappresentano meglio tramite un approccio procedurale, non c'e' nessun
motivo per non farlo.
Ciao,
Nicola

 motivo per non farlo.
concordo sull'utilità, e non sostengo che la OOP sia La Vera Via (TM).
Io contesto solamente:
 > Non tutto e' un
 > oggetto e forzare sull'universo un modello non calzante porta a fare
 > sforzi, intellettuali e di programmazione, inutili
come mostrato negli esempi, un linguaggio ben fatto permette di evitare 
completamente gli sforzi inutili, intellettuali e di programazione, 
lasciando però all'utente la possibilità di gestire tutto quanto con 
estrema uniformità (e anche qui java è in torto visto che le classi sono 
oggetti ma nn troppo ed esistono i tipi come int) quando ne ha bisogno.

 oggetti ma nn troppo ed esistono i tipi come int) quando ne ha bisogno.
Di nuovo, questa e' una definizione cosi' ampia del termine oggetto da
perdere di significato. E' come dire che ciascuna delle tre istruzioni
che hai scritto e' una "cosa". Verissimo, ma con questo?
L'uniformita' ha senso se devi rappresentare cose uniformi, altrimenti
e' solo un'inutile "ingessatura". L'importante e' avere a disposizione
un insieme sufficientemente completo di strumenti con cui operare; a
mio avviso linguaggi come Python e C++ te li danno, Java no, e per
questo e' piu' macchinoso da usare (= ti richiede di scrivere codice
ripetitivo per funzionalita' analoghe).
Ciao,
Nicola

 ripetitivo per funzionalita' analoghe).
e concordo in pieno :)

 Secondo me .NET e' tuttora una scommessa.
Perchè?
A me pare che .NET sia ben supportato, indipendente dal linguaggio
(per rimanere IT :) ) e sufficientemente omnicomprensivo per la maggior
parte delle applicazioni.
Cosa mi è sfuggito?
-- 
Gerolamo 

 Cosa mi č sfuggito?
Che non ha ancora preso piede. 
Ciao,
Nicola

 Che non ha ancora preso piede. 
Mmm da scettico ti dico che non è cosi, di richieste iniziano ad essercene
parecchie anche nei siti di recruiting online, inoltre in Italia vantiamo
lo User Group .NET piu` grande d'Europa (con circa 8000 iscritti) il che
non e` poco. Numeri a parte, e` in ritardo sulle loro aspettative e non è
"esploso" ma "il piede lo sta prendendo", nel bene o nel male (lo
testimonia il fatto che ho ricevuto ben 3 offerte di lavoro su .NET in
meno di 5 mesi)
Ciao Nicola!


 Pascal, C, C++, VB6, Java, ... anche l'assembly volendo :)
Pascal č ok, forse il migliore, il C forse richiede un pň di sforzo in
piů(puntatori, sintassi astrusa...), il C++ č troppo complesso, VB6
non č un vero linguaggio di programmazione, Java č inadatto
all'insegnamento.

 Java è inadatto all'insegnamento.
Posso chiederti perché?
-- 
Ciao,
Marco

 
confronta il programma pippo.pas:
  program Hello;
   begin
      writeln ('Hello, world!')
   end.
con pippo.java
public class Hello{
   public static void main (String[] args){
     System.out.println("hello world");
   }
}
per spiegare il primo parli di 'programma', 'funzione', 'stringa'.
Per spiegare il secondo parli di 'classe', 'array', 'programma', 
'stringa', 'argomenti da riga di comando', 'visibilità', 'package', 
'metodo', 'metodo statico' , 'variabile', 'membro', 'valore di ritorno'.
Ed il secondo non compila neanche.
Java è inadatto perché non puoi iniziare gradualmente, ti trovi fin da 
subito di fronte ad una quantità enorme di concetti che non è possibile 
spiegare assieme, e che rimangono come parole magiche per un bel po' di 
tempo. E tanto, per capire, prova a confrontare le versioni in pascal e 
java di 'leggi una stringa da tastiera, e stampala di nuovo' ;)

 nuovo' ;)
E' vero, la gestione della console è inutilmente complicata in
Java... Però se prendi un programmino con un'interfaccia grafica (es.:
Swing) che fa più o meno la stessa cosa (legge una stringa da un campo
di testo e la stampa ad esempio in una nuova finestra) è già un altro
discorso
-- 
Ciao,
Marco

 discorso
E tu vorresti insegnare a programmare partendo subito da una GUI con le
Swing? Figlio mio, vuoi far morire i tuoi studenti, vero?
Una GUI dev'essere posta *alla fine* del processo di apprendimento,
perché contiene troppe metafore, troppe decisioni a priori, per essere
utile a qualcuno che non sa programmare.
Il ritorno d'immagine sarà anche più gratificante, ma poi ci si ritrova
con un mucchio di gente che non sa cosa sta facendo, e scrive UI che
fanno buttare gli utenti dalla finestra dall'orrore - vedi quello che
han fatto sei major revision di Visual Basic negli ultimi dieci anni.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)                 [ 
http://www.emmanuelebassi.net
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 discorso
ovvio, codice:
import javax.swing.JOptionPane;
public class Hello2 {
public static void main(String[] args) {
     String var1 = JOptionPane.showInputDialog("inserisci una stringa:");
     System.out.println(var1.toUpperCase());
     System.exit(0);
   }
}
che impone di spiegare allo studente cosa sia un package ed un import, 
il classpath, di nuovo cosa è un metodo statico, cosa è un metodo 
d'istanza, a cosa serve quella exit(), e, anche se non si vede 
chiaramente da questo codice, cosa sia un null, cosa sia un'eccezione, 
perché un oggetto null può essere assegnato ad una variabile String. 
Sperando che non si chiedano cosa è swing, o javax, o perché una 
finestrella si chiama OptionPane con la J davanti[2] :)
[1] ereditarietà singola, qualcosa è un oggetto qualcosa no qualcosa un 
po', public/private/protected è OOP il resto no, l'allocazione di un 
oggetto è un miracolo che ovviene con la parola magica 'new', un metodo 
o è di istanza o è statico, gli operatori sono doni divini, e 
soprattutto il grande errore che la OOP imponga di pensare ad oggetti 
anche cose evidentemente imperative
[2] manco a farlo a posta, faccio il borsista nel laboratorio della mia 
università ed oggi mi son trovato a dare una mano alla prima lezione di 
Fondamenti di Informatica 1... potrei andare avanti con queste domande 
per ore ed ore :)

 han fatto sei major revision di Visual Basic negli ultimi dieci anni.
Sì, sono d'accordo.
-- 
Ciao,
Marco

 queste domande per ore ed ore :)
:-)
-- 
Ciao,
Marco

 definire all'interno del costrutto "class")? 
si, anche se il concetto è + ampio (e mi correggo 'cose che non lo sono' 
sarebbe stato meglio)
ciap