Minecraft.PL

Baner serwera Minecraft.PL
  • Newsy
  • Forum
  • Pobierz
    • Gra i serwerMinecraft Download
    • SkinyMinecraft Download
  • Poradniki
    • Czym jest Minecraft?Czym jest minecraft
    • Crafting (Rzemiosło)Crafting minecraft
    • Zmiana skinaSkiny minecraft
    • Encyklopedia
      • Stworzenia
      • Jedzenie
      • Muzyka
      • Narzędzia
      • Piec
      • Rolnictwo
  • Discord

Strona główna » Java #4 – programowanie obiektowe

Java #4 – programowanie obiektowe

Java Minecraft

W czwartej części poznamy podstawy programowania obiektowego: dowiemy się, czym jest obiekt, klasa, metoda i pole składowe. Otrzymamy również rozwiązanie pracy domowej z części 3.

Rozwiązanie pracy domowej z części 3
Stwórz swój pierwszy projekt: prosty kalkulator. Najpierw wczyta on od użytkownika znak „+”, „-”, „*”, „/” lub „Q”. Następnie wczyta dwie liczby i wyświetli działanie, a później zacznie od początku. Jeśli użytkownik poda „Q”, kalkulator wyłączy się.
To zadanie mogło mieć wiele rozwiązań. Jedno z nich może wyglądać następująco:

Program ten ma wiele błędów – gdybyśmy w wyniku zamiast typu int użyli float lub double, dzielenie byłoby wyświetlane poprawnie, podczas gdy teraz działanie 5/6 daje w wyniku 0. Jeśli podamy zły znak działania lub wybierzemy Q, zostanie wyświetlona liczba 0.

Wstęp do programowania obiektowego
95% kursów programowania w dowolnym języku zaczyna część o programowaniu obiektowym słowami: Cały nasz świat jest zbudowany z obiektów. Czy słusznie? Nie wiadomo. Prawdą jest jednak, że nasz świat jest z tych obiektów zbudowany, zaś uświadomienie sobie, czym jest obiekt w prawdziwym świecie, może nam pomóc zrozumieć zasady Programowania Zorientowanego Obiektowo (Object-Oriented Programming, w skrócie OOP). Jako przykład weźmy zegarek. Istnieje mnóstwo zegarków – mogą mieć pasek plastikowy lub metalowy, godzinę mogą wskazywać w sposób analogowy bądź cyfrowy, mogą być też różnych firm. Zegarki mogą mieć różne rozmiary. Zegary mogą wisieć na ścianie, stać na stole lub być noszone na ręce. Każdy z tych zegarków jest obiektem, natomiast wszystkie te obiekty są jednej klasy: Zegarek. Podobnie, Merkury, Wenus, Ziemia i Mars są klasy Planeta, zaś jabłko, gruszka i truskawka to obiekty klasy Owoc.

Uznajmy więc, że mamy klasę Zegarek, której obiekty mogą mieć następujące cechy:

  • długość paska;
  • sposób wyświetlania czasu;
  • nazwa firmy.

Długość paska moglibyśmy zapisać za pomocą zmiennej typu int, sposób wyświetlania – za pomocą boolean (np. true, jeśli zegarek jest cyfrowy, a false, jeśli nie). Nazwę możemy zapisać w zmiennej typu String.

Mamy więc już schemat naszej pierwszej klasy:

Powyższy kod przedstawia kod źródłowy klasy Zegarek z trzema zmiennymi: dlugoscPaska, czyCyfrowy i nazwaFirmy. Zmienne opisujące klasę są nazywane polami składowymi.

Poznaliśmy już funkcje takie, jak main(String[] args), println() lub showInputDialog(). Czy potrzebowalibyśmy jakiejś funkcji, która działa na zegarku?
Gdybyśmy chcieli sprzedać zegarek, kupiec na pewno sprawdziłby, jaka firma zrobiła zegarek. W klasie Zegarek przydałaby więc się funkcja, która podaje nazwę firmy. Rozbudujmy więc klasę zegarek o funkcję pobierzNazweFirmy().

Słowo String przed nazwą funkcji określa typ zmiennej, która ma zostać przez funkcję wysłana. Wewnątrz funkcji znajduje się kod return nazwaFirmy. Oznacza to, że po wywołaniu funkcji pobierzNazweFirmy() otrzymamy zmienną o nazwie nazwaFirmy. Porównaj to ze znanym Ci już kodem:
String imie = JOptionPane.showInputDialog("Podaj swoje imie");.
Funkcja showInputDialog w klasie JOptionPane również ma przed nazwą słowo String, zaś wewnątrz funkcji znajduje się słowo kluczowe return. Funkcje znajdujące się w klasach nazywane są metodami.

