Funkcja main() w Java

0

Witam,
Jest to mój pierwszy post. Zaczynam przygodę z Java, kończę własnie kurs on-line w zasadzie od postaw, choć mniej więcej zasadę działania OOP znam jeszcze za czasów szkoły. Pisze ten post ponieważ nurtuje mnie pytanie:

Kompilator Javy do uruchomienia programu potrzebuje informacji która klasa zawiera główną metodę main() w której jest całe "ciało" programu. Na kursie który jak już wspominałem właśnie przechodzę, uczą, że to właśnie w głównej metodzie main() tworzy się wszystkie obiekty klas z projektu i generalnie cały program właśnie jest tam, linijka po linijce. Jest to dla mnie dość logiczne i przejrzyste gdy cały program kończy się na kilku klasach i powiedzmy około 10 obiektach. Gdy jakaś aplikacja ma powiedzmy tych obiektów tysiące i różne korelacje pomiędzy nimi to trudno jest mi sobie to wyobrazić, że wszystko dzieje się linijka po linijce w main().?

Z góry bardzo dziękuje za "łopatologiczne" wytłumaczenie jak to się ma w praktyce przy jakiś dużych projektach?

Pozdrawiam, Dawid

1

Main zwykle ma max kilka linijek w rzeczywistości. Tworzysz tam tylko jakieś toplevel domain objects albo w ogóle tylko odpalasz jakieś IoC które stawia całą aplikacje. Gdybyś miał jakąś grę to main byłby np. taki:

main(){
    Game game = new Game();
    game.start();
}

i tyle ;]

0

Bardzo Ci dziękuję za szybką odpowiedź, ale niestety nie ukrywam że dużo mi ona nie wyjaśniła :-) jak już pisałem dopiero zaczynam przygodę z Java i w sumie większość Twojego postu jest dla mnie czarna magia. :) Dla przykładu, tworzymy obiekty klasy bohater, więc Bohater Batman = new Bohater() , potem np. Bohater Spiderman = new Bohater() , i tak dalej jakis 5 obiektów klasy Bohater. I dla przykładu klasa Bohater ma jakąś funkcje atakuj() , więc np wywołuje ta funkcję na obiektach Batman i potem Spiderman... No i w sumie w głupim programie klasa Main() ma już z 10 linijek. Dobrze rozumiem idee funkcji Main()?

1

Nie, bo właśnie wpychasz logikę jakiejś gry do main a nie tam jej miejsce! Powinieneś mieć klasę Game która na podstawie jakiejś konfiguracji tworzy listę bohaterów a potem rozpoczyna jakąś (nieskończoną?) petlę w której zachodzi interakcja między bohaterami z listy.

0

Czyli obiekty można tworzyć również w innych klasach a później można z nich "korzystać" w jeszcze innych klasach? Na kursie uczą że "klasa jest to przepis na obiekt" więc obieram to tak , że wszystkie obiekty muszą być w jednej głównej klasie. I czy to nie jest tak skoro można logikę wrzucic do klasy Game to czy nie jest to tylko przeklejanie zawartości funkcji Main do innej klasy a i tak w tej klasie Game będzie bałagan ..

Bardzo proszę o wyrozumiałość, bo zdaje sobie sprawę że dla doświadczonego programisty moje pytania są bez sensu.

1

Obiekty to nawet należy tworzyć w różnych miejcach! To nie jest "przeklejanie" bo nie pakujesz tego znów na pałe w jedno miejsce, tylko dzielisz na małe kawałki i wkładasz tam gdzie powinno być. W efekcie to batman wie jak przywołać batmobile a spiderman jak przykleić sie do ściany, a nie jakaś metoda main().

1

W klasie głównej zazwyczaj tworzysz np. w przypadku gry - obiekt, który operuje całą jej logiką. Po to żeby właśnie uruchomić całą tą logikę do działania.
Niech np. game.java zawiera w sobie obiekty postaci, które są trzymane w innych klasach opisujących te postaci. Każda postać niech będzie osobną klasą opisującą bohatera, który ma własności takie jak - damaga, armor, health, mana, life steal etc.
Teraz żeby te postaci były w grze musisz gdzieś je wywołać. Robisz to w klasie game.java (zakładając od początku, że to ona spina wszystkie elementy gry). Później właśnie w main tworzysz obiekt tej klasy + odpalasz to np. metodą start() i tyle.

*interfejsy, dziedziczenie

0

Dziękuję, mniej więcej wydaje mi się że już wiem jak wygląda zasada działania.
Mam do Was jeszcze w związku z tym tematem pytanie. Czy możecie polecić gdzie można znaleźć jakieś przykładowe zadania jakie można sobie zrobić w formie ćwiczeń. Najlepiej takie gdzie mamy jakieś zadanie i do niego rozwiązanie. Bo jak wiadomo praktyka jest najlepszym sposobem do nauki.

0

Chodzi mi o bardziej skomplikowane zadania, gdzie można poćwiczyć tworzenie obiektów, klass itd. Zadaniu typu sortowanie etc. można znaleźć na spoj.com . Tylko tak jak pisałem, fajnie jak by była treść zadania i rozwiązanie z ewentualnym objaśnieniem. Może jakaś książkę polecicie?

0

Ja od siebie mogę polecić tę pozycję
http://helion.pl/ksiazki/java-kompendium-programisty-wydanie-ix-herbert-schildt,javkp9.htm
Żałuję, że nie zakupiłem tej tylko jej 'cieńszą' wersję. Ale polecam najpierw iść do analogowej księgarni i przejrzeć co w książce zawarte.

Drugą pozycją, którą mogę polecić (po pierwszej):
http://helion.pl/ksiazki/java-zaawansowane-zastosowania-noel-kalicharan,javazz.htm
Jedna z lepszych pozycji na rynku o ile nie najlepsza. Warunkiem jest ogarnięcie podstaw javy oczywiście. Teoria do każdego rozdziału daje solidne podstawy wejścia w dany temat.

http://freesourcecode.net/javaprojects - sporo przykładowego kodu aczkolwiek bez objaśniania. Można znaleźć ciekawe przykłady ale nie wiem jak z jakością tego kodu :-D

W sumie tyle bo dalej musisz obrać kierunek tego co chcesz pisać i dobierać odpowiednio pozycje pod zainteresowania. Nie można wiecznie trzaskać książek z podstawami języka :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1