Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26

Discussione: struttura programma ..

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    struttura programma ..

    Ciao, mi piacerebbe capire com'è strutturato il programma che trovo come esempio nella guida Java.

    da quello che capisco io ..

    abbiamo un main dentro al quale viene:
    - istanziato l'oggetto 'e' della classe 'Eratostene'
    - chiamato l'evento 'calcolaPrimi'
    - chiamato l'evento 'scriviPrimi'

    dentro all'evento 'calcolaPrimi' (ciclo 'while'):
    - si chiama l'evento 'elMul', che non ha ritorno (void), e a cui viene passato il campo 'num'
    - si chiama l'evento 'prossimo', che ha come ritorno il campo 'num', che gli viene anche passato come input

    a stò punto mi chiedo (sempre che quello che descritto finora sia corretto) ..
    l'evento 'Eratostene' dell'omonima classe, dove in sostanza si dichiarano e valorizzano i 2 array, parte con l'istanza dell'oggetto 'e' ? (visto che dal main non viene chiamato ..)
    e quale differenza ci sarebbe con tutti gli altri eventi che trovo dentro la classe, che devono essere invece 'chiamati' ?

    Grazie mille



    Codice PHP:
    class Eratostene
    {
      static 
    int MAX=1000
      
    int [] numeri = new int[MAX]; 
      
    boolean [] primi = new boolean[MAX]; 
      
    // ---> 1
      
    public Eratostene()
      { 
    int i
          for (
    i=0;i<MAX;i++)
          {
           
    numeri[i]=i+1
           
    primi[i]=true
          }; 
      } 
      
    // ---> 2  
      
    void elMul(int a)
      { 
          for (
    int j=2;j*a<=MAX;j++)
          
    primi[(j*a)-1]=false
      } 
      
    // ---> 3  
      
    int prossimo(int n)
      {
        
    int tmp=n
        while (!
    primi[tmp]) 
          {
           
    tmp++;
           if (
    tmp>=MAX
              break;
          } 
         return 
    tmp+1
       } 

      
    // ---> call 1
      
    void calcolaPrimi()
      {
         
    int num=2
         while (
    num<=MAX)
           {
            
    elMul(num);
            
    num=prossimo(num);
           }; 
      } 
     
    // ---> call 2
      
    void scriviPrimi() 
      { 
        
    System.out.println("I numeri primi fino a "+MAX+" sono:"); 
         for (
    int i=0MAX i++)
           if (
    primi[i]) 
             
    System.out.print(numeri[i]+" "); 
      } 
             
      public static 
    void main(String[] args)
      { 
    Eratostene e = new Eratostene(); 
        
    e.calcolaPrimi(); 
        
    e.scriviPrimi(); 
      } 


  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: struttura programma ..

    Originariamente inviato da JANUS70
    Ciao, mi piacerebbe capire com'è strutturato il programma che trovo come esempio nella guida Java.

    da quello che capisco io ..

    abbiamo un main dentro al quale viene:
    - istanziato l'oggetto 'e' della classe 'Eratostene'
    - chiamato l'evento 'calcolaPrimi'
    - chiamato l'evento 'scriviPrimi'

    dentro all'evento 'calcolaPrimi' (ciclo 'while'):
    - si chiama l'evento 'elMul', che non ha ritorno (void), e a cui viene passato il campo 'num'
    - si chiama l'evento 'prossimo', che ha come ritorno il campo 'num', che gli viene anche passato come input

    a stò punto mi chiedo (sempre che quello che descritto finora sia corretto) ..
    l'evento 'Eratostene' dell'omonima classe, dove in sostanza si dichiarano e valorizzano i 2 array, parte con l'istanza dell'oggetto 'e' ? (visto che dal main non viene chiamato ..)
    e quale differenza ci sarebbe con tutti gli altri eventi che trovo dentro la classe, che devono essere invece 'chiamati' ?

    Grazie mille
    Intanto chiama con il giusto nome le varie cose:

    1. la classe serve a modellare un oggetto. In soldoni, se tu vuoi rappresentare le automobili, sicuramente avrai una classe Automobile, che ha varie proprietà (es. tipo, motore, colore, targa) e offre varie funzionalità che si chiamano metodi (es. cammina, frena). L'evento in java è un'altra cosa.
    2. l'oggetto è un'istanza di classe. Nel senso che rappresenta concretamente un'automobile con le sue caratteristiche.
    3. il costruttore è un metodo particolare che serve principalmente a creare un oggetto di una data classe e a dare allo stesso uno stato consistente.
    E' obbligatorio per una classe avere un costruttore, se non ne hai nemmeno uno il compilatore ne aggiunge uno di default (che non fa niente).
    4. questo è un caso particolare in cui dal main istanzi la classe che contiene il main. Il costruttore della classe valorizza i due array (scelta implementativa). Una volta che hai un'istanza della classe puoi richiamare i metodi della stessa.
    Il programma parte dal main, sempre e comunque. Poi il main si trova ad istanziare un oggetto che in questo caso è dello stesso tipo della classe che lo contiene.

    Leggiti un buon testo al posto della guida, queste sono le basi di qualsiasi linguaggio di programmazione ad oggetti

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    non si chiamano eventi ma metodi, in particolare il metodo che ha lo stesso nome della classe si chiama costruttore, viene chiamato automaticamente al momento dell'allocazione di una istanza e serve a inizializzare le variabili (chiamati attributi) dell'istanza appena creata

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Grazie mille !!
    molto esaurienti ..

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Avrei però un paio di domandine ..

    1) qual'è il motivo per cui nel metodo 'prossimo', si valorizza il campo 'tmp', prendendo il valore di input 'n', e non si utilizza direttamente 'n', come avviene nel metodo 'elMul' con il campo 'a'

    2) se io volessi mettere il main in un file a parte, come dovrei gestire le due chiamate ai 2 metodi (calcolaPrimi/scriviPrimi), visto che se le lascio dove stanno (nel file a parte dopo l'istanza dell'oggetto) mi dà errore ?

    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ti mancano ancora i concetti di oggetto e di come si richiamano le varie robe (vista la domanda al numero 2).

    Il metodo è un'azione che compi su un oggetto. Puoi mettere il main in un'altra classe, instanzia un oggetto di tipo Eratostene e chiama su quello i metodi public.

    La domanda numero 1 dipende da chi scrive il codice, non ti so rispondere perché ha fatto così, probabile perché usare direttamente n poteva creare comportamenti anomali nell'algoritmo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    quindi ..
    ho modificato i 2 metodi richiamati dal main .. rendendoli 'public' (ho aggiunto anche il 'return' visto che evidentemente è obbligatorio)

    codice:
      public int calcolaPrimi()                                                
      {                                                                  
         int num=2;                                                      
         while (num<=MAX)                                                
           {                                                             
            elMul(num);                                                  
            num=prossimo(num);                                           
           };  
         return 1;                                                          
      }                                                                  
                                                                         
      public int scriviPrimi()                                                 
      {                                                                  
        System.out.println("I numeri primi fino a "+MAX+" sono:");       
         for (int i=0; i < MAX ; i++)                                    
           if (primi[i])                                                 
             System.out.print(numeri[i]+" ");  
        return 1;                          
      }
    main:

    codice:
    class Eratostene
    {
      public static void main(String[] args)
      { Eratostene e = new Eratostene(); 
        e.calcolaPrimi(); 
        e.scriviPrimi(); 
      } 
    }
    ma se sposto il main in altro file continua a dirmi:


    'cannot find symbol method calcolaPrimi() / scriviPrimi()'

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora il return ci vuole perché stai dicendo che i metodi hanno un valore di ritorno diverso da void. Se avessi messo void come valore di ritorno, il return non sarebbe stato obbligatorio.

    Seconda cosa, mi fai vedere le 2 classi che avresti creato?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    sono un idiota .. aveno due file, non avevo cambiato il nome della classe al momento di istanziare l'oggetto !
    ne approfitto per chiedere altre 2 cosette
    1)
    sempre nell'esempio indicato sopra ..
    perchè la proprietà 'MAX' viene valorizzata al momento della dichiarazione ? .. non dovrebbe essere fatto dentro al costruttore ?

    static int MAX=1000;

    tra l'altro perchè 'static' ?

    2)
    Nell'esempio che segue (con valore di ritorno), se io volessi trattare non degli interi (input e output) ma delle stringhe ..
    come dovrei fare ?

    Grazie mille

    codice:
    class CiaoMondo                                                            
    {                                                                          
      int inizia(int a)                                                        
      {                                                                        
        System.out.print ("Ciao mondo, sono il primo programma in Java ");     
        System.out.println ("con il dato in input: " + a);                     
        a += 1;                                                                
        return a;		                                                          
      }                                                                        
                                                                               
      public static void main(String[] args)                                   
      { CiaoMondo e = new CiaoMondo();                                         
      	int a = 33;                                                             
      	int b;                                                                  
       b = e.inizia(a);                                                        
       System.out.println ("Dato di ritorno: " + b);                           
      }                                                                        
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora non so dove finiscono i problemi di comprensione del codice e dove iniziano i problemi dovuti alla lettura di guida rapida anziché testo completo.

    codice:
    static int MAX = 100;
    stai semplicemente usando MAX come una costante, potresti inizializzarla dopo all'interno di un blocco statico, è buona norma però assegnare un valore a variabili statiche.

    Non sono nella testa del programmatore e non conosco il programma, dovresti chiedere a lui. Suppongo che voglia definire un valore valido per la classe e non per l'oggetto (ergo static).

    La risposta alla domanda due conferma quanto detto sopra: non hai chiare le basi non di java, ma della programmazione.
    Indipendentemente dal linguaggio (e da particolari situazioni) avrai sempre per i metodi una signature simile:

    modificatore valoreDiRitorno nomeMetodo(elencoParametri)

    dove

    modificatore è public, protected, private o anche non specificato
    valoreDiRitorno è il tipo che restituisce quel metodo, per cui int, float, String o anche tipi definiti da te

    il resto non lo commento.

    Ovviamente usa questo valore con logica: non puoi assegnare ad una variabile intera il valore di un metodo quando questo ha come tipo di ritorno String!!!

    Procurati un testo (anche in pdf) e leggiti bene i primi capitoli, ti ripeto questi quesiti derivano dal non avere chiare le basi della programmazione, non le basi di java. Quando poi leggi un esempio di solito i testi te li commentano, in modo da spiegare cosa hanno fatto e perché

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.