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 parametró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/