Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Wstęp i podstawowe terminy

Niestety ciężko będzie się nam uczyć jeśli nie będziemy wiedzieli o czym właściwie mowa. Postaram się wam tutaj przedstawić w skrócie najważniejsze terminy, których będziemy potrzebowali od początku nauki. Postaram się także znaleźć obrazowe przykłady, aby sobie to lepiej wyobrazić. Jeśli wszystkiego w 100% nie zrozumiecie to się nie martwcie, po kilku lekcjach na pewno zapamiętacie.

Klasa to fundament Javy. To dzięki nim jest ona w pełni obiektowa i przy tym tak wygodna. Jeśli ktoś wcześniej programował to być może termin ten jest mu już znany. Najprościej mówiąc klasa to taka przestrzeń, w której umieszczamy inne elementy, przechowujemy informacje i je przetwarzamy. Obrazowym przykładem może być czteroosobowa rodzina jadąca samochodem. Samochód to klasa, natomiast rodzina to jej elementy, powiemy o nich obiekty.

class Klasa{
tutaj jakieś elementy
}

Obiekt jest natomiast reprezentacją klasy i jej nośnikiem. Jeżeli mówimy o czymś, że jest obiektem w Javie, to tak naprawdę wyobrażamy sobie całą klasę i wszystko to co się w niej znajduje. Poprzez obiekt możemy odwoływać się do zmiennych, metod i innych elementów w niej zawartych. Gdybym zaczynał programować to wyobraziłbym to sobie jako encyklopedię. Jest to przede wszystkim książka, ale wiemy, że zawiera hasła, do których mamy bezpośredni dostęp i możemy je przeczytać.

Klasa obiekt = new Klasa();

Powyższy przykład to obiekt wcześniej napisanej klasy Klasa.

Metoda to dla kogoś kto już wcześniej programował inaczej funkcja. W niej dokonywane są na przykład obliczenia, lub inne operacje (właściwie komputer to głupia maszyna potrafiąca tylko dodawać zera i jedynki). Metody mogą nie zwracać nic, ale równie dobrze dać w wyniku typ prosty, lub zwrócić obiekt. Niektóre mogą przyjmować także parametry, inne działać tylko na rzecz obiektu, który je wywołuje.

class Klasa{
  void metoda1(){...} // to metoda nie zwracająca nic
  int metoda2(){ return 1; }  // ta metoda zwraca w wyniku liczbę 1
  Klasa metoda3(){ return new Klasa(); }  // ta metoda zwraca obiekt klasy Klasa
  void metoda4(int parametr){ ... } // funkcja przyjmująca jeden argument typu int

<- Poprzednia LekcjaNastępna Lekcja ->

Komentarze

Wojtek

Witam, szczerze mówiac nie do końca tutaj wszystko zrozumiałem. Ale bardzo dobrze wszystko opisujesz :D

Andrzej

Trzeci listing... Deklarujesz void a potem coś zwracasz. To się nie skompiluje.

Slawek

ups, faktycznie poleciałem z automatu, dzięki.

Lothid

Link do następnej lekcji to link do rozwiązania 1.1, którego polecenia swoją drogą nie widziałem :)

Wiesiek

Witam.
Rzeczywiście przy nauce programowania obiektowego trudno na początku załapać te podstawowe pojęcia. Mi pomogło porównanie takie:
- Klasa - to przepis na wykonanie czegoś, określony projekt np. jak zbudować samochód, łącznie z instrukcją obsługi (czyli tym co można z samochodem zrobić)
- Obiekt - to konkretny samochód zbudowany zgodnie z projektem (takich samochodów może być wiele)
- Metoda - to czynność którą można zrobić na obiekcie, (w przypadku samochodu, np. włączenie silnika, zmiana biegu, tankowanie, itd.) Czynności są opisane w Klasie, ale wykonujemy je na konkretnym obiekcie

ela

dobrze to wyjaśniłeś ;-) Twoje tłumaczenie zrozumiałam lepiej.

bartosh

Wreszcie to skumałem. Po C jakoś nie moglem tego pojąć. Dzięki!

Janosch

Dzięki za Twoje porównanie! Teraz wszystko się stało jasne :)

Tomek

Bardzo fajny kurs.
Bez mała to "prawie" C#
Super

Missqu

Poprawka tomek to C# zerżnął od Javy :)

Zahary

tylko, że java została napisana w c...

absu

rozmowa jest o javie i c# a nie C

Mariusz

