środa, 10 maja 2017

Podstawy Javy w środowisku Greenfoot

Było programowanie przy pomocy klocków w Scratchu, było też programowanie przy pomocy Pocket Code – również przy pomocy klocków. Odstawimy na jakiś czas klocki i zaczniemy pisać kod – w języku Java, w środowisku Greenfoot.

Java jest jednym z najpopularniejszych obiektowych języków programowania. Ma zastosowanie głównie w systemach finansowych, jak i obliczeniach naukowych, ale warto wiedzieć, że gra Minecraft została napisana właśnie w Javie! Co do środowiska Greenfoot, zostało ono opracowane przez Uniwersytet w Kent, we współpracy z właścicielem Javy – Oracle. Ma prosty, przejrzysty interfejs i jest dobrym wyborem do poznania podstaw Javy.

Witaj Zielona Stopo!

Aby napisać nasz pierwszy program, potrzebujemy pobrać środowisko Greenfoot, oraz narzędzia deweloperskie Javy (w skrócie: JDK – Java Development Kit). Po przejściu na stronę greenfoot.org wchodzimy do odnośnika The Software:



Znajdują się na niej instalatory Greenfoota. Mamy kilka opcji do wyboru, dla różnych rodzin systemów operacyjnych, ale jest również opcja Standalone, do przenoszenia na pendrive, niestety tylko dla systemów z rodziny Windows. Ponadto, poniżej jest odnośnik do zbioru starszych wersji naszego środowiska.
Wersja na OS Windows, Mac OS X oraz Standalone posiadają w sobie już narzędzia deweloperskie Javy, natomiast wersja Ubuntu oraz Pure Java wymagają osobno zainstalowanego JDK. Ze względu na wygodę, wybrałem wersję Standalone. Plik .zip waży ok. 190MB, po wypakowaniu, środowisko Greenfoot wraz z JDK uszczuplają nasz dysk o około 360 MB.
Przechodzimy do wypakowanego katalogu i uruchamiamy program z ikoną zielonej stopy.
Po uruchomieniu, naszym oczom ukazuję się następujący widok:



Pole oznaczone 1 to okno uruchomieniowe naszej aplikacji – to tutaj, podobnie jak w Scratchu, będziemy mogli podziwiać widoki naszej pracy, w trakcie rozwijania programu.
W części oznaczonej 2, możliwość uruchomienia/zatrzymania aplikacji, resetowania jej do początkowych wartości, a także zmiana jej szybkości.
Ostatni fragment, ale nie mniej ważny niż pozostałe dwa. Drzewko struktury naszej aplikacji – to tutaj dodajemy nowe klasy (co to takiego, dowiemy się już za momencik), które są trzonem naszych programów.

Pierwsza aplikacja

Aby stworzyć nasz pierwszy program, wybieramy Scenario → New Java Scenario. W wybranym przez siebie katalogu nazywamy nasz scenariusz helloworld i wciskamy create. Greenfoot na moment znika, i po ponownym pojawieniu się, widzimy, że w naszym polu nr 3 pojawił się spis – podzielony na dwie kategorie: Klasy Świata (World classes) oraz Klasy aktorów (Actor classes).



W tym momencie dobrze jest opowiedzieć czym są klasy i jaki one mają związek z obiektami i do czego obie rzeczy służą. Najogólniej rzecz biorąc, poprzez klasy i obiekty odwzorowujemy nasz świat rzeczywisty. W programowaniu, klasa to schemat danej rzeczy, obiekt natomiast, to już jest konkretny przedmiot o konkretnych właściwościach. Weźmy na przykład samochód – klasa samochód ma jakąś markę, jakiś kolor, oraz pewien przebieg. Natomiast obiekt samochód ma już konkretną markę, np. Tesla, konkretny kolor – grafitowy, o konkretnym przebiegu, np.120 tys. km.
Stwórzmy sobie zatem jakąś klasę. Proponuję klasę „Osoba”, która będzie mieć dwa pola: imię oraz wiek. Żeby to zrobić, klikamy prawmy przyciskiem myszy na klasę „Actor”  i wybieramy „New Subclass”. W nowo otwartym oknie musimy wpisać nazwę klasy (z dużej litery!) i możemy mu nadać obrazek, po czym naciskamy „OK”. Nadałem nazwę klasy „Osoba”, a obrazek ją reprezentujący – „woman01.png”.



