background image

Języki Programowania 

 

 

 

Podstawy Java. Środowisko BlueJ. 

background image

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

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

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

Kompilacja 

Kompilator

 

tłumaczy program zapisany w języku 

wysokiego poziomu na język maszynowy 

my_prog.c 

my_prog.exe 

program wykonywalny 

background image

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

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

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

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 

 

background image

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

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

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

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

background image

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

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

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

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 

background image

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

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 

background image

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

A. Poniecki 

13 

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 źródłowe bibliotek (po rozpakowaniu src.zip) 

background image

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

14 

JDK 

– główne elementy 

Java Virtual Machine 

java.exe 

Narzędzia dokumentacji 

javadoc.exe 

Kompilator Java 

javac.exe 

background image

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

15 

Ś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

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

16 

Ś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 

background image

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

17 

Ś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

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

18 

Zaczynamy pracę z BlueJ 

Klikamy dwukrotnie 
na ikonę BlueJ 

Otwieramy nowy 
projekt 

New Project 

 
Pojawia się wiele 
predefiniowanych 
projektów (klas) 

Wybieramy nazwę 

przyklady 

background image

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

19 

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

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

20 

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 

background image

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

21 

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 

background image

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

22 

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

background image

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

23 

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

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

24 

Dlaczego nie widać kółka? 

Dokonujemy 

inspekcji

 

obiektu 

kolo

 

wybierając 

z menu kontekstowego 
opcję 

Inspect 

background image

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

25 

isVisible = false 

Otwiera się okno inspektora 

Parametr 

isVisible 

 

ma wartość 

false 

 
Należy go zmienić,  
ale w jaki sposób? 

background image

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

26 

Metoda 

makeVisible() 

W menu kontekstowym obiektu 
kolo znajdujemy 

metodę 

makeVisible() 

Klikamy na tę opcję i .... 
Koło pojawia się w oknie konsoli 

BlueJ 

background image

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

27 

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() 

background image

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

28 

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 

background image

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

29 

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

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

30 

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

background image

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

31 

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

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

32 

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 

 

background image

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

33 

Nowa klasa 

– Malarz 

Otwieramy w 

BlueJ

 projekt 

shapes

 

i tworzymy nową klasę 

o nazwie 

Malarz 

 

Następnie zaczynamy edytować 
nową klasę 

background image

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

34 

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 

background image

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

35 

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

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

36 

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( ); 

background image

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

37 

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

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

38 

Klasa Malarz z obiektami 

Klasa może być już 
kompilowana 
 
Można tworzyć obiekty 
 
 
 
 
W czasie kompilacji nie 
wystąpiły żadne błędy 

background image

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

39 

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

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

40 

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

 i 

Triangle 

background image

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

41 

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

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

42 

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

)

background image

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

43 

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

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

44 

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

background image

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

45 

Zadanie domowe 

Zmodyfikować klasę 

Malarz

 

w taki sposób, 

by obiekt tej klasy dysponował metodą wygenerowania 
załączonego obrazu