Ich bin neu in der objektorientierten Programmierung und verstehe nicht, was der Hauptzweck ist.
Ja, ich habe gelesen, dass es der "Einstiegspunkt" des Programms ist, aber was ich nicht verstehe, ist, was in der Hauptsache sein sollte? Und was sind ihre Verantwortlichkeiten?
Es kann vorkommen, dass etwas, das in der Hauptsache geschrieben ist, in einem anderen Objekt gekapselt ist, aber wie oft sollten Sie diesen Ansatz verwenden?
Hier ist mein allererster Hauptteil, den ich in Java geschrieben habe. Es ist sehr einfach, aber es kann Sie dazu bringen, meine Zweifel besser zu verstehen. Ich habe eine abstrakte Klasse Tier, die um "Katze" und "Hund" erweitert wird. Ich habe die Hauptleitung verwendet, um ein Objekt zu erstellen und auch als "Schnittstelle" mit dem Benutzer. Wie Sie sehen, habe ich eine bedingte Anweisung verwendet, um den Benutzer zu "fragen", was er tun möchte.
Meine Frage ergab sich aus der Tatsache, dass die Schnittstelle in ein anderes Objekt eingekapselt werden konnte und diese Verantwortung nicht dem Hauptobjekt übertragen wurde.
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);
}
main
Funktion ist kein Konzept von OOP.Antworten:
Zunächst einmal ist Ihr Beispiel kein objektorientiertes Programm. Es ist ein prozedurales Programm, das Daten in Objekten speichert, da dies das Werkzeug ist, das Ihre Sprache (Java?) Für strukturierte Daten bereitstellt.
Ein echtes objektorientiertes Programm besteht aus Objekten, die miteinander interagieren - es geht eher um Verhalten als um Daten (mir ist klar, dass dies eine kontroverse Aussage ist. Hier ist also ein Link, über den Sie mehrere Definitionen der Objektorientierung von Personen mit mehr Anmeldeinformationen sehen können als ich; beachte, dass Verhalten in den meisten von ihnen auftritt).
In einem echten objektorientierten Programm haben Sie gemäß der von mir verwendeten Definition unabhängige Objekte, die miteinander interagieren. Die
main
Funktion besteht darin, die ursprünglichen Objekte zu erstellen und miteinander zu verbinden.Stellen Sie sich als einfaches Beispiel eine Webanwendung vor, die auf einer Datenbank basiert. Diese Anwendung kann auf viele Arten in Objekte unterteilt werden. Hier ist jedoch eines davon: Ein
Networking
Objekt, das Verbindungen akzeptiert, die HTTP-Anforderung analysiert und an ein geeignetesController
Objekt sendet, das mit einemDatabase
Objekt interagiert und die Antwort erzeugt (wenn Sie möchten)View
Wenn Sie jedem Controller ein oder mehrere Objekte zuordnen möchten, können Sie dies tun. Sie können auch einThreadpool
Objekt hinzufügen , um separate Ausführungsströme bereitzustellen.Die Rolle
main
in dieser Anwendung könnte sein:Database
ObjektController
Objekte und ordnen Sie sie demDatabase
Objekt zuNetwork
Objekt und ordnen Sie alleController
Objekte zu.Network
laufende Objekt (was auch das ErstellenThreadpool
und Verdrahten des Objekts mit dem umfassen kannNetwork
).Diese Einrichtungsschritte können explizit in angegeben
main
oder von einem anderen Objekt ausgeführt werden. Zum Beispiel in einer typischen Feder Anwendung, alles , was diemain
Funktion tut , ist der Anwendungskontext erstellen (ein einzelne Objekt). Dies löst die Erstellung und Verkabelung aller in der Konfiguration genannten Objekte für diesen Anwendungskontext aus.quelle
main
Methode nicht einmal existieren kann.Map
). Java bietet jedoch nur eine Möglichkeit, dies zu tun (im Vergleich zu C ++, bei dem zwischen Strukturen und Klassen unterschieden wird). Definieren Sie also Klassen ohne Verhalten, da dies das Verständnis Ihres Programms erleichtert. Beachten Sie jedoch, dass Ihr Programm dadurch nicht "objektorientiert" wird.Es hängt davon ab. Nehmen Sie es auf zwei Extreme:
main
. Das wird kompiliert und läuft gut. Aber für einen Menschen ist der Code nicht verdaulich.main
und rufen Sie sie aufdoWhatNeedsToBeDone
und fahren Sie schließlich auf die gleiche Weise mit dieser Routine fort. Jetzt haben Sie eine sehr ordentliche,main
aber natürlich bekommen Sie nicht, was getan werden muss.Die Wahrheit liegt also irgendwo dazwischen. Versuchen Sie, eine
main
Seite zu erstellen , die zu einer Seite passt, damit jemand die wichtigsten Anweisungen erhält, die ausgeführt werden müssen. Die richtige Grenze zu finden ist einfach eine Frage der Erfahrung.Das Obige ist eine allgemeine Regel und gilt sowohl für die OO- als auch für die funktionale Programmierung.
quelle
Die statische Hauptmethode existiert als Übergang von der nicht objektorientierten Welt zur objektorientierten Welt. Dies ist seit mindestens C ++ in den 80er Jahren so geschehen.
Statische Methoden sind im Wesentlichen nicht objektorientierte Methoden: Sie können prozedurale Methoden sein; Sie können funktionale Methoden sein. Der Begriff der statischen Methoden ist im Wesentlichen eine Flucht von OOP zu anderen Programmierparadigmen.
Java, C # und C ++ verwenden alle die statische Hauptleitung als Übergang von der traditionellen Hauptleitung im C-Stil in ihre jeweilige Programmiersprache, aus der Sie nun auswählen können, ob Sie Objekte nach Belieben verwenden möchten (oder nicht).
Diese Sprachen hätten ein primordiales Instanzobjekt anstelle eines statischen Hauptobjekts erfordern können, aber stattdessen den statischen Hauptansatz gewählt. Bei Verwendung einer Instanzansatzalternative
main
wäre die Klasse eine Unterklasse derthread
Klasse, und die Sprachlaufzeit würde eine anfängliche Objektinstanz dermain
Klasse beschwören und dann ihrerun
Instanzmethode aufrufen , ähnlich wie zusätzliche Threads gestartet / erstellt werden.Aber historisch gesehen wurde es stattdessen anders gemacht: Zum Teil folgen diese Sprachen nur dem Beispiel, und zum Teil, weil das Threading damals keine Priorität hatte und sie den einfacheren statischen Ansatz verwendeten.
Außerdem ist der statische Hauptansatz "einfacher", da Sie keine Unterklassen verwenden müssen, sodass triviale Lernprogramme wie "
hello world
in gewissem Sinne einfacher" sind (sie verwenden jedoch das relativ Unerklärlichestatic
, was für jemanden schwer zu erklären ist, wenn Sie es sind versuche zuerst OOP zu unterrichten.)quelle
Die Main () -Methode wird zum Ausführen des Programms verwendet
Verantwortung - Sobald Sie mit dem Ausführen Ihres Programms beginnen, ruft die Main () -Methode andere Methoden auf, um das Ausführen Ihres Programms zu starten.
Dies ist eine einfache Antwort, die mir hilft, die Verantwortung der Main () -Methode zu verstehen.
quelle