Ważną metodą w obiekcie jest konstruktor. Jest to metoda uruchamiana przy tworzeniu nowego obiektu. Nie może ona nic zwracać – nie można nawet podać typu void. Nazwa metody musi być taka sama, jak nazwa klasy.
Wewnątrz nawiasów w każdej metodzie (również w konstruktorze) mogą być podane zmienne oddzielone przecinkami. Są to tzw. argumenty. Możesz je w dowolny sposób wykorzystywać wewnątrz metody. W miejscu, gdzie wywoływana jest metoda, wewnątrz nawiasów muszą być podane wszystkie argumenty.

Przykładem jest znana ci już metoda println. Metoda drukująca tekst wygląda następująco:
public void println(String x) {
...
}

W swoim programie możesz używać tej metody na różne sposoby – od razu wstawić tekst do środka lub wstawić tam zmienną o dowolnej nazwie.

String x = "test";
System.out.println(x);
String aaa = "aaa";
System.out.println(aaa);
System.out.println("Lorem ipsum dolor sit amet");

Przy wywołaniu metody println, wszystkie zmienne, które podaje się w nawiasie, są przekazywane do metody println, która może wykorzystywać zmienną w dowolny sposób.

Rozbudujmy więc nasz przykład z zegarkiem – stwórzmy konstruktor, który przyjmuje trzy argumenty: długość paska, sposób wyświetlania czasu i nazwę firmy. Dodamy również specjalną możliwość zmiany nazwy firmy (ktoś próbuje oszukiwać przy sprzedaży? Nieładnie…)

Przypominam, że funkcja, która ma w miejscu zwracanego typu podane void, nie zwraca żadnej zmiennej, oraz że każda klasa ze słowem public musi być zapisana w pliku o nazwie takiej samej, jak nazwa klasy. Oznacza to, że cały kod musi znajdować się w pliku o nazwie Zegarek.java.

Teraz przejdźmy do pliku zawierającego funkcję public static void main(String[] args) (lub stwórzmy go, jeśli takiego nie ma). Skorzystajmy teraz z efektu naszej pracy i stwórzmy obiekt klasy Zegarek. Pasek będzie miał długość 20 centymetrów, a zegarek będzie wyświetlał czas za pomocą wskazówek (więc będzie analogowy). Będzie on firmy Casio. Obiekt stworzymy w funkcji main. Następnie spróbujemy wydrukować do konsoli nazwę firmy, a później zmienimy tą nazwę na Rolex.

Zegarek zeg = new Zegarek(20, false, "Casio");
String n = zeg.pobierzNazweFirmy();
System.out.println(n);
zeg.zmienNazweFirmy("Rolex");
n = zeg.pobierzNazweFirmy();
System.out.println(n);

W pierwszej linii tworzymy nowy obiekt klasy Zegarek. W drugiej i trzeciej linii pobieramy nazwę firmy i wyświetlamy ją w konsoli. W czwartej linii zmieniamy nazwę firmy, zaś w piątej i szóstej znowu pobieramy nazwę firmy i wyświetlamy ją w konsoli. Najpierw wydrukowane zostanie słowo „Casio”, a później „Rolex”.

Gratulacje! Twoja pierwsza klasa została napisana. Można ją rozbudować jeszcze bardziej – dodać metody umożliwiające zmianę długości paska i sposób wyświetlania oraz umożliwiające pobranie tych danych.

To tyle w 4. części kursu!
Za 2 tygodnie:

  • komentarze (aż dziwne, że dopiero teraz…);
  • korzystanie z istniejących klas na przykładzie klasy GregorianCalendar;
  • czytanie dokumentacji API online, czyli sposób na zdobycie wiedzy o wszystkich funkcjach i klasach wbudowanych w język Java.

Ciekawostka:
Java 7 zawiera ponad 4000 wbudowanych klas. Każda z nich ma swój liczący co najmniej 2 akapity opis w dokumentacji. Jakby tego było mało, każda metoda w tych klasach (a metod może być naprawdę sporo) również posiada swój opis. Całość można przeczytać na stronie http://docs.oracle.com/javase/7/docs/api/index.html

Do zobaczenia 21 grudnia punktualnie o godzinie 12:00!

