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 1 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 2 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 3 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 rekursja 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 4 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 5 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 6 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 13 Åš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 14 7 Åš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 15 Åš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 16 8 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 17 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 18 9 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 19 Tworzenie obiektów Klasa Hello w oknie TworzÄ…c kolejny obiekt z danej klasy należy 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 20 10 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 21 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 22 11 Dlaczego nie widać kółka? Dokonujemy inspekcji obiektu kolo wybierajÄ…c z menu kontekstowego opcjÄ™ Inspect R. PeÅ‚ka: JÄ™zyki Programowania, 2008 23 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 24 12 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 25 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 26 13 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 27 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 28 14 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 29 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 30 15 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 31 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 32 16 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 33 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 34 17 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 jeszcze nieutworzonego obiektu Circle slonce; klasy Circle utwórz nowy obiekt klasy Circle slonce = new Circle( ); i nadaj mu nazwÄ™ slonce Uwaga: Java rozróżnia wielkość liter, dlatego: CIRCLE `" Circle `" circle R. PeÅ‚ka: JÄ™zyki Programowania, 2008 35 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 36 18 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 37 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 38 19 Inspekcja obiektu prymitywista StrzaÅ‚ki oznaczajÄ… odwoÅ‚anie do obiektu