Jestem nowy w programowaniu obiektowym i nie rozumiem, jaki jest cel głównego.
Tak, czytam, że jest to „punkt wejścia” programu, ale nie rozumiem, co powinno być w głównym? A jakie są jego obowiązki?
Może się zdarzyć, że coś napisanego w main może być enkapsulowane w innym obiekcie, ale ile powinieneś użyć tego podejścia?
Oto moja pierwsza główna wersja, którą napisałem w Javie, jest bardzo prosta, ale może sprawić, że lepiej zrozumiesz moje wątpliwości. Mam abstrakcyjną klasę Animal, którą rozszerzają „Cat” i „Dog”. Użyłem main do stworzenia jakiegoś obiektu, a także jako „interfejsu” z użytkownikiem, w rzeczywistości, jak widać, użyłem instrukcji warunkowej, aby „zapytać użytkownika”, co chce zrobić.
Moje pytanie wynikało z faktu, że interfejs można zamknąć w innym obiekcie i nie przypisywać tej odpowiedzialności głównej.
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
funkcja nie jest koncepcją z OOP.Odpowiedzi:
Po pierwsze, twój przykład nie jest programem obiektowym. Jest to program proceduralny, który zdarza się przechowywać dane w obiektach, ponieważ jest to narzędzie, które Twój język (Java?) Udostępnia dla danych strukturalnych.
Prawdziwy program obiektowy składa się z obiektów, które współdziałają ze sobą - chodzi raczej o zachowanie niż dane (zdaję sobie sprawę, że jest to kontrowersyjne stwierdzenie, więc tutaj jest link, w którym można zobaczyć wiele definicji orientacji obiektowej od osób o większej liczbie referencji niż ja; zauważ, że zachowanie pojawia się w większości z nich).
W prawdziwym programie obiektowym, zgodnie z definicją, której używam, masz niezależne obiekty oddziałujące ze sobą. Rolą tej
main
funkcji jest tworzenie początkowych obiektów i łączenie ich ze sobą.Jako prosty przykład rozważ aplikację internetową zbudowaną na bazie danych. Ta aplikacja może być podzielona na obiekty na wiele sposobów, ale oto jeden z nich:
Networking
obiekt, który przyjmuje połączenia, analizuje żądanie HTTP i wysyła do odpowiedniegoController
obiektu, który współdziała zDatabase
obiektem i generuje odpowiedź (jeśli chcesz aby skojarzyć jeden lub więcejView
obiektów z każdym kontrolerem, możesz to zrobić). Możesz także dodaćThreadpool
obiekt, aby zapewnić osobne strumienie wykonania.Rolą
main
w tej aplikacji może być:Database
obiektController
obiekty i powiąż je zDatabase
obiektemNetwork
obiekt i powiąż z nim wszystkieController
obiekty.Network
obiekt uruchomiony (co może również obejmować utworzenieThreadpool
i podłączenie go doNetwork
).Te kroki konfiguracji mogą być wyraźnie określone w
main
lub mogą być obsługiwane przez inny obiekt. Na przykład w typowej aplikacji Springmain
funkcja ta tworzy kontekst aplikacji (pojedynczy obiekt). Powoduje to utworzenie i okablowanie wszystkich obiektów wymienionych w konfiguracji dla tego kontekstu aplikacji.źródło
main
metoda nie może nawet istnieć.Map
). Ale Java zapewnia tylko jeden sposób, aby to zrobić (w porównaniu z C ++, który odróżnia struktury i klasy). Zdefiniuj więc klasy bez zachowania, ponieważ dzięki temu Twój program będzie łatwiejszy do zrozumienia, ale zrozum, że to nie czyni programu „obiektowym”.Cóż, to zależy. Weź to do dwóch skrajności:
main
. To będzie dobrze się kompilować i działać. Ale dla człowieka kod nie będzie strawny.main
i wywołać ją,doWhatNeedsToBeDone
a następnie kontynuować tę procedurę w ten sam sposób. Teraz jesteś bardzo schludny,main
ale oczywiście nie rozumiesz, co trzeba zrobić.Tak więc prawda jest gdzieś pośrodku. Spróbuj utworzyć stronę
main
pasującą do jednej strony, aby ktoś mógł uzyskać najważniejsze instrukcje, które należy wykonać. Uzyskanie właściwej granicy jest po prostu kwestią doświadczenia.Powyższe jest ogólną zasadą i dotyczy OO, a także programowania funkcjonalnego.
źródło
Główna metoda statyczna istnieje jako przejście ze świata nieobiektywnego do świata zorientowanego obiektowo. Zostało to zrobione w ten sposób od co najmniej C ++ w latach 80-tych.
Metody statyczne są zasadniczo metodami nieobiektywnymi: mogą być metodami proceduralnymi; mogą to być metody funkcjonalne. Pojęcie metod statycznych jest zasadniczo ucieczką OOP od innych paradygmatów programowania.
Java, C # i C ++ używają statycznego main jako przejścia od tradycyjnego maina w stylu C do odpowiedniego języka programowania, z którego można teraz dowolnie korzystać z obiektów (lub nie).
Te języki mogły wymagać pierwotnego obiektu instancji zamiast statycznego main, ale zamiast tego wybrały statyczne podejście main. Stosując alternatywne podejście do instancji,
main
klasa byłaby podklasąthread
klasy, a środowisko wykonawcze języka wyczarowałoby początkową instancję obiektumain
klasy, a następnierun
wywołało metodę instancji, podobnie jak uruchamiane / tworzone są dodatkowe wątki.Ale historycznie zostało to zrobione w inny sposób: po części te języki są po prostu takie same, a po części dlatego, że wątki nie były w tamtych czasach priorytetem, więc stosowali prostsze podejście statyczne.
Ponadto statyczne podejście główne jest „prostsze”, ponieważ nie musisz używać podklasy, więc trywialne programy samouczków
hello world
są w pewnym sensie prostsze (jednak używają stosunkowo niewytłumaczalnegostatic
, co trudno jest komuś wyjaśnić, gdy jesteś próbując najpierw nauczyć OOP.)źródło
Do uruchomienia programu używana jest metoda Main ()
Odpowiedzialność - po uruchomieniu programu metoda Main () wywołuje inne metody uruchamiania programu.
To prosta odpowiedź, która pomaga mi zrozumieć, na czym polega metoda Main ().
źródło