JAVA

Transkrypt

JAVA
[1]
Programowanie Multimediów
JAVA
wprowadzenie do
programowania (2/3)
[2]
Programowanie Multimediów
Programowanie Multimediów
Aplikacja klasa posiadająca metodę główną:
public static void main ( String args [ ] ) {
// opis metody
}
Tablica argumentów args służy do przekazywania aplikacji parame­trów w
wierszu poleceń. Uruchomienie aplikacji Osoba zleceniem
java Osoba Jan Kowalski
jest równoważne instrukcjom przypisania wartości
args[0] = "Jan";
args[1] = "Kowalski";
Pamiętamy, że w C element args[0] przechowuje nazwę programu. W Javie nie jest to konieczne, bo nazwę klasy
uruchamianej i tak musimy podać interpreterowi.
Testowanie aplikacji w środowisku JDK przebiega w taki sposób:
● Przepisujemy tekst źródłowy korzystając z dowolnego edytora, np. Notatnika (Notepad) i zapisujemy go w katalogu
roboczym jako zbiór tekstowy o nazwie zgodnej z nazwą klasy i rozszerzeniu java, czyli jako zbiór <Nazwa>.java;
● Otwieramy okno MS-DOS w tym katalogu i dokonujemy kompilacji zbioru źródłowego za pomocą zlecenia
javac <Nazwa>.java. W przypadku bezbłędnego przebiegu kompilacji powstanie zbiór <Nazwa>.class zawierający
kod bajtowy;
● Uruchamiamy aplikację za pośrednictwem interpretera, czyli wykonujemy zlecenie java <Nazwa>
[3]
Programowanie Multimediów
Przykładowa aplikacja
[4]
class HelloWorld
{
public static void main(String args[])
{
System.out.println("Hello World");
}
}
Programowanie Multimediów
Aplety
(applets = small applications) to małe programy umieszczane na stronach
WWW. Ich przeznaczeniem jest wyświetlanie graficznych elementów, komunikacja z
czytelnikiem strony za pomocą myszy i klawiatury, odtwarzanie plików dźwiekowych.
W ten sposób strony WWW stają się dynamiczne i interaktywne. Podobne efekty
można uzyskać za pomocą DHTML / JavaScript.
Aplet jest klasą pochodną klasy Applet umieszczonej w pakiecie java.applet:
import java.applet.Applet;
public class Pusty extends java.applet.Applet {
…
// ciało apletu
}
[5]
<HTML>
<TITLE> Pusty aplet </TITLE>
<BODY>
<HR>
<APPLET CODE=Pusty.class WIDTH=100 HEIGHT=50>
</APPLET>
<A HREF="Pusty.java"> Plik źródłowy. </A>
</BODY>
</HTML>
Programowanie Multimediów
Przykładowy applet
[6]
import java.awt.*;
public class HelloWorld extends java.applet.Applet
{
public void init()
{
setBackground(Color.white);
}
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawString("Hello World",20,14);
}
}
<html>
<head><title>Hello World</title></head>
<body>
<applet code="HelloWorld.class" width="100" height="20"></applet>
</body>
</html>
[7]
Programowanie Multimediów
Klasa, jej zmienne i metody
Klasa jako szablon do tworzenia obiektów (instancji) określonego rodzaju.
Opis klasy:
class < Nazwa > { [ < deklaracje zmiennych > ]
[ < konstruktory > ] [ < opisy metod > ] }
Przykład:
class Osoba
{
// pusty opis
}
Komentarze:
// komentarz jednowierszowy
/* komentarz
kilkuwierszowy */
/** komentarz wykorzystywany przy automatycznym tworzeniu dokumentacji */
[8]
Programowanie Multimediów
Zmienna – miejsce na zapisanie pewnej cechy
obiektu.
Deklaracja zmiennej:
<typ> <nazwa> ; |
<typ> <nazwa> = <wartość początkowa> ; |
<typ> <nazwa_1> , <nazwa_2> , …… ;
Przykłady:
1)
2)
3)
String imię;
String nazwisko;
String imię, nazwisko;
String imię = „nieznane”;
String nazwisko = „nieznane”;
Zmienna statyczna– miejsce na zapisanie wspólnej
cechy obiektów należących do
danej klasy.
Deklaracja zmiennej statycznej:
static < typ > < nazwa > ; |
static < typ > < nazwa > = < wartość początkowa > ; |
static < typ > < nazwa_1 > , < nazwa_ 2> , …… ;
Przykład:
static int liczba = 0;
Stałe w Javie deklarowane są jako ostateczne
zmienne statyczne:
final static < typ > <nazwa> = < wartość > ;
Przykład:
final static String NAGŁÓWEK = „Przykladowa
Aplikacja”
Programowanie Multimediów
Metoda – miejsce na opisanie określonej czynności, którą obiekt potrafi wykonać.
Opis metody:
[ < modyfikator dostępu >] < typ zwracanej wartości > < nazwa > ( [ < lista parametrów > ] )
{
[ < deklaracje zmiennych lokalnych > ]
[ < instrukcje >]
}
Przykład:
void jestem ( ) {
System.out.println ( „Jestem ”+ imię + " " + nazwisko );
}
[9]
Metoda statyczna – wspólna dla całej klasy
– służy do wykonywania
działań na zmiennych
statycznych.
Przykład:
static void nagłówek ( ) {
System.out.println ( NAGŁÓWEK );
}
[10]
Programowanie Multimediów
W zasadzie każda klasa może posiadać własną metodę main,
ponieważ uruchamiając aplikację wywołujemy tylko jedną klasę.
Metody główne pozostałych klas można wykorzystywać do ich
testowania.
Programowanie Multimediów
Instrukcja warunkowa
Instrukcja warunkowa if przyjmuje postać:
if (wyrażenie_logiczne)instrukcja else instrukcja;
lub
if (wyrażenie_logiczne) instrukcja
Wykonanie instrukcji polega na obliczeniu wartości wyrażenia_logicznego i, jeśli jest ona równa true, to wykonaniu podlega pierwsza instrukcja, w przeciwnym
przypadku (dla wartości równej false), wykonywana jest
instrukcja umieszczona po słowie kluczowym else (jeśli
występuje) lub następna instrukcja programu.
[11]
Programowanie Multimediów
Instrukcja warunkowa “switch”
W Javie istnieje także możliwość łatwego programowania warunków, przyjmujących
wartości ze zbioru większego, niż dwuelementowy (jak to ma miejsce w instrukcji if).
Stosujemy wtedy instrukcję wyboru switch o postaci:
switch(wyrażenie_warunkowe)
{
case stała1: instrukcja; break;
case stała2: instrukcja; break;
...
case stałaN: instrukcja; break;
[default: instrukcja]
}
W
pierwszym
kroku
wykonania
instrukcji
obliczana
jest
wartość
wyrażenia_warunkowego (które przyjmuje wartości całkowite), a następnie porównywana jest ona kolejno z wartościami stałych umieszczonych po słowach case. Sterowanie jest przekazywane do tej instrukcji, w której wartość stałej jest równa wartości
wyrażenia_warunkowego. Jeśli żadna stała nie ma wartości identycznej z wartością
wyrażenia, to wykonywana jest instrukcja umieszczona po słowie default (jeśli jest
zdefiniowane) lub następna instrukcja w programie.
[12]
Programowanie Multimediów
Instrukcje iteracyjne
W Javie mamy do dyspozycji klasyczny zestaw instrukcji
iteracyjnych:
•instrukcję while, pozwalającą programować obliczenia
tak długo, jak prawdziwy jest pewien warunek,
•instrukcje do ... while, podobną do poprzedniej, z
pewną, opisaną niżej modyfikacją.
•instrukcję for, służącą do programowania obliczeń
powtarzających się tak długo, jak długo pewna zmienna sterująca przyjmuje wartości z pewnego zbioru,
[13]
Programowanie Multimediów
Blok instrukcji
Instrukcja złożona to ciąg instrukcji pomiędzy nawiasami { i }, nazywana blokiem instrukcji.
Jeśli zadeklarujemy w bloku zmienną to będzie ona widoczna tylko w
tym bloku.
Widoczność zmiennych w bloku instrukcji
Zmienna ta została zadeklarowana tu dwukrotnie, dodatkowo jeszcze
jako zmienna różnych typów:
{
{
int i = 10;
}
{
long i = 5; // możemy tu ponowanie zadeklarować zmienną
// nazwie 'i', ponieważ nie jest tu widoczna zadeklarowana
// we wcześniejszym bloku zmienna o tej samej nazwie
}
}
[14]
Programowanie Multimediów
Instrukcje pętli
For ( < inicjalizacja > ; <test> ; <inkrementacja > )
Przykład:
< instrukcja >
for ( int i =0; i < tab.length; i++ ) tab [ i ] = i ;
while ( < warunek > ) < instrukcja >
Przykład:
int i = 0;
while ( i < tab.length ) { tab [ i ] = i ; i++ ; }
do < instrukcja > while ( < warunek > );
Przykład:
int i = 0;
do {tab [ i ] = i ; i++ ; } while ( i < tab.length ) ;
[15]
Programowanie Multimediów
Tablice
Tablice w Javie są obiektami. Deklaracja zmiennej tablicowej ma postać:
<typ> [ ] <nazwa>; |<typ> <nazwa> [ ];
Przykład:
String [ ] tab1;
int [ ] tab2;
int tab3 [ ];
// tablica napisów
// tablica liczb całkowitych
// alternatywny zapis
W momencie tworzenia nowego obiektu musimy podać wymiar tablicy:
tab1 = new String [ 3 ];
Zapis skrócony:
String [ ] tab1 = new String [ 3 ];
[16]
[17]
Programowanie Multimediów
Można od razu nadać elementom tablicy wartości początkowe:
String [ ] tab1 = {"Adam", "Zofia", "Marta"};
int [ ] tab2 = { 1, 2, 3 };
Do określenia liczby elementów tablicy służy zmienna length :
int i = tab2.length;
// wynik i = 3
Podobnie jak w innych językach, dostęp do elementu tablicy uzyskujemy
podając wskaźnik. Przebiega on wartości od 0 do length - 1 . Tak więc
wartość początkowe tablicy tab1 moglibyśmy nadać w taki sposób:
tab1[ 0 ] = "Adam"; tab1[ 1 ] = "Zofia"; tab1[ 2 ] = "Marta";
Programowanie Multimediów
Elementem tablicy może być dowolny obiekt, a zatem
również tablica. W ten sposób możemy tworzyć tablice
wielowymiarowe. Na przykład, deklaracja
int [ ] [ ] jeden = {
{ 1, 0, 0 },
{ 0, 1, 0 },
{ 0, 0, 1 }
};
tworzy macierz jednostkową drugiego rzędu.
Przykład:
float [ ] [ ] tab = new float [ 3 ] [ ];
tab[ 0 ] = new float [ 5 ];
tab[ 1 ] = new float [ 3 ];
tab[ 2 ] = new float [ 2 ];
tab[ 1 ] [ 3 ] = 12.34; // podwójny błąd !
Uwagi:
1.kompilator sprawdza zakres indeksu;
2.przy tworzeniu obiektu wystarczy podać pierwszy
wymiar tablicy;
3.wymiary pod-tablic mogą być dowolne.
[18]
Programowanie Multimediów
Podobnie jak inne nowoczesne języki, Java daje użytkownikowi bogaty zestaw
gotowych klas. Można je znaleźć w bibliotece klas java. Należą do niej następujące
pakiety:
[19]
java.lang
java.io
java.util
java.awt
java.applet
java.net
java.math
java.text
java.security
java.sql
podstawowe elementy języka
metody wejścia-wyjścia
metody pomocnicze
elementy graficzne
elementy apletów
elementy sieciowe
metody matematyczne
metody przetwarzania tekstu
elementy systemu bezpieczeństwa
elementy dostępu do baz danych
Programowanie Multimediów
Podstawowe typy zmiennych
[20]
boolean b = true; // deklaracja i inicjacja zmiennej logicznej b
char znak1='A';
char znak2='\u0104'; // znak Ą w Unicode kod 0104
char znak3='ó';
byte
short
int
long
float
float
double
double
i
j
k
l
=
=
=
=
x
y
z
d
22;
011;
0xFF;
1024L;
=
=
=
=
//
//
//
//
5.24f;
2.3E+5f;
6.32d;
3E+12;
wartość
wartość
wartość
wartość
w systemie dziesiętnym
w systemie ósemkowym
w systemie szesnastkowym
typu long
Programowanie Multimediów
Klasy abstrakcyjne - "abstract class"
Klasa abstrakcyjna (abstract class) tworzona jest w sytuacji gdy konieczne
jest utworzenie grupy klas posiadających wspólne elementy (metody, pola).
Klasa bazowa takiej grupy klas stanowi wzorzec dla klas pochodnych.
Jednocześnie istnienie obiektu klasy bazowej nie ma większego sensu ponieważ
opisuje ona jedynie wspólne cechy innych klas - sama nie opisuje żadnego
konkretnego obiektu.
class Okrag extends Figura {...}
abstract class Figura {
int x,y;
void rysuj();
}
[21]
Programowanie Multimediów
Interfejsy - "interface"
W języku Java wprowadzono unikalny rodzaj klasy w pełni abstrakcyjnej - interfejs
(interface). Elementami interfejsu mogą być tylko metody abstrakcyjne oraz pola
statyczne (static) i stałe (final). Zastosowanie słów kluczowych abstract, static i final
nie jest konieczne w definicji interfejsu - status elementów interfejsu jest dobierany
domyślnie. W języku Java klasa może dziedziczyć (extends) tylko po jednej klasie lecz
może implementować (implements) więcej niż jeden interfejs. W takim przypadku
nazwy kolejnych interfejsów podajemy po przecinku, np.:
class Samochod implements Podwozie, Silnik, Nadwozie {...}
interface Silnik {
static final String typSilnika = "Spalinowy";
abstract void startSilnik();
}
[22]
Programowanie Multimediów
Implementacja a dziedziczenie
[23]
Programowanie Multimediów
Kolory
są Javie są obiektami klasy Color. Klasa ta udostępnia metody:
setColor ( ), setBackground ( ), setForeground ( ), których
argumentami są kolory. Można korzystać z zestawu standardowych kolorów
( Color.white, Color.black, Color.red itp.) lub tworzyć własne
kolory jako dowolne kombinacje składowych RGB:
Color nowy = new Color ( 140, 120, 50 );
Wartości argumentów muszą być w przedziale 0÷255. Dodając do nazwy
metody rysującej figury przedrostek fill można wypełniać figurę kolorem.
Metoda setColor() ustala kolor, którym realizowane są kolejne operacje
graficzne. Metody setBackground() i setForeground() ustalają,
odpowiednio, kolor tła apletu i kolor wszystkich elementów rysowanych na tym
tle.
Są
jeszcze
metody
getColor(),
getBackground(),
getForeground() zwracające odpowiednie kolory apletu.
[24]
Programowanie Multimediów
Napisy i czcionki
Czcionki są w Javie obiektami klasy Font. Aby wyświetlić tekst w trybie
graficznym, należy:
·utworzyć obiekt zawierający czcionkę;
·zadeklarować tę czcionkę jako aktualnie używaną;
·skorzystać z metody rysowania tekstu lub znaku.
Do zgłaszania aktualnie używanej czcionki służy metoda setFont ( ).
Napis rysowany jest za pomocą metody drawString ( ), a znak – za
pomocą metody drawChars ( )
[25]
[26]
Programowanie Multimediów
Programowanie Multimediów
Wielowątkowość w apletach
Każdy aplet wykonywany jest w kilku wątkach. Metody apletu
odpowiedzialne za rysowanie (paint i update) wołane są z wątku AWT
obsługującego rysowanie i obsługę zdarzeń (ang. event handling).
Metody, które stanowią szkielet apletu (tj. init, start, stop, destroy)
wołane są z wątku zależnego od aplikacji, w której uruchomiony jest
aplet.
Wiele przeglądarek internetowych dla każdego apletu znajdującego się
na stronie przydziela oddzielny wątek służący do wołania metod
stanowiących szkielet apletu. Aby ułatwić zabicie wszystkich wątków
danego apletu, niektóre przeglądarki dla każdego apletu przydzielają
jedną grupę wątków.
[27]
Programowanie Multimediów
Wielowątkowość w apletach
Gdy aplet np. podczas inicjalizacji (metoda init) ma np. wczytać obrazki,
to nie może wykonać żadnych innych czynności, zanim nie zakończy
swojej inicjalizacji. W takim przypadku należy takie czasochłonne
czynności umieścić w oddzielnym wątku. Nasz aplet zostanie
uruchomiony i może wykonać jakieś inne zadania (np. inny wątek
odczyta czas z serwera - usługa DTime) w czasie oczekiwania na
dokończenie operacji ładowania obrazków.
Aplety zazwyczaj wykonują dwa rodzaje czasochłonnych zadań:
zadania wykonywane tylko raz (np. ładowanie obrazków, nawiązanie
połączenia sieciowego)
i zadania wykonywane w pętli (np. odgrywanie dźwięków w tle).
[28]
Programowanie Multimediów
Wielowątkowość w apletach
[29]
[30]
Programowanie Multimediów
Aplet i aplikacja - jednocześnie...
To jest możliwe. Aplikacja może być uruchamiana jako autonomiczny program
albo jako aplet.
Aplikacja autonomiczna wymaga statycznej (i publicznej) metody
main(), bez której nie da się uruchomić programu.
Aplet z kolei wymaga metody init().
W programie (aplet/aplikacja) powinniśmy więc w głównej klasie oprócz metody
init() umieścić również metodę main().
Kolejna różnica: uruchamiany na stronie internetowej aplet nie potrzebuje okna
jako kontenera na komponenty, podczas gdy samodzielna aplikacja musi takie
okno utworzyć. Trzeba zatem utworzyć dodatkową klasę, np. za pomocą Swinga.
[31]
Programowanie Multimediów
Model bezpieczeństwa w Javie
Pierwotny system bezpieczeństwa zastosowany w platformie Javy jest znany jako
model piaskownicy (ang. sandbox model), który został stworzony, aby zapewnić
kontrolowane środowisko, w którym można uruchamiać "niepewny" kod Javy
pochodzący z sieci. Bezpieczeństwo Javy w tym modelu zapewniane jest przez
kilka mechanizmów:
Język jest tak zaprojektowany, aby uniknąć potencjalnych zagrożeń
spowodowanych pomyłkami lub świadomym działaniem, jest to min.: odpowiednie
zarządzanie pamięcią, zbieranie nieużytków (ang. Garbage Collection),
sprawdzanie zakresów tablic
W VM wbudowany jest mechanizm weryfikacji kodu wirtualnej maszyny Javy tak
by zezwolić na wykonywanie kodu zawierającego jedynie dozwolone instrukcje
maszynowe
Zastosowano izolowane przestrzenie nazw tak by klasy z dwóch różnych Źródeł
(ale o tej samej nazwie) mogły być jednocześnie używane bez powodowania
niejednoznaczności
Dostęp (odwołania) do kluczowych zasobów jest kontrolowany przez klasę
zarządzającą bezpieczeństwem (ang. SecurityManager)
[32]
Programowanie Multimediów
Model bezpieczeństwa w Javie
Dla takiego modelu bezpieczeństwa Sun zaproponował następujące restrykcje stosowane
do appletów (to jakie rzeczywiście zastosowano restrykcje zależy od producenta
przeglądarki, do którego należy implementacja klasy SecurityManager):
* Applet nie może ładować bibliotek ani definiować natywnych (ang. native) metod (tak wiec
jest ograniczony do używania klas, które są dostępne w przeglądarce)
* Applet nie może czytać ani pisać do pliku znajdującego się na komputerze, na którym jest
uruchomiony (ale może czytać z pliku określonego przy pomocy URL)
* Applet nie może łączyć się z innymi komputerami oprócz tego, z którego został pobrany
ani przyjmować połączeń przychodzących z sieci
* Applet nie może uruchamiać żadnego programu znajdującego się na komputerze na
którym jest wykonywany
* Applet nie może czytać niektórych informacji o systemie
* Applet nie może korzystać ze schowka systemowego
* Applet nie może czytać punktów z ekranu
[33]
Programowanie Multimediów
Model bezpieczeństwa w Javie
Podpisywanie appletów jest dostępne od wersji 1.1 języka Java i
najpopularniejsze przeglądarki obecne na rynku wspierają tą
właściwość środowiska Javy.
Aby skorzystać z tej możliwości należy spakować applet wraz z
towarzyszącymi klasami oraz dołączyć certyfikat.
Dokumentacja firmy Sun definiuje certyfikat z publicznym kluczem
jako cyfrowo podpisane oświadczenie pochodzące od pewnej
jednostki, mówiące, że klucz publiczny (oraz pewna inna informacja)
innej jednostki posiada pewną wartość.
[34]
Programowanie Multimediów
Literatura
B. Eckel, Thinking in Java, http://www.mindview.net/Books/TIJ/
K. Arnold, J. Gosling: Java, WNT, Warszawa, 1999.
B. Boone: Java dla programistów C i C++, WNT, Warszawa, 1998.
E. Ladd, J. O’Donnell i inni: Java, LYNX-SFT, Warszawa, 1999.
L. Lemay, Ch. L. Perkins: Java 1.1, Helion, Warszawa, 1998.
S. Lalani, K. Jamsa: JAVA – biblioteka programisty, MIKOM, Warszawa, 1997.
Artur Tyloch : Java - nowy standard programowania w Internecie
http ://republika.pl/arturt/java/index.html
JavaSoft – Sny na Javie http://www.javasoft.pl/