gru 7, 2013ShookTea
Minecraft 1.7.3 Pre-releaseMinecraft 1.7.3/pre-release 1.7.4/1.7.4
Comments: 19
  1. TheReduxPL
    12 lat temu

    Już widzę miny co niektórych którzy sądzili, że będzie łatwo :3

    ReplyCancel
    • Superkocur
      12 lat temu

      he he he

      ReplyCancel
    • ShookTea
      12 lat temu

      Tak, 5 razy mniej „Lubię to” = Załamanie osób, którzy do tej pory tylko „Przecież to proste jest”, „Na co wy to robicie”, „Hahaha, napisałeś 'Stringi’ ;d”.

      ReplyCancel
      • Superkocur
        12 lat temu

        Heh. Niektórzy ludzie po prostu szukają pola do jarania*, a nie chcą się uczyć. Najlepszym tego przykładem jest chyba jak sam napisałeś „Hahaha, napisałeś Stringi”

        *pole do jarania – w naszym szkolnym slangu oznacza to tyle co – pola do śmiechu/popisu

        ReplyCancel
        • ShookTea
          12 lat temu

          „Java #69 – Stringi. Programowanie aplikacji do obsługi seksszopa.”

          ReplyCancel
          • Superkocur
            12 lat temu

            dokładnie

            ReplyCancel
  2. Mac70_dev
    12 lat temu

    Napiszę tylko, że stosowanie arg1, arg2, arg3 itd. jako nazw zmiennych jest fatalną praktyką. Mogłeś też wspomnieć o „this”, ja osobiście często go stosuję w konstruktorach aby oddzielić „nadchodzące” zmienne od tych pochodzących z zewnątrz.

    ReplyCancel
    • ShookTea
      12 lat temu

      Ja też korzystam z „this”. Nawet zbyt dużo. W każdej klasie praktycznie każda zmienna klasowa jest u mnie poprzedzona „this”, nawet, jeśli chodzi tylko o wydrukowanie do konsoli. Arg1 i cała reszta wyliczanki również są złe.

      Po prostu to by było dla nich za dużo. I tak nie jestem zadowolony z już drugiego molocha (poprzedni: część 3), jaki mi się tutaj wytworzył. Muszę bardziej ograniczyć swoje plany, jakie podaję pod koniec, stąd właśnie ograniczenie w części 5 do komentarzy i pojedynczej klasy. Właśnie dlatego nie używałem „this”. Omówię „this” później, najpewniej przy klasach bezczelnie łamiących enkapsulację (Dimension, Point).

      Co do „arg1” i spółki, nie miałem innego pomysłu, a chciałem jakoś pokazać różnicę i sposób działania wywoływania metod ze zmiennymi.

      ReplyCancel
  3. xCraftRayX
    12 lat temu

    A ja w tej pracy domowej tak się rozpisałem :D

    public static void main(String[] args){

    String rodzaj = JOptionPane.showInputDialog(„Dostępne opcje: * , / , – , +, Q”);

    switch (rodzaj) {

    case „*”:

    System.out.println(„Wybrałeś mnożenie!”);

    String a = JOptionPane.showInputDialog(„Podaj liczbę:”);

    System.out.println(„Pomnożone przez:”);

    String b = JOptionPane.showInputDialog(„Podaj drugą liczbę:”);

    int liczbaOne = Integer.parseInt(a);

    int LiczbaTwo = Integer.parseInt(b);

    int wynik = liczbaOne * LiczbaTwo;

    System.out.println(wynik);

    break;

    case „/”:

    System.out.println(„Wybrałeś dzielenie!”);

    String c = JOptionPane.showInputDialog(„Podaj liczbę:”);

    String d = JOptionPane.showInputDialog(„Podaj drugą liczbę:”);

    int DzielenieliczbaOne = Integer.parseInt(c);

    int DzielenieLiczbaTwo = Integer.parseInt(d);

    int DzielenieWynik = DzielenieliczbaOne / DzielenieLiczbaTwo;

    System.out.println(DzielenieWynik);

    break;

    case „-„:

    System.out.println(„Wybrałeś odejmowanie!”);

    String e = JOptionPane.showInputDialog(„Podaj liczbę:”);

    String f = JOptionPane.showInputDialog(„Podaj drugą liczbę:”);

    int OdejmowanieLiczbaOne = Integer.parseInt(e);

    int OdejmowanieLiczbaTwo = Integer.parseInt(f);

    int OdejmowanieWynik = OdejmowanieLiczbaOne – OdejmowanieLiczbaTwo;

    System.out.println(OdejmowanieWynik);

    break;

    case „+”:

    System.out.println(„Wybrałeś dodawanie!”);

    String g = JOptionPane.showInputDialog(„Podaj liczbę:”);

    String h = JOptionPane.showInputDialog(„Podaj drugą liczbę:”);

    int DodawanieLiczbaOne = Integer.parseInt(g);

    int DodawanieLiczbaTwo = Integer.parseInt(h);

    int DodawanieWynik = DodawanieLiczbaOne + DodawanieLiczbaTwo;

    System.out.println(DodawanieWynik);

    break;

    case „Q”:

    System.out.println(„Wyłączyłeś kalkulator”);

    break;

    default:

    System.out.println(„Nie ma takiej opcji!”);

    ReplyCancel
    • ShookTea
      12 lat temu

      „DRY”, co po angielsku znaczy „Suchy”, ma też swoje rozwinięcie jako „Don’t Repeat Yourself”, czyli „Nie powtarzaj się”. Następujący kod:

      String a = JOptionPane.showInputDialog(„Podaj liczbę:”);
      String b = JOptionPane.showInputDialog(„Podaj drugą liczbę:”);
      int LiczbaOne = Integer.parseInt(g);
      int LiczbaTwo = Integer.parseInt(h);”

      Mogłeś podać tylko raz, przed „case”, a później przy każdej opcji korzystać z „LiczbaOne” i „LiczbaTwo”.

      ReplyCancel
  4. xCraftRayX
    12 lat temu

    Myślałem, że programowanie obiektowe będzie trudne tak jak pisałeś :D A tak fajnie to wytłumaczyłeś, że teraz to wszystko ma ręce i nogi :D

    ReplyCancel
    • Mac70_dev
      12 lat temu

      Poczekaj na dziedziczenie – klasy abstrakcyjne, interface’y, przeciążanie metod, klasy anonimowe. To jest dopiero absolutna podstawa. ;) Poza tym widzę, że bardzo wielu osobom ciężko jest załapać różnicę między metodami/polami ze static i bez.

      ReplyCancel
      • ShookTea
        12 lat temu

        Zapomniałeś jeszcze wspomnieć o proxy, reflection, klasy (nie tyle anonimowe, co) wewnętrzne, swing, event, adapter, listener, wszystkie komponenty z „J” na początku, exception, error, throwable, throw, throws, catch, debugger, robot AWT, pliki i streamy. Tak, żeby ich troszkę wystraszyć :D

        A na poważnie, to to, co ty wypisałeś + to, co ja wypisałem zamyka się w jednej książce o nazwie „Java. Podstawy” C. Horstmanna i G. Cornella :D

        ReplyCancel
  5. ShookTea
    12 lat temu

    Mała zmiana planów – z powodu moich problemów prywatnych, 5 część zostaje przełożona na 21 grudnia, zamiast planowanego 14 grudnia.

    ReplyCancel
    • R0solek
      12 lat temu

      O której będzie?

      ReplyCancel
      • ShookTea
        12 lat temu

        Gunwo. Nie wyszło. Problemy się przeciągnęły. Będzie dopiero w styczniu.

        ReplyCancel
        • R0solek
          12 lat temu

          Będzie to nadrobione?

          ReplyCancel
  6. ma3x
    12 lat temu

    Mam pytanie związane z modowaniem.Jak bardzo skomplikowane jest przeniesienie moda single player na multi? Dodam że chodzi o Sim U craft mod i wymaga forge modloadera jeśli to coś zmienia.Sporo modów jest tworzone tak że jedna paczka działaja na multi i na singlu.Od czego to zależy czy można taki mod przeportować na multi i jak bardzo jest to skomplikowane?

    ReplyCancel
    • ShookTea
      12 lat temu

      Zwykle to zależy od skomplikowania samego moda. Nie powiem więcej, bo tego moda nie znam.

      ReplyCancel

Dodaj komentarz Anuluj pisanie odpowiedzi

ShookTea
12 lat temu 19 komentarzy Minecraft415

© Copyright 2026 by Minecraft.PL – Wszelkie prawa zastrzeżone

Nasze utrzymanie!
Discord



Czym jest Minecraft?
Wyobraź sobie możliwość budowania jak za czasów klocków lego, świat nawiedzany przez przeróżne potwory, od zombie do wybuchających creeperów, przygodówkę, kiedy to wpadamy do ciemnej jaskini zapominając nagle gdzie było wyjście, połącz z wypixelowaną grafiką i masz Minecraft'a.

Czytaj dalej
|Serwery Minecraft
|Serwer Discord
|Skontaktuj się z nami!
2026 © Minecraft.PL
Strona Minecraft.pl nie jest w żaden sposób powiązana z Mojang!