Funkcja main() w Java

Funkcja main() w Java
D7
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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:

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

i tyle ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
EP
Uwielbiam takie estetyczne i schludne mainy, promieniujące elegancją i będące nawiązaniem do dwudziestowiecznego kubizmu w stylu francuskim, w jakimkolwiek by to nie było języku.
D7
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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()?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
D7
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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().


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Hispano-Suiza
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
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


"Trolling is a art"
D7
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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.

Hispano-Suiza
Jakiego typu te zadania? Poziom? Zadania w stylu dwie tablice, scalić i posortować czy napisz program robiący x?
D7
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?
D7
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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?

Hispano-Suiza
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
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 :-)


"Trolling is a art"
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)