JÄ™zyki Programowania Podstawy Java. Åšrodowisko BlueJ. Zagadnienia żð Koncepcja maszyny wirtualnej (VM) żð JVM Java Virtual Machine żð Elementy Å›rodowiska SDK Java Sun Microsystems żð Kompilator, interpreter JVM żð Uruchamianie programów w systemie Windows żð Åšrodowisko uruchomieniowe BlueJ żð Metody żð Obiekty żð Klasy żð Manipulowanie klasami, metodami i obiektami w BlueJ R. PeÅ‚ka: JÄ™zyki Programowania, 2008 2 Kompilacja żð Kompilator tÅ‚umaczy program zapisany w jÄ™zyku wysokiego poziomu na jÄ™zyk maszynowy my_prog.c my_prog.exe program wykonywalny R. PeÅ‚ka: JÄ™zyki Programowania, 2008 3 Kompilacja i platformy żð Każda platforma (procesor + system operacyjny) ma wÅ‚asne unikatowe wymagania odnoÅ›nie postaci kodu programu wykonalnego żð Dla n jÄ™zyków i m platform potrzebne jest n ´ð m kompilatorów PC + UNIX PC + Windows PC + MacOS R. PeÅ‚ka: JÄ™zyki Programowania, 2008 4 Maszyna wirtualna (VM) żð Maszyna wirtualna (VM % virtual machine) jest hipotetycznym (wirtualnym) komputerem żð VM można uruchomić na dowolnym rzeczywistym komputerze jako symulator (emulator) żð JÄ™zyk maszyny wirtualnej jest jÄ™zykiem poÅ›redniczÄ…cym miÄ™dzy oprogramowaniem a rzeczywistym komputerem. Zapis programu w tym jÄ™zyku nosi nazwÄ™ bytecode żð Dla dowolnego jÄ™zyka wystarczy tylko jeden kompilator tego jÄ™zyka na jÄ™zyk VM R. PeÅ‚ka: JÄ™zyki Programowania, 2008 5 Koncepcja VM żð Niezależnie od liczby platform, dla n jÄ™zyków potrzeba n kompilatorów PC + UNIX PC + Windows Maszyna wirtualna VM PC + MacOS R. PeÅ‚ka: JÄ™zyki Programowania, 2008 6 Wady koncepcji VM żð Utrata efektywnoÅ›ci żð StosujÄ…c wspólnÄ… maszynÄ™ wirtualnÄ… VM dla różnych platform sprzÄ™towych nie można wykorzystać w peÅ‚ni jej unikatowych cech przyspieszajÄ…cych wykonanie niektórych operacji żð akceleratory graficzne żð operacje DSP ... żð Sprowadzenie zapisu programu do zunifikowanego bytecode prowadzi do utraty efektywnoÅ›ci jÄ™zyków w zakresie pewnych konstrukcji programistycznych żð rekurencja itp.. żð Idealna maszyna wirtualna w praktyce nie istnieje żð W praktyce decydujÄ…c siÄ™ na okreÅ›lonÄ… VM dokonuje siÄ™ kompromisu, godzÄ…c siÄ™ na utratÄ™ efektywnoÅ›ci żð StÄ…d szybkość programów interpretowanych przez VM jest zwykle mniejsza od szybkoÅ›ci programów kompilowanych bezpoÅ›rednio na danÄ… platformÄ™ żð programy napisane w jÄ™zyku Java sÄ… wolniejsze od programów napisanych w jÄ™zyku C/C++ R. PeÅ‚ka: JÄ™zyki Programowania, 2008 7 JVM wirtualna maszyna Java żð Maszyna wirtualna Java (Java Runtime Engine) jest dostÄ™pna dla niemal wszystkich platform żð JVM dla Windows to java.exe PC + UNIX Java PC + Windows Maszyna wirtualna Java JVM PC + MacOS R. PeÅ‚ka: JÄ™zyki Programowania, 2008 8 Maszyny wirtualne żð Maszyny wirtualne żð dla jednego jÄ™zyka żð wielu platform byÅ‚y znane już wczeÅ›niej, ale nie zdobyÅ‚y wiÄ™kszej popularnoÅ›ci żð Najbardziej dojrzaÅ‚e rozwiÄ…zania wczeÅ›niejszych VM to żð Pascal: p-Machine (poÅ‚owa lat 80-tych XX w.) żð Smalltalk: Smalltalk Bytecode Interpreter żð Prolog: WAM żð Smalltalk 80 może być uważany za protoplastÄ™ jÄ™zyka Java. Rynek nie byÅ‚ w roku 1980 przygotowany na takÄ… ideÄ™. Smalltalk wyprzedziÅ‚ swój czas o ponad 20 lat R. PeÅ‚ka: JÄ™zyki Programowania, 2008 9 WielojÄ™zyczne JVM żð Współczesne implementacje JVM sÄ… zdolne do interpretacji bytecode generowanego przez różne jÄ™zyki R. PeÅ‚ka: JÄ™zyki Programowania, 2008 10 Kompilacja programu Java żð Program zródÅ‚owy z rozszerzeniem .java jest kompilowany przez kompilator javac na plik o tej samej nazwie, ale z rozszerzeniem .class żð Plik ten zawiera bytecode dla JVM Hello.java Hello.class Source code Hello.java Hello.class R. PeÅ‚ka: JÄ™zyki Programowania, 2008 11 Wykonanie programu Java żð Bytecode jest wykonywany przez JVM żð Bytecode może również pochodzić z innych kompilatorów, np.. JPython, JBasic lub Smalltalk/JVM Hello.class Hello Hello.class R. PeÅ‚ka: JÄ™zyki Programowania, 2008 12 JDK główne elementy żð bin - kompilator i wszystkie narzÄ™dzia żð demo - kilka przykÅ‚adowych programów żð include - pliki dla metod rodzimych żð lib - pliki bibliotek żð jre - pliki Å›rodowiska wykonawczego Javy żð src - pliki zródÅ‚owe bibliotek (po rozpakowaniu src.zip) A. Poniecki 13 JDK główne elementy Kompilator Java NarzÄ™dzia dokumentacji Java Virtual Machine javac.exe javadoc.exe java.exe R. PeÅ‚ka: JÄ™zyki Programowania, 2008 14 Åšrodowisko JDK / DOS żð Utworzyć program zródÅ‚owy public class hello{ hello.java public static void main(String[] args) żð W linii poleceÅ„ DOS wywoÅ‚ać { System.out.println kompilator javac i skompilować program hello.java ("Hello World"); } } żð Powstanie bytecode o nazwie hello.class C:>javac hello.java żð Uruchomić program w JVM C:>java hello Hello World R. PeÅ‚ka: JÄ™zyki Programowania, 2008 15 Åšrodowisko JDK / Windows żð Utworzyć program zródÅ‚owy hello.java żð WywoÅ‚ać konsolÄ™ cmd żð WywoÅ‚ać kompilator >javac hello.java Powstanie bytecode o nazwie hello.class żð Uruchomić program w JVM >java hello żð Na konsoli pojawi siÄ™ tekst Hello World R. PeÅ‚ka: JÄ™zyki Programowania, 2008 16 Åšrodowisko JDK / Windows żð Metoda pisania, kompilowania i uruchamiania programów podana na poprzednim slajdzie dziaÅ‚a, ale jest anachroniczna żð DziÅ› nie posÅ‚ugujemy siÄ™ już liniÄ… poleceÅ„, bo jest to niewygodne żð Stosuje siÄ™ specjalnie zaprojektowane graficzne Å›rodowiska uruchomieniowe żð Interaktywne, graficzne Å›rodowiska uruchomieniowe dla jÄ™zyka Java żð JBuilder (Borland) żð NetBeans (Sun Microsystems) żð Swing do budowy GUI żð Eclipse żð ZaletÄ… (ale też i wadÄ…) wymienionych narzÄ™dzi jest bogactwo opcji, funkcji żð Nauka jest dÅ‚uga i żmudna żð Dokumentacja jest bardzo obszerna żð Dlatego opracowano uproszczone Å›rodowiska uruchomieniowe, przeznaczone głównie do celów dydaktycznych żð BlueJ (University of Kent, Deakin University) żð jGRASP R. PeÅ‚ka: JÄ™zyki Programowania, 2008 17 Zaczynamy pracÄ™ z BlueJ Klikamy dwukrotnie na ikonÄ™ BlueJ Otwieramy nowy projekt New Project Pojawia siÄ™ wiele predefiniowanych projektów (klas) Wybieramy nazwÄ™ przyklady R. PeÅ‚ka: JÄ™zyki Programowania, 2008 18 BlueJ, pierwsza klasa prawym przyciskiem myszy wywoÅ‚ujemy nowa klasa menu kontekstowe, z którego możemy np. dokonać edycji nazwa Hello powstaÅ‚a nowa klasa Hello.java R. PeÅ‚ka: JÄ™zyki Programowania, 2008 19 Edycja i kompilacja Edytor podaje gotowy kod zródÅ‚owy wczeÅ›niej zapisanej klasy Hello TworzÄ…c nowÄ… klasÄ™ trzeba ten kod wpisać, a potem można go modyfikować - edytować Gotowy kod można poddać tÅ‚umaczeniu - kompilacji R. PeÅ‚ka: JÄ™zyki Programowania, 2008 20 Tworzenie obiektów TworzÄ…c kolejny obiekt z danej klasy należy Klasa Hello w oknie mu nadać unikatowÄ… nazwÄ™, w tym przypadku BlueJ oznacza tylko, że np. hello3. Konstruktor obiektów sam klasa ta zostaÅ‚a podpowiada kolejne numery obiektów poprawnie skompilowana, na razie jednak nie można z niej korzystać w praktyce U doÅ‚u okna widać, że wczeÅ›niej zostaÅ‚y już utworzone dwa obiekty z klasy Hello o nazwach hello1 i hello2 R. PeÅ‚ka: JÄ™zyki Programowania, 2008 21 Obiekty sedno programowania Obiekty sÄ… podstawÄ… idei progra- mowania obiektowego. W BlueJ wszystkie wÅ‚asnoÅ›ci obiektów można przywoÅ‚ać przez menu kontekstowe Można przy tym obejrzeć wewnÄ™trzne wÅ‚aÅ›ciwoÅ›ci obiektów (Inspect) lub usunąć obiekt (Remove) R. PeÅ‚ka: JÄ™zyki Programowania, 2008 22 Figury jako obiekty Otwieramy zdefiniowanÄ… przykÅ‚adowÄ… klasÄ™ shapes i tworzymy obiekty klas Circle Square Triangle Możemy nadać wÅ‚asne nazwy obiektów, np.: kolo kwadrat trojkat Lub zaakceptować proponowane przez BlueJ nazewnictwo typu: Uwaga: powszechnie przyjÄ™ta jest konwencja, że circle1 nazwy klas zaczynajÄ… siÄ™ od dużej, a nazwy circle2 obiektów od maÅ‚ej litery square1 R. PeÅ‚ka: JÄ™zyki Programowania, 2008 23 Dlaczego nie widać kółka? Dokonujemy inspekcji obiektu kolo wybierajÄ…c z menu kontekstowego opcjÄ™ Inspect R. PeÅ‚ka: JÄ™zyki Programowania, 2008 24 isVisible = false Otwiera siÄ™ okno inspektora Parametr isVisible ma wartość false Należy go zmienić, ale w jaki sposób? R. PeÅ‚ka: JÄ™zyki Programowania, 2008 25 Metoda makeVisible() W menu kontekstowym obiektu kolo znajdujemy metodÄ™ makeVisible() Klikamy na tÄ™ opcjÄ™ i .... KoÅ‚o pojawia siÄ™ w oknie konsoli BlueJ R. PeÅ‚ka: JÄ™zyki Programowania, 2008 26 Badanie metod W podobny sposób powodujemy pojawienie siÄ™ obiektów kwadrat i trojkat NastÄ™pnie wywoÅ‚ujemy kolejno metody: obiekt kwadrat metoda moveRight() obiekt kolo metoda moveDown() obiekt kwadrat metoda moveRight() obiekt kwadrat metoda moveUp() R. PeÅ‚ka: JÄ™zyki Programowania, 2008 27 Metody z argumentami Zmienimy teraz wielkość koÅ‚a wywoÅ‚ujÄ…c zwiÄ…zanÄ… z nim metodÄ™ changeSize(int) Otwiera siÄ™ okno dialogowe, w które wprowadzamy nowÄ… wartość Å›rednicy koÅ‚a w pikselach Typ parametru int oznacza, że jest on liczbÄ… caÅ‚kowitÄ…. Wpisujemy wartość 100 i konsola pokazuje wiÄ™ksze koÅ‚o o Å›rednicy 100 pikseli R. PeÅ‚ka: JÄ™zyki Programowania, 2008 28 Kolejne obiekty tworzymy kolejne dwa obiekty klasy Circle kolo2 kolo3 i przesuwamy jedno z nich o 100 pikseli w prawo a drugie o 50 pikseli w dół, po czym uwidaczniamy je metodÄ… makeVisible() Na ekranie widzimy jednak tylko dwa niebieskie koÅ‚a. Gdzie jest trzecie koÅ‚o? Duże niebieskie koÅ‚o (obiekt kolo) przesÅ‚ania inne niebieskie koÅ‚o (obiekt kolo3) Aby uwidocznić obiekt kolo3 w jego menu szukamy metody changeColor(string) R. PeÅ‚ka: JÄ™zyki Programowania, 2008 29 Argumenty typu string Argumentem metody changeColor(String) jest Å‚aÅ„cuch znaków. W tym przypadku BlueJ pozwala wybrać jeden z 6 kolorów. Wybieramy np. yellow Na konsoli pojawia siÄ™ niewidoczne dotÄ…d żółte koÅ‚o (obiekt kolo3) R. PeÅ‚ka: JÄ™zyki Programowania, 2008 30 Powtórna inspekcja żð WywoÅ‚ujemy inspektora obiektu kolo i widzimy, że ma on nowe wartoÅ›ci pól: żð diameter żð xPosition żð yPosition żð isVisible żð Pola opisujÄ…ce obiekty majÄ… najczęściej jeden z trzech podstawowych typów: żð int żð String żð boolean R. PeÅ‚ka: JÄ™zyki Programowania, 2008 31 Malarz program Java żð DotÄ…d wszystkie operacje na klasach, obiektach i ich parametrach (wartoÅ›ciach pól) wykonywaliÅ›my interaktywnie, przy pomocy myszy i odpowiednich opcji w menu. Czy można te operacje zaprogramować w jÄ™zyku Java? żð W jaki sposób tworzyć obiekty i nadawać im nazwy używajÄ…c zapisu w jÄ™zyku Java, a w szczególnoÅ›ci jak żð Utworzyć obiekt klasy Circle i nadać mu nazwÄ™, np. kolo2 żð Utworzyć obiekt klasy Square i nadać mu nazwÄ™, np. kwadrat żð Jak zaprogramować takie czynnoÅ›ci? żð Stworzymy w tym celu nowÄ… klasÄ™ i nazwiemy jÄ… Malarz R. PeÅ‚ka: JÄ™zyki Programowania, 2008 32 Nowa klasa Malarz Otwieramy w BlueJ projekt shapes i tworzymy nowÄ… klasÄ™ o nazwie Malarz NastÄ™pnie zaczynamy edytować nowÄ… klasÄ™ R. PeÅ‚ka: JÄ™zyki Programowania, 2008 33 Klasa Malarz żð Po wywoÅ‚aniu edycji nowej klasy Malarz BlueJ otwiera okno klasy z tzw. szkieletem klasy. Kasujemy wszystko z wyjÄ…tkiem definicji class Malarz żð Oraz nawiasów klamrowych { } żð Nawiasy obejmujÄ… przyszÅ‚Ä… treść tworzonej klasy R. PeÅ‚ka: JÄ™zyki Programowania, 2008 34 Co ma zawierać klasa Malarz żð zakÅ‚adamy, że klasa Malarz, a wiÄ™c i obiekty utworzone z tej klasy powinny: żð tworzyć (rysować) obiekty w postaci kół, prostokÄ…tów i trójkÄ…tów i nadawać im nazwy żð zawierać metodÄ™, np. rysujDom( ), która: żð utworzy i umieÅ›ci w odpowiednich miejscach obiekty skÅ‚adowe tworzÄ…ce rysunek domu żð bÄ™dzie je mogÅ‚a powiÄ™kszać lub zmniejszać żð uwidoczni na konsoli poszczególne obiekty żð bÄ™dzie mogÅ‚a zmieniać barwy elementów rysunku domu R. PeÅ‚ka: JÄ™zyki Programowania, 2008 35 Tworzenie obiektów żð Tworzenie (konstrukcja) obiektów skÅ‚ada siÄ™ z dwóch kroków: żð rejestruje siÄ™ nazwÄ™ obiektu żð tworzy siÄ™ nowy obiekt i zapamiÄ™tuje z nadana wczeÅ›niej nazwÄ… zarejestruj nazwÄ™ slonce dla Circle slonce; jeszcze nieutworzonego obiektu klasy Circle slonce = new Circle( ); utwórz nowy obiekt klasy Circle i nadaj mu nazwÄ™ slonce Uwaga: Java rozróżnia wielkość liter, dlatego: CIRCLE `" Circle `" circle R. PeÅ‚ka: JÄ™zyki Programowania, 2008 36 Rejestracja przy tworzeniu żð RejestracjÄ™ i utworzenie (konstrukcjÄ™) obiektu można również wykonać w jednym kroku. Aby w ten sposób utworzyć nowy obiekt klasy Circle i nadać mu nazwÄ™ slonce należy napisać: Circle slonce = new Circle( ); Rejestruj nazwÄ™ obiektu Utwórz nowy obiekt klasy slonce, który należy do Circle klasy Circle R. PeÅ‚ka: JÄ™zyki Programowania, 2008 37 Klasa Malarz z obiektami Klasa może być już kompilowana Można tworzyć obiekty W czasie kompilacji nie wystÄ…piÅ‚y żadne bÅ‚Ä™dy R. PeÅ‚ka: JÄ™zyki Programowania, 2008 38 Malarz prymitywista W menu kontekstowym klasy Malarz wybieramy opcjÄ™ new Malarz(), tworzymy nowy obiekt tej klasy i nadajemy mu nazwÄ™ prymitywista NastÄ™pnie wchodzimy do inspekcji obiektu prymitywista R. PeÅ‚ka: JÄ™zyki Programowania, 2008 39 Inspekcja obiektu prymitywista StrzaÅ‚ki oznaczajÄ… odwoÅ‚anie do obiektu