Il metodo principale dovrebbe essere costituito solo da creazioni di oggetti e chiamate di metodi?

10

Un mio amico mi ha detto che, la procedura migliore è che il metodo contenente classe main deve essere denominato Main e contiene solo il metodo main . Anche il metodo main dovrebbe solo analizzare gli input, creare altri oggetti e chiamare altri metodi. Il metodo Main e main non dovrebbero fare altro. Fondamentalmente quello che sta dicendo che la classe che contiene il metodo main dovrebbe essere come:

public class Main
{
    public static void main(String[] args)
    {
        //parse inputs
        //create other objects
        //call methods
    }
}

È la migliore pratica?

    
posta user 26.03.2012 - 17:31
fonte

3 risposte

11

Il punto che sta facendo il tuo amico è che un'applicazione dovrebbe semplicemente essere riavviata dal metodo principale e nient'altro. Avendo il metodo principale nella propria classe, si sta semplicemente rinforzando quel fatto mantenendolo indipendente da qualsiasi logica applicativa. Il ruolo del metodo principale sarebbe quello di analizzare tutti gli input e inizializzare l'applicazione con quelli, e possibilmente altri, input.

public static void main(String[] args){
    new Foo().start(args[0]);
}

L'idea è che non hai bisogno del metodo principale per inizializzare Foo . Ciò ti consente di inizializzare e avviare facilmente Foo in un altro contesto, potenzialmente con semantica diversa.

public Foo initSomewhereElse(String arg){
    Foo f = new Foo();
    f.start(arg);
    return f;
}
    
risposta data 26.03.2012 - 17:55
fonte
6

Il metodo main () è un ritorno n ugly alla programmazione procedurale, fornendo il punto di ingresso nell'applicazione. I tentativi sono fatti in vari linguaggi di programmazione per incapsularlo, ma la sua stessa natura lo rende difficile (deve essere pubblico e statico, ma non dovrebbe MAI essere chiamato da qualcos'altro nel programma, che è altamente contraddittorio). WPF è riuscito (nascondendo main () da te nelle profondità del progetto applicativo WPF e fornendo "hook" configurabili per l'elaborazione personalizzata), così come Java (in modo simile per le app Android), ma WinForms e molti altri tipi di le app ti fanno ancora gestire main ().

Quindi, la maggior parte degli esperti afferma che il LOC della funzione main () dovrebbe essere il più basso possibile. C'è un approccio (che penso sia leggermente eccessivo) in cui la funzione main () ha una riga:

public class Program
{
   private Program(string[] args)
   {
      //parse args and perform basic program setup
   }

   //Reduce the ugliness to the absolute minimum
   public static void main(string[] args)
   {
      new Program(args).Run();  
   }

   private void Run()
   {
      //kick off the driving O-O code for the app; i.e. Application.Run()
   }    
}

Questo è un po 'troppo, ma sono d'accordo con il principio di base; main () dovrebbe fare il meno possibile per portare la tua applicazione orientata agli oggetti e guidata dagli eventi in uno stato "pronto".

    
risposta data 26.03.2012 - 23:13
fonte
1

Nelle lingue che supportano le funzioni main è solo una funzione regolare e quindi non c'è nient'altro che puoi fare con esso a parte quello che hai detto. E poi ci sono linguaggi idioti che fossa funziona in favore di avere tutto come un oggetto, il che significa ogni volta che vuoi una funzione che devi avvolgere in una classe non necessaria .

Bene, basta vagabondare. Il punto che sto cercando di fare è che Main non sia realmente una classe, ma una funzione e quindi non dovresti fare altro che analizzare gli input, creare altri oggetti e chiamare altri metodi perché è tutto ciò che una funzione può fare.

    
risposta data 26.03.2012 - 17:47
fonte

Leggi altre domande sui tag