background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

nazwach 

hello1

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

background image

11

R. Pełka:  Języki Programowania, 2008

21

Obiekty – sedno programowania

Obiekty

są podstawą idei 

progra-

mowania obiektowego

.

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

background image

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?

background image

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

trojkat

Następnie wywołujemy kolejno metody:

obiekt 

kwadrat

metoda

moveRight()

obiekt 

kolo

metoda

moveDown()

obiekt 

kwadrat

metoda

moveRight()

obiekt 

kwadrat

metoda

moveUp()

background image

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

)

background image

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

background image

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ę

background image

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

background image

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

background image

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

background image

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

dach

Nie są to liczby, ale obiekty odpowiednio 
klas: 

Circle

Square

Square

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...

background image

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      

}

background image

22

R. Pełka:  Języki Programowania, 2008

43

Uruchamiamy prymitywistę

wschód słońca
na kempingu ?

Tworzymy obiekt klasy 

Malarz

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