Programowanie w środowiskach graficznych. Wykład 2.

Podobne dokumenty
Podstawy obsługi wyjątków

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Multimedia JAVA. Historia

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Dokumentacja do API Javy.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Aplikacja wielowątkowa prosty komunikator

Programowanie obiektowe

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie w języku Java

Wykład 8: Obsługa Wyjątków

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Programowanie obiektowe

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Bezpieczne uruchamianie apletów wg

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Wykład 2: Podstawy Języka

Aplikacja wielow tkowa prosty komunikator

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Dawid Gierszewski Adam Hanasko

Remote Method Invocation 17 listopada 2010

Wywoływanie metod zdalnych

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wywoływanie metod zdalnych

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Strumienie i serializacja

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

1 Atrybuty i metody klasowe

Podstawy i języki programowania

Aplikacje w środowisku Java

Java - interfejs graficzny

Tworzenie i wykorzystanie usług

Wykład 7: Pakiety i Interfejsy

Kontenery i komponenty graficzne

Programowanie zdarzeniowe

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie w Internecie. Java

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Aplikacje w środowisku Java

Języki i metody programowania Java INF302W Wykład 2 (część 1)

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

Języki i metody programowania Java. Wykład 2 (część 2)

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Strumienie, pliki. Sortowanie. Wyjątki.

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie Obiektowe Ćwiczenie 4

Aplikacje RMI

Programowanie graficznych interfejsów użytkownika

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Systemy Rozproszone - Ćwiczenie 6

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

KLASY, INTERFEJSY, ITP

Klasy abstrakcyjne, interfejsy i polimorfizm

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Podstawowe części projektu w Javie

Tworzenie elementów graficznych

Podstawy Języka Java

JAVA I SIECI. MATERIAŁY:

Programowanie rozproszone w języku Java

Programowanie współbieżne i rozproszone

Programowanie obiektowe

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Zaawansowane programowanie obiektowe. Wykład 1 JAVA

Tworzenie i obsługa graficznego interfejsu uŝytkownika

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Transkrypt:

Programowanie w środowiskach graficznych Wykład 2. 1

PLAN Interfejsy Wątki Tablice Pakiety 2