Moment? Jak można zrobić tak okropne porównanie z tą rodziną w samochodzie?! Przecież to się nijak ma do pojęcia klasy, jej składowych i obiektów i już na samym początku może początkującemu mocno utrudnić zrozumienie tych podstaw.

Autorze, bardzo, naprawdę bardzo mocno Cię proszę - zrób porządną walidację tego kursu i zadbaj o to, żeby był rzetelny. Masz ładną domenę, obszerny kurs i strona wygląda przejrzyście i profesjonalnie. Wszystko to sprawia, że jakbym się uczył programowania, to Twój kurs traktowałbym jako, powiedzmy, wyrocznię. Nie rób krzywdy tym, którzy chcą się od Ciebie czegoś nauczyć :)

Slawek

Jak tak teraz na to patrzę to faktycznie kiepski ten przykład :D Chciałem wtedy oddać coś w stylu samochód jest kompozycją obiektów osoba, pomiędzy osobami zachodzi dziedziczenie, ale na początek to zbyt wiele chyba. Chętnie podmienię na przykład, który byś zaproponował.
Walidacja kursu cały czas następuje dzięki uważnym osobom, które w komentarzach wskazują błędy, także zachęcam do tego każdego :)

Liz

Klasa: samochód. Obiekty tej klasy: np. Jeep, Maluch, itp...
Osobami można nazwać chyba co najwyżej pola klasy samochód. Albo obiekty, ale jakiejś innej klasy, ale przecież nie samochodu...
Podsumowując - korzystając z okazji, dziękuję za ten kurs :) Od lat nie używałam Javy, a ta stronka jest świetna, żeby sobie ją na szybko przypomnieć :)

Dr Plama

Wydaje mi się, że "jeep" czy "maluch" to także klasy, tylko podrzędne wobec klasy "samochód", bo marka samochodu obejmuje miliony konkretnych egzemplarzy, czyli obiektów. Obiektem klasy "maluch" będzie dopiero "ten tutaj żółty maluch, co go dostałem od szwagra".

b0rek

Chłopie, popraw to bo definicja klasy to totalna bzdura. Ten opis bardziej pasuje do jakiegoś kontenera, a nie do klasy. Koleżanka Liz napisała Ci czytelny opis.
Z definicją klasy też nie lepiej. Brak pojęcia instancji klasy, czyli właśnie obiektu. Dla początkujących to morderstwo, nie masz szans by zrozumieli obiektowość na takich przykładach, a tylko im się zamiesza.

calavior

Ja też jakoś inaczej bym zobrazował definicję klas i obiektów... Z tego co ja zrozumiałem ucząc się programować to zrobił bym to tak: (uwaga, przedstawiam przykład :P ) jako klasę możemy podać samochód. Ma on tam jakieś swoje parametry (np. przebieg, kolor, wiek (zmienne) oraz jakieś czynności, które może wykonać (np. jedź, włącz silnik, hamuj (funkcje)) natomiast obiekty są to już konkretni reprezentanci danej klasy. Możemy utworzyć konkretny samochód np. fordMustang, który będzie posiadał wszystkie parametry i funkcje jakie zostały mu udostępnione przez jego klasę. Będzie można odczytać lub przypisać mu np. przebieg czy kolor a także kazać wykonać jakieś czynności np. włączyć silnik czy jechać :) Jeśli się mylę to nie bijcie :P

ela

To ja wyjaśnię inaczej, poprawcie mnie, jeśli źle to zrozumiałam (zmieniłam samochód na inny przedmiot)
Klasa - to jak wytyczne inżynierów w fabryce , które otrzymali od klienta, materiały jakimi dysponują.
Obiekt - to np. pralka Polar model nr 123
Metoda -to pranie w tej pralce, wsypywanie do niej proszku,podłączanie do źródła wody, prądu itd.
Jednym słowem - obiekt funkcjonuje w obrębie klasy i możemy nim manipulować za pomocą metod, zgodnych z założeniami klasy.

maciupka

Mimo ,że wszyscy nażekaja na formę to każdy zrozumiał (świadczy o tym własna interpretacja ;p w komentarzach) jak dla mnie kurs jest bomba! Jasno, klarownie, same konrety ale ludzkim językiem. Nawet laik to ogarnie :D

SeCCendo

Zgadzam się jak najbardziej z maciupką. Kurs jest bardzo zrozumiały. Dzięki niemu zrozumiałem czy są te nieszczęsne klasy. Mam podręcznik do Javy ale jest on napisany tak, że osoba początkująca nie mogłaby się połapać. Na szczęście wcześniej uczyłem się C++ więc jakiegoś problemu nie mam ale mimo wszystko nie wiedziałem jeszcze czym są te klasy, a ten kurs mi to wytłumaczył. Dzięki.
(Napisałem to jakbym się dławił. No nic.)

