1
Języki Programowania
Podstawy Java. Środowisko BlueJ.
R. Pełka: Języki Programowania, 2008
2
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
2
R. Pełka: Języki Programowania, 2008
3
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
4
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
3
R. Pełka: Języki Programowania, 2008
5
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
6
Koncepcja VM
Niezależnie od liczby platform, dla n języków potrzeba n
kompilatorów
Maszyna wirtualna – VM
PC + UNIX
PC + Windows
PC + MacOS
4
R. Pełka: Języki Programowania, 2008
7
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
8
JVM – wirtualna maszyna Java
Java
Maszyna wirtualna Java
JVM
PC + UNIX
PC + Windows
PC + MacOS
Maszyna wirtualna Java (
Java Runtime Engine
) jest dostępna dla niemal
wszystkich platform
JVM dla Windows to
java.exe
5
R. Pełka: Języki Programowania, 2008
9
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
10
Wielojęzyczne JVM
Współczesne implementacje JVM są zdolne do interpretacji
bytecode
generowanego przez różne języki
6
R. Pełka: Języki Programowania, 2008
11
Kompilacja programu Java
Program źró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
Source code
Hello.java
Hello.class
Hello.java
Hello.class
R. Pełka: Języki Programowania, 2008
12
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
Hello.class
Hello.class
7
R. Pełka: Języki Programowania, 2008
13
JDK – główne elementy
Java Virtual Machine
java.exe
Narzędzia dokumentacji
javadoc.exe
Kompilator Java
javac.exe
R. Pełka: Języki Programowania, 2008
14
Środowisko JDK / DOS
Utworzyć program źródłowy
hello.java
W linii poleceń DOS wywołać
kompilator
javac
i skompilować
program
hello.java
Powstanie bytecode o nazwie
hello.class
Uruchomić program w JVM
public class hello{
public static void
main(String[] args)
{ System.out.println
("Hello World"); }
}
C:>javac hello.java
C:>java hello
Hello World
8
R. Pełka: Języki Programowania, 2008
15
Środowisko JDK / Windows
Utworzyć program źró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
9
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
nowa klasa
nazwa
Hello
powstała nowa klasa
Hello.java
prawym przyciskiem
myszy wywołujemy
menu kontekstowe,
z którego możemy
np. dokonać edycji
10
R. Pełka: Języki Programowania, 2008
19
Edycja i kompilacja
Edytor podaje gotowy kod
źró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
Klasa
Hello
w oknie
BlueJ oznacza tylko, że
klasa ta została
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
Tworząc kolejny obiekt z danej klasy należy
mu nadać unikatową nazwę, w tym przypadku
np.
hello3
. Konstruktor obiektów sam
podpowiada kolejne numery obiektów
11
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:
circle1
circle2
square1
Uwaga:
powszechnie przyjęta jest konwencja, że
nazwy
klas
zaczynają się od dużej, a nazwy
obiektów
od małej litery
12
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?
13
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()
14
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
)
15
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
16
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ę
17
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
18
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
jeszcze nieutworzonego obiektu
klasy
Circle
utwórz nowy obiekt klasy
Circle
i nadaj mu nazwę
slonce
Uwaga:
Java rozróżnia wielkość liter, dlatego:
CIRCLE ≠ Circle ≠ circle
Circle slonce
;
slonce = new 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
slonce
, który należy do
klasy
Circle
Utwórz nowy obiekt klasy
Circle
19
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
20
R. Pełka: Języki Programowania, 2008
39
Inspekcja obiektu prymitywista
Strzałki oznaczają odwołanie do obiektu <object reference>
Podwójne kliknięcie na
link wywołuje okno
inspektora
wskazywanego obiektu
Inspektor wskazuje, że prymitywista ma
pola o nazwach
slonce
,
sciana
,
okno
i
dach
Nie są to liczby, ale obiekty odpowiednio
klas:
Circle
,
Square
,
Square
i
Triangle
R. Pełka: Języki Programowania, 2008
40
Malarz może już malować
Aby obiekt klasy Malarz mógł malować należy
klasę wyposażyć w metodę malowania.
Metody języka Java składają się z nagłówka i
ciała
Nagłówek
zawiera:
• typ wyniku – u nas brak –
void
• nazwę metody –
rysujDom
• listę parametrów – u nas pusta
( )
Ciało
zawiera opis czynności, które wykonuje
metoda:
•
slonce.makeVisible();
•
slonce.changeColor(”yellow”);
•
slonce.moveHorizontal(100);
• itd...
21
R. Pełka: Języki Programowania, 2008
41
Nagłówek metody
Nagłówek metody Javy
void
rysujDom( )
;
Typ wyniku wyprodukowa-
nego (obliczonego) przez
metodę. Jeśli metoda nie
zwraca żadnego wyniku
używa się słowa
void
Nazwa metody –
zgodnie z konwencją
zaczyna się od małej
litery
Lista parametrów metody,
nawiasów nie można
pominąć, nawet gdy lista
jest pusta
Przykłady nagłówków innych metod
void
rysujAkwarium( )
;
void
makeVisible( )
;
void
changeColor(
String
kolor
)
;
void
moveHorizontal(
int
distance
)
;
R. Pełka: Języki Programowania, 2008
42
Ciało metody
Ciało metody
, nazywane też blokiem zawiera następujące
elementy:
1. Klamrę otwierającą blok
{
2. Ciąg instrukcji, np.
deklaracje zmiennych
instrukcje przypisania
pętle
wywołania metod np.
slonce.makeVisible( );
....
3. Klamrę zamykającą blok
}
22
R. Pełka: Języki Programowania, 2008
43
Uruchamiamy prymitywistę
wschód słońca
na kempingu ?
Tworzymy obiekt klasy
Malarz
i
nazywamy go
prymitywista
.
W menu kontekstowym obiektu
prymitywista
znajdujemy
metodę
void rysujDom()
i widzimy ....
Niezupełnie o to nam chodziło, ale na początek i tak nieźle ...
R. Pełka: Języki Programowania, 2008
44
Zadanie domowe
Zmodyfikować klasę
Malarz
w taki sposób,
by obiekt tej klasy dysponował metodą wygenerowania
załączonego obrazu