Wspolprac klas i obiektow

1

Witam.
Jestem calkiem poczatkujacy w Javie i mam milion pytan, z ktorymi poradze sobie jakos sam. Ale jest jedna rzecz, ktora mi nie daje spac, i mimo, ze przeszukalem kilka for dyskusyjnych, mimo, ze przewalilem stos ksiazek w Pdf i papierowych, nigdzie nie moge znalezc odpowiedzi na pytanie, ktore Wam moze sie wydac wrecz smieszne. Otoz jak wiadomo, w Javie kazda klasa musi sie znalezc w osobnym pliku. I tu moje pytanie. Jak pozniej w glownym kodzie programu odwolywac sie do tych innych plikow z klasami? Czy trzeba je jakos includowac? (Oczywiscie to "includowac" to tylko przenosnia, ktora zapozyczylem z jezyka C, ktory przynajmniej w podstawach znam:)
Zalozmy, ze mam dwa pliki:

main.class i klasa.class

Czy obie klasy musza zawierac "public static void main (String args[])" czy tylko klasa zawierajaca glowny kod programu? Przegladalem rozne przykladowe kody zrodlowe i wyglada to jak totalna wolna amerykanka. Czasem ta metoda jest tylko w jednym pliku, czasem w kilku. I druga sprawa. Jesli w klasie main.class chcial bym sie odwolac do zmiennych i metod zawartych w klasie klasa.class... to czy w main musze jakąś komendą dołaczyc plik klasa.class?

1

po pierwsze w pliku moze znajdowac sie wiele klas, tylko jedna moze byc publiczna
po drugie jesli plik nalezy do tego samego pakietu (package pl.com.mojpakiet.mojprojekt) to mozna sie do nich normalnie odwolywac (new MojaKlasa2()), natomiast jesli sa w innych pakietach (np. biblioteki jar) to import nazwa pakietu.
Kompilujac pakiet podajesz javac -cp .;jakislib.jar MojaKlasa1.java MojaKlasa2.java (lub po prostu sciagnij eclipse'a ;) )
pozdrawiam

1

Aaaa.. A ja sie zastanawialem, po co sa te pakiety:) Pierwsze kroki stawiam po troche w Netbeans, i po troche w Eclipse. Nie korzystajac z tej calej podpowiadajacej otoczki, zeby mnie to nie oglupilo :) Zebym wiedzial, co robie:) Oczywiscie z czasem sie zdecyduje na jeden program, ale dopiero jak bede widzial, ktory mi sie bardziej podoba. I one oba wlasnie kaza tworzyc pakiety, a ja nie wiedzialem po co:) I w ten sposob odpowiedziales na inne moje pytanko :) Czyli pakiet jest jak by jedna zamknieta caloscia - jednym programem, w obrebie ktorego mozna sie tak poruszac miedzy klasami, jak po jednym pliku. Dzieki za wyjasnienia.
Wlasnie wszedzie bylo wyjasnione, jak sie odwolywac do klas, ale nigdzie nie znalazlem informacji, jak sie odwolywac jesli te klasy sa na zewnatrz :) A z drugiej strony te tajemnicze importy tez nie dawaly mi spokoju. Raz byly importowane pakiety, a innym razem byly odwolania do klas, ale bez importow. Nie wiedzialem, dlaczego. Teraz juz wiem :)
Dzieki jeszcze raz za oswiecenie :) Jednym postem dales mi wiecej wiedzy, niz wszystko, co dotychczas przeczytalem :)

1

tylko nie zapominaj, ze w projekcie (solution) mozesz miec wiele pakietow - a kazdy powinien miec jakis swoj zakres odpowiedzialnosci oraz wystawiac na swiat (public) niezbedne klasy lecz ukrywac implementacje - tak jak klasy
np. mozesz miec pakiet server ktory bedzie pelnil role serwera, client - klienta i database z ktorego beda korzystaly oba i ktory bedzie implementowal logke polaczen z baza danych.

pozdrawiam

0

To na razie dla nie zbyt skomplikowane :) Najpierw podstawy, a pozniej bardziej zawansowane rzeczy. Z moja wiedza (a raczej niewiedza) i tak nie potrafie na razie napisac czegos, co by moglo pelnic role serwera:) Daleka droga przede mna...
Dzieki

1

To może i ja się wtrącę :)
@Ajgor, zanim zaczniesz pisać coś w komunikacji sieciowej pobaw się wątkami.

Co do pakietów to jeszcze zwrócę uwagę na to że pozwalają na logiczne podzielenie aplikacji. W ten prosty sposób można na przykładzie wspomnianego serwera zorganizować sobie cały projekt:
moj.projekt.interfejsyZdalne
moj.projekt.serwer
moj.projekt.klient
moj.projekt.test
Masz teraz 4 paczki, a każda z nich zawiera inną część serwisu. Możesz je więc oddzielnie dystrybuować.

0

Koziołku ja zanim zaczne pisac aplikacje sieciowe (a na taką mam pomysła:) , NAJPIERW musze sie nauczyc podstaw. Nie rzucam sie na slonce z motyką :)
Liznalem troche C/C++ (na tyle, zeby popelnic jakas mala aplikacje na swoje domowe potrzeby - na przyklad menu na plyty ze zdjeciami z imprez z pracy:), wiec czytajac ksiazke stwierdzam, ze wiekszosc z tych rzeczy jest dla mnie zrozumiala.
Tu pytalem o wspolprace miedzy klasami umieszczonymi w roznych plikach, bo mi to autentycznie nie dawalo spokoju. A na siec jeszcze sie nie rzucam :) No moze jakis maly aplecik do upiekszenia mojej strony http://toneport.prophp.org popelnie z pomocą jakiegos czasopisma. Ale to i tak bedzie tylko jako wprawka:)

A na marginesie pozwol, ze zapytam.. Jestes ten sam Koziolek, co na forum PCFormatu?:)

0

@Ajgor, akurat nie ten :)
a jeszcze mi się przypomniało w kwestii pakietów. Istotną rzeczą dotyczącą pakietów i klas są modyfikatory dostępu pól i metod obiektów. Pola protected i są widoczne w pakiecie i klasach rozszerzających, pola private w klasie, a pola public wszędzie. Ciekawostka jest to, że brak modyfikatora powoduje iż pole/metoda są widoczne w pakiecie, ale nie są widoczne w klasach rozszerzających.

Źródło:
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.