kRZych

Przyjemniej by było gdyby przykładami np. klasy nie była "Klasa" czy metody "metoda".
Porównywanie klasy i obiektów do samochodzika i rodzinki mogło by być też wykorzystane w tych przykładach. Łatwiej by się to dobierało.

Nick

void metoda4(int parametr){ ... } // funkcja przyjmująca jeden argument typu int nie bezie tu ostrzeżenia o typie metody ?

Łukasz

Masakrycznie wytłumaczone... od podstaw a pod koniec

"Klasa metoda3(){ return new Klasa(); } // ta metoda zwraca obiekt klasy Klasa"

No rzeczywiście... Piszesz, że metoda to inaczej funkcja a następnie klasę nazywasz metodą i wyjaśniasz, że "ta metoda"(czyli ta funkcja) coś tam robi. Dla początkującego jest to fatalnie wytłumaczone.

Sławek Ludwiczak

następnie klasę nazywasz metodą
Zarzucasz rzeczy, których tutaj nie ma. Rozumiem, że nie do każdego może trafiać sposób przekazu, ale Łukaszu widać, że czepiasz się, żeby się przyczepić. Dzięki za komentarze, kiedy będę miał czas na pewno pomyślę o tym i część rzeczy poprawię (cały kurs jest do przeredagowania).
Przykro mi, że porzucasz kurs, są inne, są też książki, więc życzę powodzenia w znalezieniu tego najlepszego dla siebie :)

hub33k

Witam,
nie wiem czy dobrze zrozumiałem:
powiedzmy, że mamy taki listing
------------------------------------------------
1. class HelloWord
2. {
3. public static void main(String args[]) {
4. System.out.println("Hello Word!");
5. }
6. }
------------------------------------------------
Klasą jest tutaj HelloWord a obiektem? To co jest wewnątrz czyli 'System.out.println("Hello Word!");'?
Pozdrawiam

Sławek Ludwiczak

Tak klasą jest HelloWorld.
Jest tutaj też inna klasa - System, na jej rzecz wywołana jest statyczna metoda out, która zwraca obiekt typu PrintStream, a na jego rzecz wywołana jest metoda println(), która wyświetla napis.

To jest akurat zły przykład na początek :)
Lepszy w tym przypadku byłbym np:


class Samochod{
String marka;
int przebieg;
}

To jest klasa samochód, która może przechowywać jakieś informacje. W tym przypadku są to marka i przebieg (można oczywiście dodać co tylko sobie zażyczymy. Można by tutaj umieścić również obiekt innej klasy, np Silnik:

class Silnik{
int konieMechaniczne;
int iloscCylindrow;
}

Wtedy klasa Samochod mogłaby wyglądać tak:

class Samochod{
String marka;
int przebieg;
Silnik silnik;
}

Obiektem nazywamy utworzoną instancję klasy za pomocą operatora new, np:

Samochod mazda = new Samochod();

Taki konkretny samochód może reprezentować już konkretny model samochodu z ustalonym przebiegiem i konkretnym silnikiem. Jego konkretne pola moglibyśmy ustawić w np taki sposób:

Samochod mazda = new Samochod();
mazda.marka = "RX8";
mazda.przebieg = 30000;
Silnik silnikV8 = new Silnik();
silnikV8.konieMechaniczne = 200;
silnikV8.iloscCylindrow = 8;
mazda.silnik = silnik;


To dosyć prymitywny sposób i z późniejszych lekcji dowiesz się, że można to robić dużo łatwiej, ale ogólnie na tym to polega.
Pjotrek

dobrze, czyli w tym przykładzie powyżej co dokładnie jest klasą, co obiektem, a co metodą?

Janosch

Wydaje mi się, że zamiast String marka powinno być String model i potem
mazda.model = "RX8"; racja? Ale to taki szczegół.

Piotr979

obiekt klasy Klasa().... - taki sposób tłumaczenia faktycznie może być trudny dla początkującego. Po co takie gmatwanie?
Obiekt jest reprezentacją klasy i jej nośnikiem... - też nie jest to zbyt jasne. Gdyby nie to, że uczyłem się wcześniej C++ to byłby problem..

Zagłoba


mazda.silnik = silnik;


czy czasem nie miało być

mazda.silnik = silnikV8;