super, this class Parent { private int i = 10; void fp() { System.out.print("fp of Parent class\n"+"i= "+i); //end fp //end Parent class Descendant extends Parent { public void fp() { System.out.println("fp of Descendant class"); //end fp public void fd() { super.fp(); //call to Parent's fp // end fd // end Descendant public class klasa1 { public static void main(string args[]) { Descendant ds = new Descendant(); ds.fp(); ds.fd(); //end main //end Inherit2 3

Interfejsy Interfejs klasy wersja klasy pozbawiona pól, oznacza zestaw metod i zastępuje wielodziedziczenie. Interfejs (słowo kluczowe interface) to: zestaw publicznych abstrakcyjnych metod, (domyślnie nie trzeba pisać abstract) oraz ewentualnie statycznych stałych, (domyślnie nie trzeba pisać final static) 4

Przykład /**Interfejs Message, kazda klasa ktora go zaimplementuje musi posiadac metode givereport*/ interface Message { void givereport(); /**kazda klasa ktora implementuje ten interfejs bedzie miala metode givereport - jej dzialanie bedzie zalezec od danej klasy*/ class Client implements Message { int counter=0; /**zeruje licznik i wyswietla komunikat poczatkowy*/ public void startingreport() { counter=0; System.out.println ("To jest raport poczatkowy klienta"); System.out.println ("Counter="+counter); 5

public void givereport() { counter++; System.out.println ("Counter="+counter); class Server { Message object; Server (Message object) { this.object=object; public void execute (int times) { for (int k=0; k<times; k++) object.givereport(); /**Zwieksza licznik i wyswietla jego wartosc - podajac, ze klasa implementuje interfejs Message; zobowiazalismy sie, ze metoda o nazwie givereport bedzie istniala*/ /*typem obiektu jest nazwa interfejsu*/ /**Konstuktor. Jako parametr podajemy dowolny obiekt majacy zaimplementowany interfejs Message; np.: Client*/ /** Wywolujemy metode givereport obiektu z interfejsem Message times razy */ 6

Funkcja main public class Heritage { public static void main (String[] args) { Client our_client = new Client(); our_client.startingreport(); Server our_server= new Server (our_client); our_server.execute(5); 7

8

9

Dziedziczenie wielokrotne C++ Chcemy napisać klasę SeaPlane, która umożliwia przechowywać pojazdy wodne oraz pojazdy powietrzne. 10

java 11

metody 12

Tablice Deklaracja: int tablica []; lub int[] tablica; Przed użyciem należy zaalokować pamięć: tablica[0] = 1; // error tablica = new int[10]; tablicaint[0] =1 ; Można i tak: int tablica[]=new int[5]; int tablica [] = {0,1,2,3,4; Przekroczenie zakresu tablicy spowoduje wyjątek ArrayIndexOutOfBoundsException tablica.length długość tablicy Tablice wielowymiarowe: int tab[][]; tab=new int [5][5]; 13

Konwersje obiektów wymagają jawnego użycia operatora konwersji, w trakcie wykonania programu wykryty zostaje błąd polegający na konwersji do niewłaściwego typu; Konwersję możemy stosować zarówno do klas jak i do interfejsów OK! Pies p = new Pies(); Zwierz z = p; Pies p1 = (Pies) z; ERROR! Zwierz z; Rower r = (Rower) z; // błąd, bo Rower nie pochodzi od Zwierza. 14

Wyjątki Wyjątki pozwalają zachować kontrolę nad przebiegiem wykonania funkcji (metod), a także pojedynczych instrukcji zawartych w funkcjach. Wyjątek jest zdarzeniem, które pojawia się podczas wykonania i przerywa normalną kolejność wykonania instrukcji. W języku Java istnieje bardzo rozbudowana hierarchia (drzewo) predefiniowanych klas wyjątków, których superklasą jest klasa Throwable, a głównymi gałęziami drzewa są klasy Error i Exception. - Wyjątki weryfikowalne - Wyjątki nieweryfikowalne 15

Wyjątki - throw Dla obsługi wyjątków weryfikowalnych wprowadzono pięć słów kluczowych: throw, throws, try, catch i finally. Słowo kluczowe throw służy do jawnego zgłaszania wyjątków nieweryfikowalnych i występuje w instrukcji throw (throw wyrażenie; typu referencyjnego do klasy Throwable lub jej podklas). Zgłoszenie wyjątku w instrukcji throw spowoduje natychmiastowe opuszczenie bloku zawierającego instrukcję throw i znalezienie instrukcji try, której fraza catch przechwyci zgłoszony wyjątek. Jeżeli nie ma takiej instrukcji try, zostanie wywołana metoda UncaughtException i wykonanie programu (lub wątku) zostanie zakończone. 16

Fraza: throws klasa_wyjątków public staic void main(string args[]) throws Exception {/*...*/ void printnumber(int number) throws WrongNumberException {/*...*/ 17

try catch Jeżeli wykonanie pewnej instrukcji programu może spowodować powstanie wyjątkowego zdarzenia, to musi ona być ujęta w blok instrukcji try, po którym muszą wystąpić procedury obsługi wyjątku mające postać frazy catch i bezpośrednio po catch (opcjonalnie) frazy finally. try {I catch(arg1 e1) {I catch(arg2 e2) {I... catch(argn en) {I... finally {I Sterowanie przekazywane jest do pierwszej w kolejności klauzuli catch, której argument" (typ wyjątku) pasuje do typu powstałego wyjątku najpierw podawać BARDZIEJ SZCZEGÓŁOWE TYPY WYJĄTKÓW. 18

Klauzula finally Był wyjątek? NIE wykonaj klauzulę finally Przejdź do następnej linii programu TAK przerwij try uruchom jest klauzulę catch. wykonaj klauzulę finally boolean metoda(...) { try { /*instrukcje,które mogą spowodować wyjątek*/ catch(exception e) { return false; finally { /* uporządkowanie, np. zamknięcie pliku*/ return true; 19

Schemat obsługi wyjątków int a, b, c; String s; try { // wyjątek ArithmeticException s = Integer.toString(a); catch(arithmeticexception ex) { // wyjątek jest obsługiwany w bloku catch s = "*" ; 20

Własne wyjątki Wyjątki są obiektami klas pochodnych od Throwable. Aby stworzyć własny wyjątek, należy zdefiniować odpowiednią klasę. Zgodnie z konwencją dziedziczymy podklasę Throwable - klasę Exception. class NaszWyj extends Exception {...... void naszametoda() throws NaszWyj {..... if(błąd) throw new NaszWyj(ew_param_konstruktora_z_info_o_błędzie); 21

22

Standardowe klasy Javy java.applet, java.awt, java.beans, java.io, java.lang, java.math, java.net, java.rmi, java.security, java.sql, java.text, java.util, javax.accessibility, javax.swing, org.omg. 23

Pakiety java.util.date data = new java.util.date(); import java.util.*; 24

java.lang W pakiecie java.lang zdefiniowana jest klasa Object, która jest klasą nadrzędną wobec wszystkich innych klas Javy. Boolean, Byte, Integer, Long, Double, Character itd., Klasa Math Klasa Thread 25

java.lang 2 klasy obsługujące łańcuchy znaków: String i StringBuffer. Klasa String używana jest do przechowywania i wykonywania operacji na stałych łańcuchach; po utworzeniu obiektu tej klasy nie można zmienić jego wartości. Klasa ta zawiera metody: do sprawdzania poszczególnych znaków, porównywania łańcuchów, wyodrębniania podłańcuchów, tworzenia kopii z zamianą na małe albo duże litery. Klasa StringBuffer implementuje łańcuchy znaków, które mogą być zmieniane. Podstawowe metody tej klasy to append dodająca znaki na końcu bufora i insert wstawiająca znaki w określonym miejscu. Każdy obiekt przydziela bufor na przechowywany łańcuch znaków. Jeżeli całkowita długość łańcucha wzrośnie powyżej rozmiaru bufora, automatycznie przydzielany jest większy. 26

Pakiet java.io definiuje klasy implementujące operacje wejścia-wyjścia. Reader wraz z podklasami: BufferedReader, CharArrayReader, InputStreamReader, FileReader, StringReader Writer wraz z podklasami: BufferedWriter, CharArrayWriter, OutputStreamWriter, FileWriter, PrintWriter, StringWriter. 27

import java.io.*; import java.util.*; public class czytam { public static void main (String args[]){ EasyIn easy = new EasyIn(); System.out.print("enter float: "); System.out.flush(); System.out.println("You entered: " + easy.readfloat() ); float a=easy.readfloat(); System.out.println("You entered: " + a); class EasyIn { static InputStreamReader is = new InputStreamReader( System.in ); static BufferedReader br = new BufferedReader( is ); StringTokenizer st; StringTokenizer gettoken() throws IOException { String s = br.readline(); return new StringTokenizer(s); float readfloat() { try { st = gettoken(); return new Float(st.nextToken()).floatValue(); catch (IOException ioe) { System.err.println("IO Exception in EasyIn.readFloat"); return 0.0F; 28

pakiet java.util szereg klas definiujących różne struktury danych przechowujące inne obiekty. Klasa Vector implementuje tablicę obiektów, która może rosnąć lub zmniejszać się w miarę jak obiekty są dodawane lub usuwane. Wszystkie elementy wektora najwygodniej jest przeglądać wykorzystując interfejs Enumeration 29

Gdy wektor zajmuje całą przydzieloną pamięć, przed dodaniem kolejnego elementu jego rozmiar jest automatycznie zwiększany o wartość capacityincrement. Program może jednak sam zwiększyć rozmiar wektora przed wstawieniem dużej porcji danych, aby uniknąć wielu realokacji. Podklasą klasy Vector jest Stack realizujący kolejkę LIFO obiektów z metodami push i pop. 30

java.util.zip W pakiecie java.util.zip znajdują się klasy pozwalające tworzyć i czytać pliki skompresowane w formatach ZIP i GZIP. 31

Pakiet java.net Pakiet java.net zawiera klasy realizujące połączenia sieciowe zarówno na poziomie gniazd, jak i adresów URL wskazujących zasoby w WWW. Podstawowe klasy to: Socket, URL, URLConection. Pakiet java.sql Jednolity standard dostępu do dowolnych relacyjnych baz danych. Klasy z tego pakietu implementują połączenia z bazą danych, zapytania SQL, wyniki tych zapytań itp. Driver JDBC (Java DataBase Conectivity) 32

java.rmi RMI (Remote Method Invocation) zawarty w java.rmi umożliwia tworzenie rozproszonych aplikacji w Javie. RMI zapewnia mechanizm, poprzez który odbywa się komunikacja pomiędzy serwerem i klientem oraz przesyłane są dane w obie strony. org.omg Wspiera powszechnie przyjęty standard modelu rozproszonych obiektów CORBA (Common Object Request Brokerage Architecture). Pozwala on na komunikację pomiędzy obiektami bez względu na platformę systemu operacyjnego, ani użyty języka programowania. 33

pakiet java.awt Aplety i aplikacje Javy komunikują się z użytkownikiem wykorzystując klasy z pakietu java.awt składające się na graficzny interfejs użytkownika AWT (Abstract Window Toolkit). AWT dostarcza typowe komponenty graficzne takie, jak klawisze, pola do wprowadzania tekstu, listy wyboru itd. poprzez klasy: Button, Checkbox, Choice, Label, List, Menu, Scrollbar, TextArea, TextField będące pochodnymi klasy Component. Wykorzystując klasę Canvas, można rysować dowolne obrazy graficzne na ekranie; Po dodaniu odpowiedniej obsługi zdarzeń można zdefiniować dowolny własny komponent. 34

model obsługi zdarzeń W modelu 1.1 AWT zdarzenia są generowane przez źródła, którymi mogą być komponenty interfejsu użytkownika, myszka, klawiatura itd. Może być wydelegowany jeden lub więcej odbiorców zdarzenia pochodzącegocego od określonego źródła, który jest obiektem dowolnej klasy implementującej przynajmniej jeden z interfejsów obsługi zdarzeń takich, jak: ActionListener, KeyListener, MouseListener. 35

pakiet javax.swing W skład JDK 1.2 został włączony pakiet javax.swing nazywany również Java Foundation Classes (JFC), znacznie rozszerzający możliwości funkcjonalne interfejsu graficznego użytkownika. Pakiet ten zawiera znacznie więcej komponentów graficznych, pozwala dynamicznie imitować znane środowiska graficzne (np. Windows, CDE/Motif), umożliwia korzystanie z urządzeń pomocniczych w odczytywaniu informacji (jak np. czytniki ekranu, wyświetlacze Braille a), zawiera bogatą bibliotekę do tworzenia dwuwymiarowej grafiki, wspomaga technikę przeciągnij i upuść pomiędzy aplikacjami Javy i aplikacjami w danym systemie operacyjnym. 36

import java.awt.*; import java.awt.event.*; public class HelloApp extends Frame implements WindowListener { public HelloApp () { super(); addwindowlistener(this); setsize(320, 200); setvisible(true); public void paint(graphics gdc) { gdc.drawstring ("To jest aplikacja", 120, 100); public static void main(string args[]) { new HelloApp(); public void windowclosing(windowevent e){ System.exit(0); public void windowclosed(windowevent e){ public void windowopened(windowevent e){ public void windowiconified(windowevent e){ public void windowdeiconified(windowevent e){ public void windowactivated(windowevent e){ public void windowdeactivated(windowevent e){ 37

import java.awt.*; import java.awt.event.*; public class HelloApp extends Frame implements WindowListener { public HelloApp () { super(); addwindowlistener(this); setsize(320, 200); settitle("moja aplikacja w Javie"); MenuBar menubar = new MenuBar(); setmenubar(menubar); Menu menu = new Menu("Plik"); menu.add(new MenuItem("Zamknij")); menubar.add(menu); setvisible(true); public void paint(graphics gdc) { gdc.drawstring ("To jest aplikacja", 120, 100); public static void main(string args[]) { new HelloApp(); public void windowclosing(windowevent e){ System.exit(0); public void windowclosed(windowevent e){ public void windowopened(windowevent e){ public void windowiconified(windowevent e){ public void windowdeiconified(windowevent e){ public void windowactivated(windowevent e){ public void windowdeactivated(windowevent e){ 38