Sta usando l'oggetto della classe principale meglio dell'utilizzo del metodo principale statico? [chiuso]

5

Ho notato almeno nei programmi java che le persone tendono a preferire iniziare i loro programmi creando e istanza della classe che contiene il metodo principale e attivando un metodo non statico al suo interno, in questo modo

    class MainClass {
        void start() {
            //start the program flow
        }
        public static void main(String[] args) {
            new MainClass().start();
        }
    }

Invece di avviare semplicemente il flusso del programma attraverso il metodo principale da un contesto statico, ad esempio

    class MainClass {
        public static void main(String[] args) {
            //start the program flow
        }
    }

Mi stavo chiedendo, perché la gente preferisce il precedente metodo in quanto quest'ultimo sembra più semplice, e c'è qualcosa che dovrebbe determinare quale devo usare?

    
posta Phoenix 13.08.2015 - 07:35
fonte

4 risposte

5

Entrambi gli approcci possono essere considerati soddisfacenti.

Ci sono diverse cause per la tua domanda.

L'approccio "Vengo da un altro linguaggio di programmazione"

Ricorda che alcuni sviluppatori hanno imparato altri linguaggi di programmazione Object Oriented prima di apprendere Java e mantengono alcuni stili di programmazione durante la programmazione di Java.

C ++ è un buon esempio. Un programmatore C ++ che utilizza classi e oggetti, deve utilizzare una funzione main , dove prima deve essere istanziato un oggetto indipendente.

Altri programmatori solo Java possono utilizzare l'approccio dei metodi "statici", progettato dai progettisti Java originali e visualizzato in diversi libri ed esercitazioni. Per quei programmatori, l'allocazione di un oggetto indipendente può essere vista non necessaria.

L'aproach "Usiamo una certa modularità"

L'approccio "oggetto indipendente" è anche usato come tecnica di modularità, come un modo per mantenere la logica di programmazione più semplice.

    
risposta data 13.08.2015 - 18:46
fonte
3

Il tuo primo esempio sembra descrivere qualcuno che percepisce public static void main(String[] args) come un semplice punto di ingresso, un punto di "punch-in" per il sistema operativo da chiamare e nient'altro. È un punto di vista perfettamente valido.

Negli ultimi anni come sviluppatore di Winforms, ho iniziato a utilizzare gli eventi del modulo come "pannello di permutazione" invece di posti per mettere la logica. Piuttosto che litterare la classe Form con la logica aziendale, dichiarerei un metodo come "Submit.OnClick" e rinvia immediatamente l'esecuzione di tale metodo a un altro metodo in un'altra classe. Ciò promuove il disaccoppiamento e la modularità; Posso concentrarmi esclusivamente sulla logica del modulo nella mia classe di moduli e sulla logica non formale nei metodi che sto chiamando altrove.

In questo particolare esempio che hai fornito, non sono sicuro che ti stia comprando tutto questo.

    
risposta data 13.08.2015 - 19:15
fonte
1

Dipende da ciò che la classe Main e ciò che il metodo start() dovrebbe rappresentare.

Ricorda che public static void main(String[]) alla fine è solo un gancio per la JVM per avviare l'applicazione con:

java -cp ... Main [args]

Potrebbe benissimo essere che Main sia una classe di utilità all'interno di una struttura / libreria più grande, che ha il proprio metodo main() in modo che possa essere avviato indipendentemente dal suo uso convenzionale. Oppure un metodo main() è stato semplicemente fornito per alcuni tipi di scopi di debug (scenario ipotetico), che può essere rimosso senza preavviso nelle versioni future. In altre parole, tutto ciò che viene fatto all'interno del metodo main() non influisce e non influisce sulle caratteristiche della classe Main .

In alternativa, forse stai esaminando troppe classi di esempio "introduzione alla programmazione orientata agli oggetti", in cui l'istanziazione della classe Main e chiamando il suo metodo start() ha lo scopo di preparare gli studenti su ciò che riguarda OOP .

Quindi come dovresti determinare cosa usare? (non una regola dura e veloce)

Se stai creando un'applicazione semplice senza bisogno di OOP, in modo tale che tutti i tuoi metodi siano effettivamente static e tu non dipenda più dallo "stato" (campi) di una classe, dovresti attenersi anche all'approccio più semplice. Altrimenti, o se stai cogliendo i concetti di OOP, allora dovresti farlo più in stile OOP di new Main().start() .

    
risposta data 14.08.2015 - 07:47
fonte
-2

La tua classe (sebbene sia la classe principale) non dovrebbe essere sempre eseguita direttamente da jvm. Potrebbero essere in futuro altre classi che devono avviare la tua applicazione o l'oggetto start () della tua classe. Quindi le persone usano il precedente metodo che si prende cura del futuro nella loro mente. Ora quale si dovrebbe usare dipende dalla classe e dall'applicazione utilizzata.

    
risposta data 14.08.2015 - 19:17
fonte

Leggi altre domande sui tag