Aplikacje w Javie wykład 10 Strumienie (Klasa Files, Formatter, serializacja obiektów) Wątki (tworzenie i uruchamianie, zadania i wykonawcy)

Wielkość: px
Rozpocząć pokaz od strony:

Download "Aplikacje w Javie wykład 10 Strumienie (Klasa Files, Formatter, serializacja obiektów) Wątki (tworzenie i uruchamianie, zadania i wykonawcy)"

Transkrypt

1 Aplikacje w Javie wykład 10 1 Strumienie (Klasa Files, Formatter, serializacja obiektów) Wątki (tworzenie i uruchamianie, zadania i wykonawcy) Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, C. S. Horstmann, G. Cornell, Java. Podstawy, Helion, Gliwice 2008

2 Klasa Files 2 Strumienie we/wy są użyteczne, ale wiele operacji na plikach łatwiej jest wykonywać przy pomocy statycznych metod klasy Files z pakietu java.nio.file (To jest inna klasa niż File). Zapewnia ona ulepszoną reprezentację nowoczesnych systemów i obiektów plikowych (m.in. większą liczbę arybutów obiektów plikowych, obsługę linków symbolicznych) i w przeciwieństwie do klasy File dostarcza metod wejścia-wyjścia dla plików. Większość metod klasy Files ma argumenty typu Path, reprezentują one ścieżki obiektów plikowych (plików, katalogów) w sposób niezależny od konkretnego systemu plikowego. Ścieżki te uzyskujemy przy pomocy metody get z klasy Paths. Przykłady działania dla systemu Windows: Paths.get("C:/Temp/plik1.txt"); //absolutna ścieżka do pliku Paths.get("in1.txt"); Paths.get("."); //plik in1.txt z bieżącego katalogu //katalog bieżący Paths.get("../p2.txt"); //p2.txt z nadkatalogu bieżcego katalogu Paths.get("/"); Paths.get("/Temp"); Paths.get("Temp"); //główny katalog (root) bieżącego dysku //katalog Temp bieżącego dysku //podkatalog Temp bieżącego katalogu Paths.get("C:", "Temp", "p.txt"); //plik C:\Temp\p.txt