Dobrze, mamy zatem własną klasę, która może coś robić. Na początek, sprawmy, żeby w ogóle pojawiła się w naszym świecie – w tym celu musimy wyedytować klasę MyWorld. Otwarcie edytora to dwukrotne kliknięcie w daną klasę, bądź kliknięcie prawym i wybranie „Open editor”. Naszym oczom ukaże się następujący widok:



Na zrzucie powyżej widzimy parę linii kodu, które są nam potrzebne do tego, żeby nasza klasa „zagrała”. Pierwsza linia służy do pobrania do aplikacji bibliotek – rozszerzeń, dzięki którym możemy w Greenfoocie np. zagrać muzykę, ale jest ona wymagana do obsługi  klas aktorów. Linia numer 9 to jest określenie nazwy klasy(MyWorld), jej dostępności w programie (public), a także, czy rozszerza już istniejącą klasę (extends World).
            W liniach 12 - 15 widzimy komentarz blokowy. Komentarze służą programiście do krótkiego opisu danego fragmentu kodu.
            Fragment 16 – 20 to jest konstruktor, który jak sama nazwa wskazuje, służy do konstruowania, tworzenia obiektu danej klasy. W naszym wypadku, wywołujemy konstruktor z klasy nadrzędnej (World), która jest wbudowana i której nie możemy edytować, możemy natomiast do niej dodawać rożne rzeczy – jak na przykład nasz własny świat.
            OK, pokrótce kod został omówiony, pora coś zakodować – pod linią super() utworzymy sobie nowy obiekt. Potrzebujemy napisać króciutki kod:
Osoba wirtualnaOsoba = new Osoba();
            Co takiego powyższa linia kodu robi? Tworzy nowy obiekt klasy Osoba i przypisuje go do zmiennej referencyjnej wirtualnaOsoba – dzięki czemu będziemy mogli się do tego obiektu odwołać poprzez nazwę zmiennej.
            Dobrze, mamy obiekt, ale coś go w naszym świecie nie widać…Remedium na to jest następujący kod wpisany poniżej konstruktora wymienionego powyżej:
addObject(wirtualnaOsoba, 300, 200);\
Po autokompilacji, naszym oczom, na świecie powinna pojawić się ikonka naszego obiektu klasy Osoba:



Dobrze by było, żeby ta nasza osoba coś robiła...Na przykład powiedziała jak ma na imię i ile ma lat. Musimy zatem przejść do edycji klasy Osoba. Powyżej metody Act utworzymy sobie dwa pola. Pole to taka właściwość obiektu...jak imię, czy wiek. Imię jest traktowane jako ciąg znaków – String, wiek natomiast, jako liczba całkowita – int (Integer).
Aby nasz obiekt faktycznie przyjął określone właściwości, musimy mu napisać konstruktor, w którym mówimy mu dobitnie – Twoje imię i wiek to…
            Dla nieco większej przejrzystości usunąłem komentarze wbudowane przez Greenfoota:

Konstrukcja warunku jest prosta:
jeżeli ten konkretny obiekt został przyciśnięty przez mysz, to ma on coś zrobić. W Javie wygląda to następująco:



GetWorld() umożliwia 'mówienie' aktora w świecie, w którym się znajduje, przy pomocy metody showText(), która potrzebuje 3 rzeczy: tekstu do wyświetlenia, oraz współrzędnych X i Y. Jak widać, w tekście, jaki chcę wyświetlić pojawiają się pola naszej klasy! Znaki '+' łączą nam dane – tekst, który jest w cudzysłowie, oraz wartości pól. Zabieg ten nazywa się konkatenacją.           Współrzędne X i Y moglibyśmy wymyślić, ale skorzystamy tutaj z wiedzy naszej Marzenki, dotyczącej miejsca w którym się znajduje – metody getX() i getY() zwracają odpowiednią współrzędną X i Y naszej bohaterki.
            Współrzędna (0,0) w takich językach programowani jak Java czy C++ znajduje się w lewym górnym rogu aplikacji, toteż, aby napis pojawił się powyżej naszej bohaterki i był przesunięty nieco w prawo, współrzędną X musimy zwiększyć o 50 pikseli, natomiast współrzędną Y o 50 punktów pomniejszyć.
            Po kompilacji, nasza postać powinna się ładnie przedstawić w świecie!
Przygodą z Javą i Greenfootem można kontynuować korzystając z nagrań webinarów. Niebawem zostaną opublikowane nagrania z kolejnego cyklu spotkań.

autor: Adam Zieliński, trener Mistrzów Kodowania

Share:

0 komentarze:

Prześlij komentarz