Quali sono le responsabilità del principale nella programmazione orientata agli oggetti?

10

Sono nuovo nella programmazione orientata agli oggetti e non capisco quale sia lo scopo principale.

Sì, ho letto che è il "punto di ingresso" del programma, ma quello che non capisco è ciò che dovrebbe essere nel principale? E quali sono le sue responsabilità?

Può succedere che qualcosa scritto nel main possa essere incapsulato in un altro oggetto, ma quanto dovresti usare questo approccio?

Ecco il mio primissimo principio che ho scritto in Java, è molto semplice ma potrebbe farti capire meglio il mio dubbio. Ho una classe astratta Animal che è estesa da "Cat" e "Dog". Ho usato il main per creare qualche oggetto e anche come "interfaccia" con l'utente, anzi come puoi vedere ho usato alcune istruzioni condizionali per "chiedere all'utente" cosa vuole fare.

La mia domanda è nata dal fatto che l'interfaccia potrebbe essere incapsulata in un altro oggetto e non dare tale responsabilità al principale.

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.println("What type of animal do you want to create? \n dog cat");
    String type = input.nextLine();
    if ( Objects.equals(type, "dog")){
        System.out.println("Enter the animal's age: ");
        int age = input.nextInt(); // Scans the next token of the input as an int.
        System.out.println("Enter the animal's name: ");
        String name = input.next();
        Dog first = new Dog(name, age);
    }
    else if ( Objects.equals(type, "cat")) {
        System.out.println("Enter the animal's age: ");
        int age = input.nextInt(); // Scans the next token of the input as an int.
        System.out.println("Enter the animal's name: ");
        String name = input.next();
        Cat first = new Cat(name, age);
    }

    else{
        System.out.println("Error: the specified type does not exist.");
    }
    System.out.println("The number of animals is:" + numberOfAnimals);
}
    
posta Elia 13.11.2016 - 12:51
fonte

4 risposte

10

Prima di tutto, il tuo esempio non è un programma orientato agli oggetti. È un programma procedurale che accade per memorizzare i dati negli oggetti, perché è lo strumento che il tuo linguaggio (Java?) Fornisce per i dati strutturati.

Un vero programma orientato agli oggetti consiste di oggetti che interagiscono tra loro - si tratta di comportamento piuttosto che di dati (mi rendo conto che è una dichiarazione controversa, quindi < a href="http://wiki.c2.com/?DefinitionsForOo"> ecco un link in cui è possibile visualizzare più definizioni di orientamento agli oggetti da persone con più credenziali rispetto a me; notare che il comportamento appare nella maggior parte di loro).

In un vero programma orientato agli oggetti, secondo la definizione che uso, si hanno oggetti indipendenti che interagiscono tra loro. Il ruolo della funzione main è creare gli oggetti iniziali e collegarli tra loro.

Come semplice esempio, considera un'applicazione web costruita su un database. Questa applicazione può essere suddivisa in oggetti in molti modi, ma ecco uno di questi: un oggetto Networking che accetta connessioni, analizza la richiesta HTTP e invia un oggetto Controller appropriato, che interagisce con un oggetto Database e produce la risposta (se desideri associare uno o più oggetti View con ciascun controller, sentiti libero di farlo). Puoi anche aggiungere un oggetto Threadpool per fornire flussi di esecuzione separati.

Il ruolo di main in questa applicazione potrebbe essere:

  1. Crea l'oggetto Database
  2. Crea tutti gli oggetti Controller e associali all'oggetto Database
  3. Crea l'oggetto Network e associa tutti gli oggetti Controller con esso.
  4. Avvia l'oggetto Network in esecuzione (che potrebbe anche comportare la creazione di Threadpool e il suo cablaggio in Network ).

Questi passaggi di configurazione potrebbero essere specificati esplicitamente in main , oppure potrebbero essere gestiti da qualche altro oggetto. Ad esempio, in una tipica applicazione Spring, tutto ciò che fa la funzione main è creare il contesto dell'applicazione (un singolo oggetto). Questo innesca la creazione e il cablaggio di tutti gli oggetti menzionati nella configurazione per quel contesto applicativo.

    
risposta data 13.11.2016 - 14:01
fonte
2

Bene, dipende. Portalo a due estremi:

  1. Inserisci tutto il codice riga per riga in main . Questo si compilerà e funzionerà bene. Ma per un essere umano, il codice non sarà digeribile.
  2. Basta posizionare una singola funzione in main e chiamarla doWhatNeedsToBeDone e alla fine continuare in questa routine allo stesso modo. Ora hai un main molto pulito, ma ovviamente non ottieni ciò che deve essere fatto.

Quindi, la verità è da qualche parte nel mezzo. Prova a creare un main che si adatti a una pagina, in modo che qualcuno possa ottenere le istruzioni principali da eseguire. Ottenere il confine giusto è semplicemente una questione di esperienza.

Quanto sopra è una regola generale e si applica a OO e alla programmazione funzionale.

    
risposta data 13.11.2016 - 14:05
fonte
1

Il metodo statico principale esiste come transizione dal mondo non orientato agli oggetti al mondo orientato agli oggetti. È stato fatto in questo modo almeno dal C ++ negli anni '80.

I metodi statici sono essenzialmente metodi non orientati agli oggetti: possono essere metodi procedurali; possono essere metodi funzionali. La nozione di metodi statici è essenzialmente una fuga di OOP verso altri paradigmi di programmazione.

Java, C # e C ++ usano tutti il main static come una transizione dal tradizionale stile C principale nel loro rispettivo linguaggio di programmazione, dal quale ora puoi scegliere di usare gli oggetti (o meno) a piacimento.

Queste lingue avrebbero potuto richiedere un oggetto istanza primordiale invece di una principale statica, ma invece hanno scelto l'approccio principale statico. Usando un'alternativa di approccio all'istanza, la classe main sarebbe una sottoclasse della classe thread , e il runtime della lingua potrebbe evocare un'istanza dell'oggetto iniziale della classe main e quindi richiamare il suo metodo di istanza run , molto più del modo thread aggiuntivi vengono lanciati / creati.

Tuttavia, storicamente, invece, è stato fatto in un altro modo: in parte, questi linguaggi si stanno solo adeguando, e in parte, perché il threading non era prioritario in quei giorni, quindi hanno usato l'approccio statico più semplice.

Inoltre, l'approccio statico principale è "più semplice" in quanto non devi usare la sottoclasse, quindi programmi tutorial banali come hello world sono più semplici in un certo senso (tuttavia usano il relativamente inesplicabile static , che è difficile da spiegare a qualcuno quando stai cercando di insegnare prima OOP.)

    
risposta data 13.11.2016 - 17:53
fonte
-1

Il metodo Main () è usato per eseguire il programma

Responsabilità: una volta avviato il programma, il metodo Main () chiama altri metodi per avviare l'esecuzione del programma.

Questa è una risposta semplice che mi aiuta a capire qual è la responsabilità del metodo Main ().

    
risposta data 13.11.2016 - 17:22
fonte