3 Klasa Files - metody KOPIOWANIE PLIKÓW. Metoda Files.copy(Path source, Path target, CopyOption... options) umożliwia kopiowanie plików z uwzględnieniem podanych opcji: REPLACE_EXISTING - zastąpienie pliku w przypadku, gdy docelowy plik istnieje (domyślnie wyjatek FileAlreadyExistsException) COPY_ATTRIBUTES - dla kopii pliku mają być zachowane atrybuty oryginału Metoda Files.move() - pozwala na zmianę nazwy lub umiejscowienia pliku. import java.nio.file.*; import static java.nio.file.standardcopyoption.*; public class FcopyDemo{ static void copyfile(string srcfn, String destfn, CopyOption... opt) throws IOException{ Files.copy(Paths.get(srcFn), Paths.get(destFn), opt); 3

4 Klasa Files - metody public static void main(string[] args)throws IOException{ copyfile("in1", "out2"); //wyjatek jeśli out2 istnieje copyfile("in1", "out1", REPLACE_EXISTING); //jeśli out1 istnieje to będzie zastąpiony copyfile("in1", "/Temp/in1",COPY_ATTRIBUTES); //kopiuje in1 do katalogu Temp z zachowaniem atrybutów PRZETWARZANIE WIERSZY PLIKU TEKSTOWEGO. Metoda static List<String> readalllines(path path, Charset cs) zwraca listę wszystkich wierszy pliku, wymagane jest podanie strony kodowej jako obiektu klasy Charset (domyślna strona kodowa Charset.defaultCharset()) for (String line: Files.readAllLines(Paths.get("in1"), System.out.println(line); Charset.defaultCharset()) ) 4

5 Klasa Files - metody CZYTANIE I ZAPISYWANIE BAJTÓW. Metoda Files.getAllBytes(Path) zwraca zawartość pliku jako tablicę bajtów. Tablicę możemy zapisać do pliku static Path write(path path, byte[] bytes, OpenOption... options) Z metod tych korzystamy, gdy działamy na plikach binarnych, ale można ich użyć również do plików tekstowych. Dokonajmy zamiany znaków tabulacji na spację w pliku. Operacje readall...() jednokrotnie przetwarzają i od razu zamykaja pliki (tak samo Files.write(...)). void tabtospace(string fname) throws IOException { Path fpath = Paths.get(fname); byte[] cont = Files.readAllBytes(fpath); for(int i=0; i<cont.lenght; i++){ if(cont[i]==0x09) cont[i] = (byte) ' '; //09 to hex kod znaku tabulacji Files.write(fpath, cont); 5

6 Klasa Files - metody CZYTANIE I ZAPIS WIERSZY. Druga wersja metody Files.write(): static Path write(path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options) ma jako argument listę wierszy, które mają być zapisane do pliku. Łatwo więc można zmienić kodowanie pliku. Do ustalania stron kodowych użyjemy statycznej metody forname z klasy Charset: Path file = Paths.get("page.html"); Charset cpin = Charset.forName("Cp1250"); cpout = Charset.forName("ISO8859-2"); Files.write(file, Files.readAllLines(file, cpin), cpout); Przedstawione metody readall... nadają się do operowania na stosunkowo niewielkich plikach, ponieważ wczytują do pamięci od razu całą zawartość pliku. Dla bardzo dużych plików powinniśmy użyć innych metod np. strumieni we/wy. Jeśli chcemy czytać plik sukcesywnie (i być może nie do końca), lepiej użyć Scannera. Dla skanera źródłem danych oprócz File, String, może być Path oraz dowolny Reader i InputStream. W konstruktorze Scannera możemy podać stronę kodową wczytywanego pliku (jego treść będzie dekodowana do Unicodu zgodnie z tą stroną). Scanner zamykamy za pomocą metody close() (nie zgłasza ona wyjątków kontrolowanych ) lub używamy try-with-resources. 6

7 Formatter 7 Klasa java.util.formatter zapewnia możliwości formatowania danych. Tworząc formator (za pomocą wywołania konstruktora) możemy określić: destynację formatowanych danych(dokąd mają być zapisane), którą może być: File, String, OutputStream, obiekty klas implementujących interfejs Appendable, czyli: BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter, LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder (szybsza wersja StringBuffer, bo niesynchronizowana), StringWriter, Writer lokalizację (ustawienia regionalne, reprezentowane przez obiekt klasy Locale), wpływającą m.in. na reprezentację liczb i dat, stronę kodową (do kodowania napisów) - dla strumieni, plików i stringów Uwaga: formatory dla destynacji implementującyh interfejs Closeable (m.in. pliki, strumienie) powinny być po użyciu zamykane lub wymiatane (close(), flush()), co powoduje zamknięcie lub wymiecenie buforów tych destynacji.

8 Formatter 8 Formatowanie polega na wywołaniu jednej z dwóch wersji metody format (na rzecz formatora): Formatter format(locale l, String fmt, Object... args) Formatter format(string fmt, Object... args) Łańcuch formatu (parametr fmt) zawiera dowolne ciągi znaków oraz specjalne symbole formatujące. Dalej następują dane do wstawienia w łańcuch formatu w miejscu elementów formatu i do sformatowania według zasad określonych przez te elementy (zmienna liczba argumentów dowolnego typu formalnie Object). Dzięki autoboxingowi nie ma problemu z formatowaniem danych typów prostych. Dla uproszczenia dostępne są: statyczne metody format w klasie String, metody format i printf (działające tak samo) w klasach PrintStream i PrintWriter, wyprowadzajace sformatowane napisy na wyjście.

9 Formatter 9 Elementy formatu mają następującą ogólną postać %[arg_ind$][flags][width][.precision]conversion gdzie arg_ind$ numer argumentu (z listy argumentów args) do sformatowania przez dany element; numeracja zaczyna się od 1; poczynając od 2-go elementu można zastosować w tym miejscu znak <, co oznacza, że dany element ma być zastosowany wobec argumentu użytego w poprzednim formatowaniu flags znaki modyfikujące sposób formatowania (są różne dla różnych typów konwersji conversion) width minimalna liczba znaków dla danego argumentu w wynikowym napisie.precision liczba pokazywanych miejsc dziesiętnych (dla liczb rzeczywistych) lub maksymalna liczba wyprowadzonych znaków (dla np. napisów) conversion konwersja określa jak ma być traktowany i formatowany odpowiadający danemu elementowi argument, np. jako liczba rzeczywista, jako data, jako napis Uwaga: nawiasy kwadratowe oznaczają opcjonalność.

10 Formatter - konwersje 10 Wśród flag na szczególną uwagę zasługują: '-' wynik wyrównany w polu do lewej (domyślnie jest wyrównany do prawej), '+' wynik zawiera zawsze znak (dla typów liczbowych), ' ' wynik zawiera wiodącą spację dla argumentów nieujemnych (tylko dla typów liczbowych). Konwersja Może być stosowana wobec Wynik s lub S dowolnych danych Jeżeli argument jest null - napis "null": w przeciwym razie jeżeli klasa arg na to zezwala wynik wywołania arg.formatto(...) w przeciwnym razie wynik wywołania arg.tostring() Uwaga: użycie jako symbolu konwersji dużego S spowoduje zamianę liter napisu na duże. c lub C d f typów reprezentujących znaki Unicode typów reprezentujących liczby całkowite float, double, Float, Double, BigDecimal znak Unicode liczba całkowita (dziesiętna) liczba rzeczywista z separatorem miejsc dzisiętnych

11 Formatter - konwersje 11 Konwersja th Może być stosowana wobec Wynik godzina na zegarze 24-godzinnym-2 cyfry (00-23) tm minuty - 2 cyfry (00-59) ts sekundy - 2 cyfry (00-60) ty tm td danych reprezentujących czas, czyli: long, Long, Calendar, Date rok - 4 cyfry (np. 2014) miesiąc - 2 cyfry (01-12) dzień miesiąca - 2 cyfry (01-31) tr tt tf czas na zegarze 24 godzinnym sformatowany jako "%th:%tm" czas na zegarze 24 godzinnym sformatowany jako "%th:%tm:%ts" data sformatowana jako "%ty-%tm-%td"

12 Formatter - przykład Aby uzyskać sformatowane wyniki: liczbę z dwoma miejscami dziesiętnymi, datę w postaci rok-miesiąc-dzień możemy napisać: import java.util.*; public class Format1 { public static void main(string[] args) { double cena = 1.52; double ilosc = 3; double koszt = cena * ilosc; System.out.printf("Koszt wynosi %.2f zł", koszt); System.out.printf("\nData: %tf",calendar.getinstance()); Wynik: Koszt wynosi 4,56 zł Data: Warto tu zwrócić uwagę na to, że dla lokalizacji polskiej liczba pokazywana jest z przecinkiem jako separatorem miejsc dziesiętnych. Aby uzyskać kropkę można napisać: System.out.printf(Locale.ROOT, "Koszt wynosi %.2f zł", koszt); W tym przypadku stała statyczna Locale.ROOT oznacza neutralną lokalizację (bez wybranego kraju i języka). 12

13 Formatter - przykład 13 import java.util.calendar; public class Format2 { public static void main(string[] args) { System.out.println("Wyrównany wydruk tablicy (po 2 elementy w wierszu)"); int[] arr = { 1, 100, 200, 4000 ; int k = 1; for (int i : arr) { System.out.printf("%5d", i); if (k++%2 == 0) System.out.println(); // Zastosowanie znaku < //(element formatu stosowany wobec argumentu // z poprzedniego formatowania) System.out.println("Zaokrąglenia"); System.out.printf("%.3f %<.2f %<.1f", 1.256); // Znak < szczególnie przydatny w datach/czasie Calendar c = Calendar.getInstance(); c.set(calendar.month, 1);// miesiace numerowane od 0 do 11 System.out.printf("\nW roku %ty i miesiącu %<tm mamy %d dni", c, c.getactualmaximum(calendar.date) );

14 Formatter - przykład // Oczywiście możemy formatować do stringów String datenow = String.format("%td-%<tm-%<tY", System.currentTimeMillis()); System.out.printf("\n" + datenow); WYJŚCIE: Wyrównany wydruk tablicy (po 2 elementy w wierszu) Zaokraglenia 1,256 1,26 1,3 W roku 2016 i miesiącu 02 mamy 29 dni Formatowanie dat można też uzyskać za pomocą klas SimpleDateFormat oraz od Javy 8 : DateTimeFormatter. Umożliwiają one nie tylko formatowanie ale i parsowanie dat z napisów. 14

15 Serializacja obiektów Obiekty tworzone przez program rezydują w pamięci operacyjnej, w przestrzeni adresowej procesu. Są zatem nietrwałe, bo kiedy program kończy działanie wszystko co znajduje się w jego przestrzeni adresowej ulega wyczyszczeniu i nie może być odtworzone. Serializacja (szeregowanie) pozwala na utrwalanie obiektów. W Javie polega ona na zapisywaniu obiektów do strumienia. Podstawowe zastosowania serializacji: komunikacja pomiędzy obiektami/aplikacjami poprzez gniazdka (sockets), zachowanie obiektu (jego stanu i właściwości) do późniejszego odtworzenia i wykorzystania przez tę samą lub inną aplikację. Do zapisywania/odczytywania obiektów służą klasy ObjectOutputStream oraz ObjectInputStream, które należą do strumieniowych klas przetwarzających. Metoda klasy ObjectOutputStream: void writeobject(object o) zapisuje obiekt o do strumienia. Metoda klasy ObjectInputStream: Object readobject() odczytuje obiekt ze strumienia i zwraca referencję do niego Do strumieni mogą być zapisywane tylko serializowalne obiekty. Obiekt jest serializowalny jeśli jego klasa implementuje interfejs Serializable Prawie wszystkie klasy standardowych pakietów Javy implementują ten interfejs. Również tablice (które są obiektami specjalnych klas definiowanych w trakcie kompilacji) są serializowalne. 15

16 Serializacja obiektów - przykład 16 Przykład: program zapisuje do strumienia obiekty - datę, tablicę opisów i odpowiadającą każdemu opisowi temperaturę. Następnie odczytuje te obiekty ze strumienia i odtwarza je. import java.io.*; import java.util.*; class Serial { public static void main(string args[]) { Date data = new Date(); int[] temperatura = { 25, 19, 22; String[] opis = { "dzień", "noc", "woda" ; // Zapis try { ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("test.ser")); out.writeobject(data); out.writeobject(opis); out.writeobject(temperatura); out.close(); catch(ioexception exc) { exc.printstacktrace(); System.exit(1);

17 Serializacja obiektów - przykład 17 // Odtworzenie (zazwyczaj w innym programie) try { ObjectInputStream in = new ObjectInputStream( new FileInputStream("test.ser") ); Date odczytdata = (Date) in.readobject(); String[] odczytopis = (String[]) in.readobject(); int[] odczyttemp = (int[]) in.readobject(); in.close(); System.out.println(odczytData);//Sun Dec 18 21:19:34 CET 2016 //System.out.println(DateFormat.getInstance().format(odczytData)); // :20 for (int i=0; i<odczytopis.length; i++) System.out.println(odczytOpis[i] + " " + odczyttemp[i]); catch(ioexception exc) { exc.printstacktrace(); System.exit(1); catch(classnotfoundexception exc) { System.out.println("Nie można odnaleźć klasy obiektu"); System.exit(1);

18 Serializacja obiektów 18 Metoda readobject() pobiera ze strumienia zapisane charakterystyki obiektu (w tym również oznaczenie klasy do której należy zapisany obiekt) - na ich podstawie tworzy nowy obiekt tej klasy i inicjuje go odczytanymi wartościami. Wynikiem jest referencja formalnego typu Object wskazująca na nowo utworzony obiekt, który jest identyczny z zapisanym. Ponieważ wynikiem jest Object, należy wykonać odpowiednią konwersję zawężającą do właściwego typu (referencji do konkretnej podklasy klasy Object, tej mianowicie, której egzemplarzem faktycznie jest odczytany obiekt). Może się też okazać, że w strumieniu zapisano obiekt klasy, która nie jest dostępna przy odczytywaniu (np. została usunięta). Wtedy przy tworzeniu obiektu z odczytanych danych powstanie wyjątek ClassNotFoundException, który musimy obsługiwać. Aby serializować obiekty własnych klas, klasa winna implementować interfejs Serializable. Interfejs ten jest pusty - nie musimy więc implementować żadnych jego metod, wystarczy tylko wskazać, że nasza klasa go implementuje. Takie interfejsy (bez metod) nazywane są interfejsami znacznikowymi. Ich jedyną funkcją jest umożliwienie sprawdzenia typu np. za pomocą operatora instanceof. Metoda writeobject to własnie robi, gdy podejmuje decyzje o zapisie: jeśli jej argument x jest typu Serializable (x instanceof Serializable ma wartośc true), to obiekt jest zapisywany do strumienia, w przeciwnym razie nie.

19 Serializacja obiektów 19 Przy serializacji nie są zapisywane pola statyczne oraz pola deklarowane ze specyfikatorem transient; specyfikatora transient używamy więc wobec elementów informacji o obiekcie, których nie chcemy poddawać utrwaleniu, np.: public transient int pole; Pełniejszą kontrolę nad sposobem serializacji możemy zyskać definiując odpowiednie metody w klasie obiektu serializowanego. Metody te winny mieć następujące sygnatury: private void readobject(java.io.objectinputstream stream) throws IOException, ClassNotFoundException; private void writeobject(java.io.objectoutputstream stream) throws IOException; Całkowitą kontrolę nad formatem i sposobem serializacji zyskujemy poprzez implementację w klasie interfejsu Externalizable i dostarczenie metod writeexternal i readexternal

20 Programowanie współbieżne 20 Uruchomienie dowolnego programu (aplikacji) powoduje stworzenie procesu w systemie operacyjnym. Dla każdego procesu alokowane są przez system wymagane przez niego zasoby np. pamięciowe i plikowe. Proces - to wykonujący się program wraz z dynamicznie przydzielanymi mu przez system zasobami (np. pamięcią operacyjną, zasobami plikowymi) oraz, ewentualnie, innymi kontekstami wykonania programu (np. obiektami tworzonymi przez program). Systemy wielozadaniowe pozwalają na (teoretycznie) równoległe wykonywanie wielu procesów, z których każdy ma swój kontekst, w tym swoje zasoby. W systemach wielozadaniowych i wielowątkowych - jednostką wykonawczą procesu jest wątek. Każdy proces ma co najmniej jeden działający wątek, ale może też mieć ich wiele. Proces "posiada" zasoby i inne konteksty, wykonaniem "zadań" procesu zajmują się wątki (swego rodzaju podprocesy, wykonujące różne działania w kontekście jednego procesu). Wątki działają (teoretycznie) równolegle. Zatem równoległość działań w ramach procesu (jednego programu) osiągamy przez uruchamianie kilku różnych wątków. Wątek - to sekwencja działań, która może wykonywać się równolegle z innymi sekwencjami działań w kontekście danego procesu (programu).

21 Programowanie współbieżne 21 W systemach jednoprocesorowych tak naprawdę w każdym momencie czasu wykonuje się tylko jeden wątek i nie ma tu "prawdziwej" równoległości. Wrażenie równoległości działania wątków osiągane jest przez mechanizm przydzielania czasu procesora poszczególnym wykonującym się wątkom. Każdy wątek uzyskuje dostęp do procesora na krótki czas (kwant czasu), po czym "oddaje procesor" innemu wątkowi. Zmiany są tak szybkie, że powstaje wrażenie równoległości działania. Zmiany wątków mogą dokonywać się według dwóch mechanizmów: współpracy (cooperative multitasking) - wątek sam decyduje, kiedy oddać czas procesora innym wątkom, wywłaszczania (pre-emptive multitasking) - o dostępie wątków do procesora decyduje systemowy zarządca wątków: przydziela on wątkowi kwant czasu procesora, po upłynięciu którego odsuwa wątek od procesora i przydziela kwant czasu procesora innemu wątkowi. Ponieważ Java jest językiem wieloplatformowym, a różne systemy operacyjne stosują różne mechanizmy udostępniania wątkom czasu procesora, pisząc programy wielowątkowe w Javie powinniśmy zakładać, że mogą one działać zarówno w środowisku "współpracy", jak i "konkurencji" (mechanizm wywłaszczania)

22 Programowanie współbieżne 22 Proces wykonuje się poprzez wykonanie jego wątków. Zatem, zwolnienie procesora przez wątek jednego procesu i przydzielenie procesora wątkowi innego procesu wymaga "przeładowania" kontekstu procesu, bowiem każdy proces ma swój niezależny kontekst (np. przestrzeń adresową, odniesienia do otwartych plików). Podstawowa różnica pomiędzy procesami i wątkami polega na tym, że różne wątki w ramach jednego procesu mają dostęp do całego kontekstu tego procesu (m.in. przydzielonych mu zasobów). Wobec tego zamiana wątków jednego procesu "przy procesorze" jest wykonywana szybciej niż zamiana procesów (wątków różnych procesów). Z punktu widzenia programisty wspólny dostęp wszystkich wątków jednego procesu do kontekstu tego procesu ma zarówno zalety jak i wady. Zaletą jest możliwość łatwego dostępu do wspólnych danych programu. Wadą - brak ochrony danych programu przed równoległymi zmianami, dokonywanymi przez różne wątki, co może prowadzić do niespójności danych, a czego unikanie wiąże się z koniecznością synchronizacji działania wątków.

23 Tworzenie i uruchamianie wątku (klasa Thread) Uruchamianiem i zarządzaniem wątkami w Javie zajmuje się klasa Thread. Aby uruchomić wątek należy stworzyć obiekt klasy Thread i użyć metody start() wobec tego obiektu. Kod, wykonujący się w wątku (sekwencja działań, wykonująca się równolegle z innymi działaniami programu) określany jest przez obiekt klasy implementującej interfejs Runnable. Interfejs ten zawiera deklarację metody run(), w której przy implementacji zapisujemy kod. Ten kod będzie wykonywany w wątku (równolegle z innymi fragmentami wykonującymi się w innych wątkach). Metoda run() określa co ma robić wątek. Klasa Thread implementuje interfejs Runnable (podając "pustą" metodę run). Pierwszy sposób tworzenia i uruchamiania wątku 1) Zdefiniować własną klasę dziedziczącą Thread (np. class Timer extends Thread) 2) Przedefiniować odziedziczoną metodą run(), podając w niej działania, które ma wykonywać wątek 3) Stworzyć obiekt naszej klasy (np. Timer timer = new Timer(...); 4) Wysłać mu komunikat start() (np. timer.start()) 23

24 Tworzenie i uruchamianie wątku (klasa Thread) 24 Niech klasa Timer służy do zliczania czasu (nie mylić tej klasy z klasami Timer z pakietu javax.swing oraz Timer z pakietu java.util; tutaj pod tą nazwą opisujemy własną klasę - licznik czasu). public class Timer extends Thread { public void run() { int time = 0; //licznik sekund while (true) { try { this.sleep(1000); //usypiamy wątek na 1 sekundę catch(interruptedexception exc) { System.out.println("Wątek zliczania czasu zoostał przerwany."); return; time++; int minutes = time/60; int sec = time%60; System.out.println(minutes + ":" + sec);

25 Tworzenie i uruchamianie wątku (klasa Thread) 25 Kodu zliczającego upływ czasu dostarczyliśmy w metodzie run(). Zmienna time jest licznikiem sekund. W pętli while usypiamy wątek, wykonujący tę metodę run(), na 1000 milisekund, czyli 1 sekundę (statyczna metoda sleep z klasy Thread, która usypia bieżący wątek), po czym zwiększamy licznik sekund (zmienna time) i wyprowadzamy informację o upływie czasu na konsolę. W trakcie uśpienia wątek jest odsuwany od procesora (kod metody run nie wykonuje się wtedy). Dzięki temu uzyskujemy pożądany efekt. Metoda sleep może zgłaszać wyjątek InterruptedException, który powstaje na skutek przerwania działania wątku (metodą interrupt()). Dlatego musimy obsługiwać ten wyjątek. Przykład. Licznik czasu możemy zastosować np. w programie, który wymaga od użytkownika podania wszystkich stolic (lądowych) sąsiadów Polski. Wraz z podawaniem kolejnych stolic chcemy wypisywać na konsoli informację o upływającym czasie.

26 Tworzenie i uruchamianie wątku (klasa Thread) 26 import java.util.*; import static javax.swing.joptionpane.*; public class Quiz { public static void main(string args[]) { // Stolice do odgadnięcia Set<String> cap = new HashSet<>( Arrays.asList("praga", "bratysława","moskwa", "berlin", "kijów", "wilno", "mińsk")); //stolice już podane Set<String> entered = new HashSet<>(); showmessagedialog(null, "Podaj stolice lądowych sąsiadów Polski"); String askmsg = "Wpisz kolejną stolicę:" ; int count = 0; // ile podano prawidłowych odpowiedzi // Uruchomienie wątku zliczającego //i pokazującego upływający czas new Timer().start();

27 Tworzenie i uruchamianie wątku (klasa Thread) 27 // dopóki nie podano wszystkich stolic for (int n=cap.size(); count<n;) { String in = JOptionPane.showInputDialog("Odpowiedzi:" + count + '/'+ n +'\n' +askmsg); if (in == null) break; in = in.tolowercase(); // jeśli tej stolicy wcześniej nie podano // i odp. jest prawidłowa if (!entered.contains(in) && cap.contains(in)){ count++; entered.add(in);

28 Tworzenie i uruchamianie wątku (klasa Thread) 28 W pętli pobieramy dane od użytkownika, dopóki nie wpisze on prawidłowo wszystkich znajdujących się w zbiorze cap stolic lub nie przerwie wpisywania, wybierając w dialogu Cancel. Ponieważ wcześniej utworzyliśmy i uruchomiliśmy wątek zliczania czasu: Timer tm = new Timer(); tm.start(); lub zwięźlej: new Timer().start(); to nasz program równolegle wykonuje dwa zadania: interakcję z użytkownikiem (pytania o stolice) oraz wypisywanie na konsoli informacji o upływającym czasie. Wywołanie metody start() na rzecz obiektu klasy Thread powoduje uruchomienie metody run() z klasy Timer. To wywołanie nie blokuje głównego programu; wykonywane są dalsze jego instrukcje, a kod metody run() działa równolegle.

29 Tworzenie i uruchamianie wątku (interfejs Runnable) 29 Jak już wiemy, kod wykonywany przez wątek podajemy w metodzie run(). A metoda run() może być zdefiniowana w dowolnej klasie implementującej interfejs Runnable. Klasa Thread dostarcza zaś konstruktora, którego argument jest typu Runnnable. Konstruktor ten tworzy wątek, który będzie wykonywał kod zapisany w metodzie run() w klasie obiektu, do którego referencję przekazano wspomnianemu wyżej konstruktorowi. Drugi sposób tworzenia i uruchamiania wątków. 1) Zdefiniować klasę implementującą interfejs Runnable (np. class X implements Runnable). 2) Dostarczyć w niej definicji metody run() (co ma robić wątek). 3) Utworzyć obiekt tej klasy (np. X x = new X(); ) 4) Utworzyć obiekt klasy Thread, przekazując w konstruktorze referencję do obiektu utworzonego w p.3 (np.thread thread = new Thread(x);). 5) Wywołać na rzecz nowoutworzonego obiektu klasy Thread metodę start ( thread.start();)

30 Tworzenie i uruchamianie wątku (interfejs Runnable) 30 Oprogramowanie uprzednio omawianego licznika czasu przy użyciu drugiego sposobu: class Timer implements Runnable { public void run() { int time = 0; while (true) { try { Thread.sleep(1000); catch(interruptedexception exc) { System.out.println("Wątek zliczania czasu został przerwany."); return; time++; int minutes = time/60; int sec = time%60; System.out.println(minutes + ":" + sec);

31 Tworzenie i uruchamianie wątku (interfejs Runnable) Wówczas utworzenie i uruchomienie wątku zliczającego czas (w innej klasie): Timer tm = new Timer(); Thread thread = new Thread(tm); thread.start(); lub zwięźlej: new Thread(new Timer()).start(); Jak poprzednio, w metodzie run() dla uśpienia wątku na sekundę używamy statycznej metody sleep z klasy Thread, która usypia bieżący wątek (w tym przypadku ten, w którym wykonuje się ta metoda run()). Nie mogliśmy tym razem napisać this.sleep(), bo nowa klasa Timer nie dziedziczy już klasy Thread. Drugi sposób tworzenia i uruchamiania wątków ma pewne zalety w stosunku do korzystania wyłącznie z klasy Thread (czyli sposobu pierwszego): niekiedy daje lepsze możliwości separowania kodu (kod odpowiedzialny za pracę wątku może być wyraźnie wyodrębniony w klasie implementującej Runnable). w niektórych okolicznościach - mianowicie, gdy chcemy umieścić metodę run() w klasie, która dziedziczy jakąś inną klasę - jest jedynym możliwym sposobem. 31

32 Tworzenie i uruchamianie wątku klasy anonimowe Przy tworzeniu wątków ad hoc (zwykle tylko raz i na jakąś konkretną potrzebę) bardzo często posługujemy się anonimowymi klasami wewnętrznymi i to zwykle lokalnymi. Na przykład - do zliczania i pokazywania upływu czasu w trakcie jakiejś interakcji użytkownika z programem, jak w poniższym programie: new Thread(new Runnable() { public void run() { int time = 0; while (true) { try { Thread.sleep(1000); catch(interruptedexception exc) { return; System.out.println( time++/60 + " min. " + time%60 + " sek."); ).start(); String s, out = ""; while ((s = JOptionPane.showInputDialog("Tekst:"))!= null) out += " " + s; System.out.println(out); Zauważmy, że działanie kodu zliczającego czas nigdy się nie kończy. 32

33 Zadania i wykonawcy 33 Zauważmy, że kod wątku zapisywany jest w metodzie run(), a klasa Thread tak naprawdę nic nie robi. To kod metody run() wykonuje się "w wątku" (czyli współbieżnie), choć często mówimy nieco mylnie (potocznie): "wątek się wykonuje". Tymczasem wcale nie jesteśmy zainteresowani wątkami (obiektami klasy Thread) tylko zadaniami (zapisanymi w metodzie run()), które "poprzez wątki" się wykonują. Chcielibyśmy rozumować raczej w kategoriach zadań do wykonania, a nie technicznych szczegółów sposobu ich wykonania. Od Javy 1.5 zadania "do wykonania" mogą być odseparowane od wątków. Wprowadzony został pakiet java.util.concurrent, dzięki któremu możemy efektywnie rozwiązać wiele problemów zwiazanych z programowaniem współbieżnym: jeśli chcesz łatwo tworzyć pule wątków i zarządzać nimi bez trudnego programowania, to użyj odpowiednich Serwisów Wykonawców (ExecutorService) jeśli chcesz myśleć w kategoriach zadań (Task), nie wątków, to daj Wykonawcom zadania do wykonania, oni zdecydują jak najlepiej podzielić je między wątki, ale ogólna strategia podziału i uruchamiania jest pod Twoją kontrolą (mamy wybór różnych strategii) jeśli chcesz mieć łatwo dostępne wyniki współbieżnych zadań, to użyj interfejsu Callable, zaufaj Wykonawcom i odbieraj wyniki w postaci FutureTask - obiektu pozwalającego na asynchroniczne testy (wyniki już są? jeszcze nie ma?), reagowanie na wyjątki, odczytywanie wyników zadań i podłączanie callbacków.

34 Zadania i wykonawcy 34 Tworzenie wątków jest kosztowne czasowo. Pule wątków pozwalają na ponowne użycie wolnych wątków, a także na ewentualne limitowanie maksymalnej liczby wątków w puli. My rozumujemy w kategoriach zadania do wykonania (określanego przez kod Runnable), tworzeniem i uruchamianiem wątków zajmują się Wykonawcy. Wykonawca jest obiektem klasy implementującej interfejs Executor, zawierający jedną metodę execute(runnable). Interfejs ExecutorService rozszerza go, dostarczając dodatkowych metod, np. do zakończenia działania Wykonawcy. W Javie mamy do dyspozycji kilka rodzajów gotowych Wykonawców, fabrykowanych przez odpowiednie metody klasy Executors m.in.: Wykonawca uruchamiający podane mu zadania w jednym wątku (po kolei) (Executors.newSingleThreadExecutor()), Wykonawca, prowadzący pulę wątków o zadanych maksymalnych rozmiarach (Executors.newFixedThreadPool()), Wykonawca, prowadzący pulę wątków o dynamicznych rozmiarach (Executors.newCachedThreadPool()), Wykonawcy zarządzający tworzeniem i wykonaniem wątków w określonym czasie lub z określoną periodycznością (Executors.newScheduled...())

35 Zadania i wykonawcy - przykład 35 import java.util.concurrent.*; class Task implements Runnable { private String name; private final int N; public Task(String name, int n) { N=n; this.name = public void run() { int sum=0; for (int i=1, k=0; i <= N; i++) { if (i%1000 == 0) System.out.println(name + " count " + (k+=1000)); sum+=i; System.out.println(name + ", sum = " + sum);

36 Zadania i wykonawcy - przykład 36 public class Wykonawca { public static void main(string[] args) { Executor exec = Executors.newFixedThreadPool(2); for (int i=1; i<=4; i++) { exec.execute(new Task("Task " + i, i*1000)); run: Task 1 count 1000 Task 1, sum = Task 2 count 1000 Task 3 count 1000 Task 2 count 2000 Task 3 count 2000 Task 2, sum = Task 3 count 3000 Task 4 count 1000 Task 3, sum = Task 4 count 2000 Task 4 count 3000 Task 4 count 4000 Task 4, sum =

37 Zadania i wykonawcy 37 Zastosowanie FixedThreadPool z liczbą wątków w puli równą 2, powoduje, że równolegle wykonują się po 2 zadania, przy zmianie wykonawcy na Executor exec = Executors.newCachedThreadPool(); wykonywałyby się równolegle 4 zadania. Gdy nasze zadania zakończą się, Wykonawca nadal "działa" i jest gotowy do przyjmowania nowych zadań. Zamknięcie Wykonawcy oznacza, iż nie będzie on już przyjmował nowych zadań do wykonania; jednak przekazane mu wcześniej i jeszcze nie zakończone - będzie wykonywał. Usługę zamknięcia dostarcza interfejs ExecutorService, który jest rozszerzeniem interfejsu Executor. Metody fabrykujące (ang. factory methods) klasy Executors zwracają Wykonawców implementujących ExecutorService.

38 Zadania i wykonawcy public static void main(string[] args) { ExecutorService exec = Executors.newFixedThreadPool(2); for (int i=1; i<=4; i++) { exec.execute(new Task("Task " + i)); Thread.yield();//sygnalizuje,że wątek może być //odsunięty od procesora exec.shutdown();//nie pozwala na zlecenie nowych zadań, //ale wykonywane zadania nadal działają try { exec.execute(new Task("Task after shutdown")); catch (RejectedExecutionException exc) { exc.printstacktrace(); try { exec.awaittermination(5, TimeUnit.SECONDS); catch(interruptedexception exc) { exc.printstacktrace(); System.out.println("Terminated: " + exec.isterminated()); 38

39 Zadania i wykonawcy 39 Ponieważ metoda shutdown() zamyka ExecutorService, zadanie "Task after shutdown" nie zostanie uruchomione (powstanie wyjątek RejectedExecutionException; ten wyjątek może powstawać również wtedy, gdy ExecutorService z innych powodów niż zamknięcie odmawia wykonania zadania). Na końcu programu - za pomocą metody awaittermination(...) wstrzymujemy bieżący wątek dopóki Wykonawca nie zakończy wszystkich zadań (albo dopóki nie minie 5 sekund lub też nie wystąpi przerwanie bieżącego wątku za pomocą metody interrupt). Warto stosować metodę awaittermination(), kiedy chcemy mieć pewność, że Wykonawaca naprawdę zakończył działanie i wyczyścił wszystkie swoje zajęte zasoby (np. bez tego nasz głowny wątek może sie skończyć wcześniej niż Wykonawcy i aplikacja nie zakończy działania). ExecutorService dostarcza także metody shutdownnow(), która ma za zadanie zakończyć działanie wszystkich aktualnie wykonujących się zadań (wątków) i zamknąć Wykonawcę, uniemożliwia wykonanie zadań jeszcze nie rozpoczętych. (Metoda shutdownnow() używa metody interrupt() wobec odpowiednich wątków, w reakcji na co powinny się zakończyć. ) Task 2 count Task 1 count Task 1, sum = Task 2 count Task 2, sum =

40 Pliki o dostępie swobodnym Klasa RandomAccessFile definiuje pliki o dostępie swobodnym, które mogą być otwarte z trybie "czytania" lub "czytania i pisania". Swobodny dostęp oznacza dostęp do dowolnego bajtu danych bez potrzeby sekwencyjnego przetwarzania pliku od początku. Konstruktory klasy mają następującą postać: RandomAccessFile(String filename, String mode) RandomAccessFile(File file, String mode) gdzie mode oznacza jeden z następujących trybów otwarcia "r" - plik tylko do odczytu, "rw" - plik do odczytu i zapisu, "rws", "rwd" - jak "rw", ale z wymuszeniem synchronicznego zapisu każdej zmiany na dysk. Pliki o dostępie swobodnym mogą być traktowane jako ciągi bajtów. Bieżący bajt do odczytu lub miejsce do zapisu określa specjalny wskaźnik pozycji w pliku (filepointer). Pozycję tę możemy zmieniać za pomocą metod seek() i skip(). Jest także zmieniana przy każdej operacji czytania lub pisania. Do czytania/pisania służy wiele metod read... i write..., które pozwalają operować na różnych rodzajach danych odczytywanych z i zapisywanych do pliku (np. readdouble, readline, writeint itp.), Pliki o dostępie swobodnym nie są strumieniami. Klasa RandomAccessFile nie należy więc do hierarchii klas strumieniowych 40

41 Archiwizacja, kompresja i dekompresja Pakiet java.util.zip dostarcza klas umożliwiających kompresję i dekompresję danych. Wybrane klasy pakietu java.util.zip: Deflater - kompresja dowolnych danych z użyciem biblioteki ZLIB (działanie na danych w pamięci np. Stringach) Inflater - kompresja dowolnych danych z użyciem biblioteki ZLIB (działanie na danych w pamięci np. Stringach) DeflaterOutputStream - strumieniowa klasa przetwarzająca: pozwala na kompresję danych (wg protokołu ZLIB) w trakcie zapisu dotsrumienia wyjściowego. InflaterInputStream - strumieniowa klasa przetwarzająca; pozwala na dekompresję danych w trakcie odczytu. GZIPInputStream - strumieniowa klasa przetwarzająca: dekompresja w trakcie odczytywania plików w formacie GZIP. GZIPOutputStream - strumieniowa klasa przetwarzająca: kompresja w trakcie zapisu do plików w formacie GZIP. ZipInputStream - jak poprzednie klasy, ale czytanie i rozpakowywanie plików ZIP ZipOutputStream - jak poprzednie klasy, ale kompresja danych i zapis do plików ZIP ZipEntry - reprezentuje element ("wejście") w pliku ZIP ZipFile - klasa pozwalająca czytać "wejścia" elementy z pliku ZIP w dowolnym porządku. 41

42 Archiwizacja, kompresja i dekompresja Zastosowanie narzędzi kompresji - dekompresji rozpatrzymy na przykładzie przetwarzania plików ZIP. Zauważmy, że wraz ze spakowaną zawartością plików, archiwum ZIP zawiera elementy opisujące każdy plik (tzw. "wejścia" - entry). Aby skompresować (spakować) dane i zapisać je do pliku ZIP trzeba wykonać następujące kroki. Nałożyć na strumień wyjściowy związany z nowotworzonym archiwum obiekt klasy przetwarzającej ZipOutputStream: ZipOutputStreame zip = new ZipOutputStream( new BufferedInputStream( new FileInputStream("nazwa.zip"))); Dla każdego pliku wejściowego (który ma podlegać kompresji) utworzyć "entry" w pliku ZIP: ZipEntry entry = new ZipEntry(nazwa); Zapisać "entry": zip.putnextentry(entry); Zapisać do strumienia zip zawartość pliku wejściowego. Zamknąć bieżące "entry" (kolejne putnextentry robi to automatycznie): zip.closeentry(); 42

43 Archiwizacja, kompresja i dekompresja Przy rozpakowaniu archiwum możemy użyć klasy ZipFile lub ZipInputStream. W tym ostatnim przypadku kolejność działań jest następująca. Stworzenie rozpakowującego strumienia wejściowego: ZipInputStream zis = new ZipInputStream( new BufferedInputStream( Przetwarzanie (rozpakownaie) elementów archiwum: new FileInputSTream("nazwa.zip"))); ZipEntry entry; // element archiwum (spakowany plik lub katalog) //Dopóki są w w archiwum elementy, pobieramy je i przetwarzamy while((entry = zis.getnextentry())!= null) { String ename = entry.getname(); // nazwa elementu archiwum... W powyższej pętli dla każdego elementu (pliku) archiwum tworzymy strumień wyjściowy (do zapisu)/ o nazwie takiej samej jak w archiwum (ename) I dalej w tej pętli czytamy dane ze strumeinia zis (metoda read() zwróci -1 gdy przeczytamy dany element - plik - z archiwum) i zapisujemy je do strumienia wyjściowego (reprezentującego rozpakowany plik). 43

Aplikacje w Javie- wykład 11 Wątki-podstawy

Aplikacje w Javie- wykład 11 Wątki-podstawy 1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/

Bardziej szczegółowo

Strumienie i serializacja

Strumienie i serializacja Strumienie i serializacja Prezentacja dostępna na Syriuszu: http://sirius.cs.put.poznan.pl/~inf80156 Klasy: InputStream, OutputStream, Reader i Writer W Javie hierarchia strumieni oparta jest o cztery

Bardziej szczegółowo

Apilkacje w środowisku Java - wykład 10 Strumienie

Apilkacje w środowisku Java - wykład 10 Strumienie Apilkacje w środowisku Java - wykład 10 Strumienie Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/

Bardziej szczegółowo

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

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

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 6, część 2 Jacek Rumiński 1 Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream

Bardziej szczegółowo

Język Java wątki (streszczenie)

Język Java wątki (streszczenie) Programowanie współbieżna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Języka Java wątki Autor:

Bardziej szczegółowo

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O)

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O) Biblioteki wejścia/wyjścia Strumienie we/wy (I/O) Pojęcie strumienia Strumień reprezentuje źródło lub odbiorcę danych (obiekt zdolny odbierać lub produkować dane). Strumień ukrywa szczegóły związane z

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof

Bardziej szczegółowo

Java. Programowanie Obiektowe Mateusz Cicheński

Java. Programowanie Obiektowe Mateusz Cicheński Java Programowanie Obiektowe Mateusz Cicheński Wielowątkowość Proces a wątek? Thread vs Runnable sleep(), interrupt(), join() Problemy wielowątkowości Obiekty niemodyfikowalne (immutable) Serializacja

Bardziej szczegółowo

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1. Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)

Bardziej szczegółowo

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1 Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego

Bardziej szczegółowo

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW 1. Procedura korzystania ze strumieni danych Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np.

Bardziej szczegółowo

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

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt JAVA Pliki - zapis i odczyt Opracował: Andrzej Nowak Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Strumienie wejścia i wyjścia Strumienie wejścia

Bardziej szczegółowo

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Uruchomienie programu powoduje stworzenie nowego procesu przez system operacyjny. Proces wykonywany program wraz

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 11: Serializacja obiektów 5/19/2013 S.Deniziak:Programowanie obiektowe 1 Problem składowania/przesyłania danych Strumienie Tylko typy proste Konieczność ręcznego odtwarzania

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 9 Serializacja Przygotował: Jacek Sroka 2 Przypomnienie Abstrakcja strumienia hierarchia binarna InputStream/OutputStream hierarchia znakowa Reader/Writer

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 1 dr inż. Literatura ogólna Ben-Ari, M.: Podstawy programowania współbieżnego i rozproszonego. Wydawnictwa Naukowo-Techniczne, Warszawa, 2009. Czech, Z.J:

Bardziej szczegółowo

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run(). Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public

Bardziej szczegółowo

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja Java niezbędnik programisty spotkanie nr 11 Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja 1 Importowanie składowych statycznych Opracował Import static java.lang.system.out; //import

Bardziej szczegółowo

Strumienie, pliki. Sortowanie. Wyjątki.

Strumienie, pliki. Sortowanie. Wyjątki. Strumienie, pliki. Sortowanie. Wyjątki. Serializacja Zapisuje całą klasę Plik binarny Delimiter nieokreślony Nie da się podglądać Pliki tekstowe Zapisuje wybrane informacje Plik tekstowy Delimiter ustawiamy

Bardziej szczegółowo

Wykład 4: Wejście/wyjście: strumienie Java

Wykład 4: Wejście/wyjście: strumienie Java PK1 2006_2018 Walery Susłow Programowanie komputerów Wykład 4: Wejście/wyjście: strumienie Java dr inż. Walery Susłow walery.suslow@tu.koszalin.pl Wejście/wyjście Podstawowy mechanizm wejścia-wyjścia znajduje

Bardziej szczegółowo

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

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016 Wykład 10 05 maja 2016 Biblioteka wejścia/wyjścia (Input/Output) import java.io.*; Umożliwia przechowywania danych na nośniku zewnętrznym Dane moga być wysyłane do plików, na drukarkę, do bufora pamięci,

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

Platformy Programistyczne Zagadnienia sieciowe i wątki

Platformy Programistyczne Zagadnienia sieciowe i wątki Platformy Programistyczne Zagadnienia sieciowe i wątki Agata Migalska 27/28 maja 2014 Komunikacja sieciowa 1 Komunikacja sieciowa 2 Wiele wątków 3 Serializacja Architektura typu klient-serwer Architektura

Bardziej szczegółowo

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4 Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.

Bardziej szczegółowo

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

Programowanie współbieżne Laboratorium nr 11

Programowanie współbieżne Laboratorium nr 11 Programowanie współbieżne Laboratorium nr 11 Wykonywane w danym momencie programy nazwano procesami [1] - izolowanymi, niezależnie wykonywanymi programami, dla których system operacyjny przydzielał pamięć,

Bardziej szczegółowo

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

1 Atrybuty i metody klasowe

1 Atrybuty i metody klasowe 1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich

Bardziej szczegółowo

Język Java wątki (streszczenie)

Język Java wątki (streszczenie) Programowanie współbieŝna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Podstawowe pojęcia: procesy

Bardziej szczegółowo

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielowątkowa prosty komunikator Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

dr Krzysztof Podlaski

dr Krzysztof Podlaski dr Krzysztof Podlaski Wydział Fizyki i Informatyki Stosowanej 19.11.2010 Łódź Wstęp do Java, wykład 3 1 Biblioteki standardowe Obszerny zestaw Klas i Interfejsów Obsługa Strumieni We-Wy Dysków Sieci java.io,

Bardziej szczegółowo

Współbieżność w środowisku Java

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Podstawy otwartych języków programowania Wyjątki i strumienie I/O Podstawy otwartych języków programowania Wyjątki i strumienie I/O Wiktor Wandachowicz Wyjątki Podstawą filozofii Javy jest założenie, że: źle sformułowany kod nie zostanie wykonany Wyjątki są mechanizmem

Bardziej szczegółowo

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej Wstęp do Java Operacje Wejścia-Wyjścia Programowanie Wielowątkowe dr Krzysztof Podlaski Wydział Fizyki i Informatyki Stosowanej 19.03.2015 Łódź 1 Obsługa procesów We-Wy Biblioteki standardowe Obszerny

Bardziej szczegółowo

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

Strumienie, pliki. Sortowanie. Wyjątki.

Strumienie, pliki. Sortowanie. Wyjątki. Strumienie, pliki. Sortowanie. Wyjątki. Operacje I/O w Javie Serializacja Zapisuje całą klasę Plik binarny Delimiter nieokreślony Nie da się podglądać Pliki tekstowe Zapisuje wybrane informacje Plik tekstowy

Bardziej szczegółowo

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany plik. boolean exists() sprawdza czy plik o zadanej nazwie

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Wykład 2: Podstawy Języka

Wykład 2: Podstawy Języka Wykład 2: Podstawy Języka 1.wprowadzenie 2.podstawy języka 3.sterowanie 4.inicjacja i sprzątanie 5.kontrola dostępu 6.dziedziczenie 7.polimorfizm 8.obsługa błędów 9.kolekcje obiektów 10.wejście i wyjście

Bardziej szczegółowo

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu. Wstęp Java Zadanie Celem laboratorium jest zapoznanie się z podstawami platformy oraz języka Java. W ramach zadania należy przygotować aplikację zarządzania notatkami użytkownika obsługiwaną z konsoli.

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()

Bardziej szczegółowo

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Wątki w Javie. Piotr Tokarski

Wątki w Javie. Piotr Tokarski Wątki w Javie Piotr Tokarski Wprowadzenie Co to są wątki? Co to są wątki? Każdy program ma przynajmniej jeden wątek Co to są wątki? Każdy program ma przynajmniej jeden wątek Wątki są po to, by symulować

Bardziej szczegółowo

INFORMATYKA Studia Niestacjonarne Elektrotechnika

INFORMATYKA Studia Niestacjonarne Elektrotechnika INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl

Bardziej szczegółowo

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami

Bardziej szczegółowo

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

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

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

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

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment

Bardziej szczegółowo

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003 Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy

Bardziej szczegółowo

Język Java część 2 (przykładowa aplikacja)

Język Java część 2 (przykładowa aplikacja) Programowanie obiektowe Język Java część 2 (przykładowa aplikacja) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Java Java przykładowa

Bardziej szczegółowo

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik Wizualne systemy programowania Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Kolekcje List

Bardziej szczegółowo

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

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

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE 1) Strumienie tekstowe wejściowe wprowadzanie danych Procedura korzystania ze strumieni tekstowych wejściowych

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

WSPÓŁBIEŻNOŚĆ. MATERIAŁY: WSPÓŁBIEŻNOŚĆ ZAGADNIENIA: procesy, wątki, synchronizacja, synchronizacja w Java 5.0 blokady, egzekutory, zbiory wątków MATERIAŁY: http://docs.oracle.com/javase/tutorial/essential/concurrency/ HTTP://USERS.UJ.EDU.PL/~CIESLA/

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 7: Programowanie wielowątkowe w Javie dr inż. Walery Susłow Współbieżność Programy współbieżne (concurrent software) aplikacje potrafiące wykonywać kilka operacji w tym

Bardziej szczegółowo

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

Wykład 8: Obsługa Wyjątków Wykład 8: Obsługa Wyjątków Wyjątki Wyjątek to sytuacja nienormalna, która pojawia się w trakcie wykonania programu. W językach bez obsługi wyjątków, błędy są wykrywane i obsługiwane ręcznie, zwykle przez

Bardziej szczegółowo

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1 Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania

Bardziej szczegółowo

Programowanie w Javie wykład 8 Interfejsy

Programowanie w Javie wykład 8 Interfejsy 1 Programowanie w Javie wykład 8 Interfejsy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 Barteczko, JAVA Uniwersalne techniki programowania,

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Biblioteka standardowa - operacje wejścia/wyjścia

Biblioteka standardowa - operacje wejścia/wyjścia Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline

Bardziej szczegółowo

Pakiety i interfejsy. Tomasz Borzyszkowski

Pakiety i interfejsy. Tomasz Borzyszkowski Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Rozdział 7 Strumienie, operacje wejścia-wyjścia

Rozdział 7 Strumienie, operacje wejścia-wyjścia Rozdział 7 Strumienie, operacje wejścia-wyjścia 7.1 Strumienie 7.2 Standardowe obsługa wejścia-wyjścia - klasy InputStream oraz OutputStream 7.2.1 Obsługa wejścia klasa InputStream 7.2.2 Obsługa wejścia

Bardziej szczegółowo

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

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

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne import javax.swing.*; import java.util.*; public class Napis4 { String wynik = ""; static int ile_obiektow

Bardziej szczegółowo

Pliki. Operacje na plikach w Pascalu

Pliki. Operacje na plikach w Pascalu Pliki. Operacje na plikach w Pascalu ścieżka zapisu, pliki elementowe, tekstowe, operacja plikowa, etapy, assign, zmienna plikowa, skojarzenie, tryby otwarcia, reset, rewrite, append, read, write, buforowanie

Bardziej szczegółowo

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html JAVA I SIECI ZAGADNIENIA: URL, Interfejs gniazd, transmisja SSL, protokół JNLP. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA,

Bardziej szczegółowo