Programowanie w języku Java WYKŁAD

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

Download "Programowanie w języku Java WYKŁAD"

Transkrypt

1 Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational pzabawa@pk.edu.pl www:

2 WYKŁAD 7 Wyjątki

3 Częstym problemem jest optymistyczne podejście do wytwarzania oprogramowania. Cechy charakterystyczne: Pomijanie sytuacji negatywnych w specyfikacji wymagań Brak informacji do testowania reakcji systemu na błędy lub na sytuacje wyjątkowe oraz do testowania przebiegów alternatywnych słabe testy Objawem jest uzgadnianie obsługi takich sytuacji pomiędzy programistami i testerami w zespole z pominięciem wymagań Powyższe błędy mają charakter procesowy. Wyjątki są mechanizmem na poziomie technicznym (implementacyjnym) wspierającym obsługę błędów. Stanowią więc istotny element oprogramowania, który w konsekwencji wspomnianych błędów procesowych jest niesłusznie niedoceniany.

4 Ze względu na niedocenianie znaczenia wyjątków rzadko są one prawidłowo projektowane. W szczególności zwykle trudno dopatrzeć się strategii, wg której zostały one zaprojektowane. Dlatego w czasie wykładu zostaną poruszone zagadnienia obejmujące: Dyskusję własności wyjątków własności te mają wpływ na sposób projektowania ich Omówienie strategii projektowania wyjątków

5 Wyjątki, jak sama nazwa wskazuje, służą do obsługiwania sytuacji wyjątkowych. W odróżnieniu od stosu wywołań metod, w którym wywołania metod odkładane są w kolejności ich wywołań, wyjątki propagowane są przez stos w kolejności odwrotnej. W zależności od języka programowania może je obsługiwać osobny stos, lub ten sam stos, który wykorzystywany jest dla wywołań metod. Klasy wyjątków zdefiniowane są w pakiecie biblioteki standardowej: java.lang UWAGA: wyjątki w Java są znane od dawna, jednak w Java 7 dodano try-with-resources, a w Java 8 wyrażenia lambda pozwalające efektywniej korzystać z try-with-resources. Wykład nawiązuje więc do Java 8.

6 Kiedy nie warto stosować wyjątków tylko wartość zwracaną (return): W czasie interakcji systemu z użytkownikiem Kiedy warto stosować wyjątki zamiast wartości zwracanych: Np. w warstwie danych Powód wyjątki mają przewagę nad obsługą błędów typową dla programowania strukturalnego wtedy gdy informacja o błędzie jest propagowana przez wiele metod i obsługa błędu jest rozproszona.

7 Miejsca powstania wyjątków: Kod biblioteki standardowej Java (np. operacje i/o wymagają obsługi wyjątków) Kod niestandardowej biblioteki obcej Własny kod Sposób powstania wyjątku jest jeden utworzenie obiektu klasy wyjątku (musi dziedziczyć ona z klasy Throwable) a następnie zgłoszenie wyjątku za pomocą słowa kluczowego throw. Przykład: throw new NumberFormatException("format liczby niezgodny z oczekiwanym: " + liczba);

8 Ogólna postać instrukcji sterującej zgłoszeniem wyjątku: throw exception_ref; gdzie exception_ref oznacza referencję do obiektu wyjątku. Zgłoszony wyjątek jest następnie propagowany w kierunku przeciwnym do kolejności wywołań metod na stosie. Jeśli nie zostanie przechwycony w kodzie, to będzie rozpropagowany do maszyny wirtualnej Javy (JVM), która zgłosi nieprzechwycenie wyjątku. Błędy polegające na nieprzechwyceniu wyjątku mają charakter błędów czasu wykonania (run-time), więc mogą być trudne do przewidzenia w czasie kodowania. Dlatego w Java wprowadzono dodatkowe mechanizmy na poziomie kompilacji ułatwiające wykrycie takich sytuacji na etapie kompilowania kodu zostaną one przedstawione dalej.

9 Zgłoszony wyjątek powinien zostać przechwycony i obsłużony. Do przechwycenia wyjątku służy klazula try-catch. Przykład: String s1, s2; try { int n1 = Integer.parseInt(s1); int n2 = Integer.parseInt(s2); catch (NumberFormatException exc) { System.out.println("Błędne dane - kończę działanie"); return;

10 Ogólna postać przechwycenia i obsługi wyjątku (wszystkie elementy z wyjątkiem jednego catch lub finally, jeśli wystąpiło try są opcjonalne): try { // instrukcje mogące zgłosić wyjątek catch(klasawyjątku1 ex) { // obsługa zidentyfikowanego wyjątku catch(klasawyjątku2 ex) { // obsługa zidentyfikowanego wyjątku catch(exception ex) { // obsługa niezidentyfikowanego wyjątku finally { // kod zostanie wykonany niezależnie od tego czy // wyjątek został zgłoszony czy nie i jakiej był klasy

11 Możliwości reakcji na przechwycenie wyjątku: Obsłużenie wyjątku i ponowne jego zgłoszenie Obsłużenie wyjątku i zgłoszenie innego wyjątku Obsłużenie wyjątku i niezgłaszanie żadnego wyjątku (kończy proces propagacji wyjątku) Wyjątki zachowują się jak obiekty (w istocie są nimi), w szczególności mogą zachowywać się polimorficznie. Tę ich własność wykorzystuje się w klauzulach catch, które mogą rozpoznawać klasę obiektu wyjątku po jej nadklasie. Można więc przechwycić wyjątek na podstawie jego nadklasy, a następnie dokonać analizy danych lub typu obiektu wyjątku i zareagować w zależności od zidentyfikowanych informacji. Podejście polimorficzne można też wykorzystać do sterowania przepływem wyjątków.

12 W celu zmniejszenia ryzyka nieprzechwycenia wyjątku, którego klasa w danej metodzie nie została przewidziana przez programistę (mogła nie istnieć w chwili pisania kodu przez niego) istnieje w języku Java możliwość przechwycenia wyjątku dowolnej klasy: catch(exception ex){ Istotne znaczenie w obsłudze wyjątków ma kolejność wystąpienia klauzul catch poniżej danego bloku try. Należy umieszczać je w kolejności od najbardziej szczegółowej klasy wyjątku do najbardziej ogólnej klasy wyjątku (szczegółowość w rozumieniu hierarchii dziedziczenia). Na samym końcu należy umieścić (opcjonalnie) klauzulę catch(exception ex). Dopiero po niej finally.

13 W języku Java wyjątki mają predefiniowaną hierarchię. Zawiera ona następujące istotne elementy: Error błędy, z którymi aplikacja nie jest w stanie sobie sama poradzić Exception nadklasa wyjątków, czyli błędów, z którymi aplikacja jest w stanie sobie poradzić RuntimeException klasa wyjątków niekontrolowanych InterruptedException klasa wyjątków kontrolowanych IOException klasa wyjątków kontrolowanych operacji we/wy

14 Wyjątki dzielą się na: Kontrolowane wymagają obsługi przez programistę dziedziczą z jednej z klas: InterruptedException IOException Niekontrolowane nie wymagają obsługi przez programistę dziedziczą z klasy RuntimeException Poza tym funkcjonalnie nie różnią się od siebie niczym.

15

16 Wyjątki predefiniowane (niektóre): IllegalArgumentException IllegalStateException NullPointerException IndexOutOfBoundsException ConcurrentModificationException UnsupportedOperationException Są one gotowe do wykorzystania przez programistów lub używane w bibliotekach standardowych. Predefiniowano wyjątki najczęściej spotykane.

17 Definiowanie własnej klasy wyjątku: class Wyjątek extends Exception { //...

18 W przypadku korzystania ze standardowej biblioteki języka Java, jeśli metoda z tej biblioteki może zgłosić wyjątek i nie obejmiemy w kodzie klienta tej biblioteki (naszym kodzie) blokiem try oraz klauzulą catch pozwalającą przechwycić ten wyjątek, to kompilator Java wykryje taką sytuację jako błąd. Możemy wtedy: Objąć wywołanie tej metody bibliotecznej blokiem try oraz zaimplementować klauzulę catch odpowiednią dla klasy nieprzechwytywanego wyjątku albo Dodać do nagłówka metody, w której został wykryty ten błąd (naszej metody) następującą deklarację: throws KlasaWyjątku1, KlasaWyjątku2,..., KlasaWyjątkuN

19 Dodanie powyższej deklaracji oznacza, że nasza metoda nie musi obsługiwać wyjątków tych typów, ponieważ może je zgłaszać (propagować dalej). Jeśli taką deklarację umieścimy w deklaracji naszej metody, to jej użytkownik będzie wiedział jakie wyjątki może zgłaszać nasza metoda. Przykład: public void method() throws NumberFormatException { // zgłoszenie wyjątku w method throw new NumberFormatException(); // albo // skorzystanie z metody, która może zgłosić wyjątek int i = convertstringtoint(new String( x ));

20 Klauzula finally wykonywana jest zawsze bezpośrednio po bloku try nawet wtedy, gdy obsługa wcześniej przechwyconego wyjątku w klauzuli catch zwróciła sterowanie z metody (słowo kluczowe return).

21 Możliwości uzupełnienia informacji o zagadnieniach związanych z wyjątkami: Exceptions anti-patterns informacje i przykłady ilustrujące jak nie należy korzystać z wyjątków Exceptions good practices zalecenia dotyczące korzystania z wyjątków; zbyt lakoniczne opisy mogą prowadzić do pochopnego wniosku, że niektóre praktyki są sprzeczne

22 Dobre praktyki obsługi wyjątków (wg. Lokesh Gupta): 1. Nigdy nie ignorować wyjątku w klauzuli catch 2. Zawsze deklarować wyjątki kontrolowane, które może zgłosić metoda 3. Nigdy nie przechwytywać wyjątku na podstawie jego nadklasy Exception 4. Nigdy nie przechwytywać wyjątku na podstawie jego nadklasy Throwable 5. Wychwycony wyjątek zawsze otaczać własną klasą w taki sposób, aby nie gubić śladu stosu 6. Albo logować informację o wyjątku albo go ponownie zgłaszać 7. Nigdy nie zgłaszać wyjątku z klauzuli finally 8. Wychwytywać tylko te wyjątki, które możemy obsłużyć

23 9. Nigdy nie pozostawiać w kodzie końcowym wywołań printstacktrace() 10.Używać klauzuli finally zamiast catch jeśli nie chcemy obsługiwać wyjątków 11.Przestrzegać zasady wczesnego zgłaszania i późnej obsługi wyjątku 12.Zawsze zwalniać zasoby po obsłużeniu wyjątku 13.Zgłaszać w metodzie wyjątek najbardziej odpowiedniej klasy 14.Nigdy nie używać mechanizmu wyjątków w sterowaniu przepływem programu 15.Walidować dane wejściowe w celu wczesnego zgłoszenia wyjątku 16.Zawsze logować pełną informację o każdym wyjątku 17.Umieszczać w wyjątku stosowne informacje w pełni go opisujące

24 18.Zawsze przerywać wątek, który zgłosił wyjątek 19.Stosować metodę szablonową zamiast powtarzania try-catch 20.Dokumentować wszystkie wyjątki w javadoc 21.Dla zwalniania zasobów należy preferować użycie finally w metodzie ponad użycie metody finalize w klasie

25 Konstruowanie własnej hierarchii wyjątków: Warto skonstruować własną nadklasę wyjątku dla biblioteki, żeby jej klient mógł przechwycić dowolny wyjątek z biblioteki w ramach pojedynczej klauzuli catch Zaleca się, aby hierarchie wyjątków były hierarchiami dziedziczenia, co jest sprzeczne z dobrymi praktykami inżynierii oprogramowania wzorce projektowe dla wyjątków?

26 Decyzja o tym czy wyjątki powinny być kontrolowane czy nie: Zaleca się spójność podejścia w odniesieniu do własnych wyjątków: albo wszystkie kontrolowane albo wszystkie niekontrolowane Czym kierować się w powyższej decyzji (argumenty za danym wyborem): Wyjątki kontrolowane Chcemy zaprząc kompilator do wspomagania procesu obsługi wyjątków Wyjątki niekontrolowane Nie chcemy zanieczyszczać kodu metod deklaracjami wyjątków Nie chcemy zanieczyszczać interfejsu deklaracjami wyjątków, które możemy chcieć zmienić w przyszłości

27 Wydaje się, że bardziej warte promowania są wyjątki niekontrolowane. Powody: Wyjątki niekontrolowane nie zanieczyszczają kodu zbędnymi blokami trycatch. Wyjątki niekontrolowane nie zanieczyszczają deklaracji metod zagregowanymi deklaracjami wyjątków. W praktyce rzadko zdarza się przeoczenie obsługi niekontrolowanego wyjątku. Powinny to wykryć testy, o ile proces wytwórczy jest prawidłowy. W praktyce nie potwierdza się opinia, jakoby trudniej było się zorientować jak obsłużyć wyjątek niekontrolowany. Wyjątki niekontrolowane pozwalają uniknąć problemu wersjonowania wymuszonego przez zmianę koncepcji obsługi wyjątków. Liczne dyskusje tego zagadnienia można znaleźć w internecie. Warto zauważyć, że C# wprowadza tylko wyjątki niekontrolowane nie bez powodu.

28 Obsługa wyjątków odporna na błędy. Może dojść do sytuacji, w której zgłoszenie wyjątku w bloku try może skutkować zgłoszeniem wyjątku w klauzuli catch i/lub w klauzuli finally. Przykład przerwania śladu pierwotnego wyjątku (por. z dobrymi praktykami).

29 InputStream input = null; try{ input = new FileInputStream( fname.txt"); //do something with the stream catch(ioexception e){ //first catch block throw new WrapperException(e); finally { try{ if(input!= null) input.close(); catch(ioexception e){ //second catch block throw new WrapperException(e);

30 Powyższy przykład ilustrujący utratę ciągłości śladu wyjątku nie jest skomplikowany. Dużo trudniejsze sytuacje obsługi wyjątków można spotkać w pracy z transakcjami JDBC. Aby zabezpieczyć się przed wspomnianym problemem należy zadbać o to, aby zawsze ostatni ze zgłoszonych wyjątków zawierał wszystkie zgłoszone wcześniej wyjątki. Ponadto w Java 7 wprowadzono mechanizm: try-with-resources Mechanizm ten pozwala rozwiązać wspomniany problem. Poprzedni przykład:

31 try(fileinputstream input = new FileInputStream( fname.txt")) { int data = input.read(); while(data!= -1){ System.out.print((char) data); data = input.read(); Dzięki temu, że FileInputStrem implementuje interfejs java.lang.autocloseable zasób ten zostanie automatycznie zamknięty po wykonaniu bloku try. W konstrukcji try-with-resources można wykorzystać każdą klasę, która implementuje ten interfejs. Mechanizm ten gwarantuje, że jeśli wyjątek zostanie zgłoszony w bloku try, to zostanie on rozpropagowany, podczas gdy wyjątek związany z zamknięciem zasobu zostanie wygaszony. Developer pozna więc pierwotną przyczynę zamiast problemów związanych ze sposobem obsługi błędu.

32 Jeśli trzeba obsłużyć w ten sposób więcej zasobów, to możemy wykorzystać konstrukcję: try( FileInputStream input = new FileInputStream( fname.txt"); BufferedInputStream bufferedinput = new BufferedInputStream(input) ){

33 Implementacja własnych zasobów podlegających mechanizmowi trywith-resources. Postać interfejsu AutoCloseable: public interface AutoClosable { public void close() throws Exception; Warto zauważyć, że jest to tzw. interfejs funkcyjny, co otwiera od razu możliwości zastosowania wyrażeń lambda z Java 8. Jest to zresztą obecnie dobra praktyka korzystania z zasobów.

34 Przykład własnego rozwiązania opartego o try-with-resources (źródło: Jakob Jenkov): public class MyAutoClosable implements AutoCloseable { public void doit() { System.out.println("MyAutoClosable doing public void close() throws Exception { System.out.println("MyAutoClosable closed!");

35 Przykład użycia własnej klasy implementującej AutoCloseable: private static void myautoclosable() throws Exception { try(myautoclosable myautoclosable = new MyAutoClosable()){ myautoclosable.doit(); Wynik wykonania powyższego kodu: MyAutoClosable doing it! MyAutoClosable closed!

36 Przykład wykorzystania rozwiązań z Java 8 dla Neo4J: wraz z zaznaczeniem zalet i wad takiego podejścia do obsługi wyjątków w transakcjach.

37 Problemem jest zanieczyszczenie kodu źródłowego (głównej logiki biznesowej, procesów biznesowych realizowanych w ramach paradygmatu klasowo-obiektowego) kodem obsługi wyjątków. Można to negatywne zjawisko ograniczyć na różne sposoby: Zastosowanie wzorca projektowego Metoda szablonowa mogącego prowadzić do obsługi wyjątków zbliżonej do sposobu obsługi zdarzeń Wzbogacanie wyjątków o informacje o unikalnym kodzie błędu i stosowanie exception handlers Zastosowanie podejścia aspektowego

38 Metoda szablonowa (źródło Jakob Jenkov). Mamy początkowo zanieczyszczony kod, który przy okazji pokazuje jak obsłużyć wcześniej rozważane problemy przerwania ciągłości wyjątków.

39 Input input = null; IOException processexception = null; try{ input = new FileInputStream(fileName); //...process input stream... catch (IOException e) { processexception = e; finally { if(input!= null){ try { input.close(); catch(ioexception e){ if(processexception!= null){ throw new MyException(processException, e, "Error message..." + filename); else { throw new MyException(e, "Error closing InputStream for file " + filename); if(processexception!= null){ throw new MyException(processException, "Error processing InputStream for file " + filename);

40 Dodajemy własną klasę zawierającą metodę szablonową stanowi ona implementację wspomnianego wzorca projektowego, z metodą o nazwie process() jako metodą szablonową, która jest parametryzowana kodem implementowanym przez klienta wzorca w metodzie doprocess().

41 public abstract class InputStreamProcessingTemplate { public void process(string filename){ IOException processexception = null; InputStream input = null; try{ input = new FileInputStream(fileName); doprocess(input); catch (IOException e) { processexception = e; finally { if(input!= null){ try { input.close(); catch(ioexception e){ if(processexception!= null){ throw new MyException(processException, e, "Error message..." + filename); else { throw new MyException(e, "Error closing InputStream for file " + filename); if(processexception!= null){ throw new MyException(processException, "Error processing InputStream for file " + filename); //override this method in a subclass, to process the stream public abstract void doprocess(inputstream input) throws IOException;

42 Warto zauważyć, że mamy do zaimplementowania jedną metodę korzystamy z anonimowej klasy wewnętrznej. new InputStreamProcessingTemplate(){ public void doprocess(inputstream input) throws IOException{ int inchar = input.read(); while(inchar!- -1){ //do something with the chars....process("somefile.txt"); Powyższy kod przypomina obsługę zdarzenia, jakim jest w tym przypadku zgłoszenie wyjątku.

43 Kolejny wariant wzorca wykorzystuje metodę statyczną nie trzeba tworzyć obiektu. Można również pokusić się o wykorzystanie interfejsów do implementacji tego wzorca lub wykorzystać wyrażenia lambda z Java 8 w implementacji z interfejsem mielibyśmy znowu interfejs funkcyjny.

44 Są znane dwie metody wzbogacania informacji związanej z kontekstem w zgłoszonym wyjątku (na podstawie: Jakob Jenkov): Exception wrapping Exception enrichment

45 Exception wrapping. Przykład: catch (SQLException sqlexception) { throw new MyException("error text", sqlexception); Zalety: Uniknięcie sytuacji, w której mamy ogólne metody z długą listą deklaracji niskopoziomowych wyjątków Zamiana niskopoziomowych wyjątków na bardziej ogólne na rzecz komponentów wyższych warstw Wady: Bardzo długi ślad na stosie wyjątków Sklejanie komunikatów o błędzie wewnątrz wyjątku trudne do dekompozycji i do zrozumienia przyczyny błędu

46 Exception enrichment. Polega na dodawaniu do obiektu wyjątku informacji kontekstowej i ponownym zgłaszaniu tego wyjątku. Przykład: try{ method1(); catch(enrichableexception e){ e.addinfo("an error occurred when trying to..."); throw e;

47 W ramach exception enrichment istnieje możliwość dodawania informacji o: Unikalnym kodzie błędu (identyfikujemy jednoznacznie rodzaj błędu znamy go w chwili zgłoszenia) Kontekście wystąpienia błędu (identyfikujemy miejsce w kodzie, w którym to miejscu wyjątek został zgłoszony)

48 Czasem nie da się uniknąć stosowania exception wrapping: Przechwycenie zarządzanego wyjątku non-enrichable exception catch(ioexception ioexception) throw new EnrichableException( ioexception, "METHOD1", "ERROR1", "Original error message"); Istnieje również możliwość wprowadzenia exceptions handlers jeśli wyjątki mają unikalne kody błędu. Wtedy można wyprowadzić ich obsługę spoza kodu procesu biznesowego.

49 W systemach korporacyjnych zwykle wymaga się logowania wyjątków. Umożliwia to analizowanie informacji o działaniu systemu przez pracowników przedsiębiorstwa korzystającego z takiego oprogramowania. Informacje takie mogą służyć: Analizie przyczyn problemu w oprogramowaniu Reprodukcji błędu pomocnej przy usuwaniu błędu W którym miejscu kodu powinno następować logowanie: Bottom-level logging logowanie od razu w komponencie, który zgłosił wyjątek Mid-level logging logowanie pośrodku stosu wywołań gdy wiedza o wyjątku będzie wystarczająca Top-level logging logowanie centralne na wierzchołku stosu wywołań

50 Bottom-level logging. Wady: Zakodowanie logowania w wielu miejscach na niskim poziomie Trudność z dostosowaniem sposobu logowania w przypadku wielokrotnego użycia komponentu w wielu aplikacjach Niedobór informacji w komponencie niskiego poziomu nie wiemy jakiej operacji znanej użytkownikowi dotyczył zgłoszony wyjątek

51 Mid-level logging Wady: Konieczność wzbogacania niskopoziomowej informacji Nadal dużo kodu obsługi błędów

52 Top-level logging Zalety: Wyraźny podział odpowiedzialności w systemie Jedno miejsce w kodzie do zarządzania obsługą błędów Wady: Brak wiedzy niskopoziomowej o przechwyconym wyjątku

53 W rozproszonych twardych systemach czasu rzeczywistego występują komponenty, których zadanie polega na obsłudze błędów lub zgłoszenia alarmów. Jest to więc podejście top-level. Dobrą praktyką jest wzbogacanie informacji o wyjątku w czasie wstecznej propagacji przez stos pod kątem logowania exception enrichment. Rekomendowana jest strategia top-level logging w powiązaniu z exception enrichment.

54 Strategia obsługi wyjątków (źródło Jakob Jenkov).

55 Wymagania dotyczące obsługi wyjątków: Pierwszorzędne (reakcja aplikacji, adresaci, diagnostyka) Drugorzędne (abstrakcja i enkapsulacja, łatwość wprowadzania zmian) Rodzaje błędów: Użytkownika Usług Wewnętrzne Klasyfikacja błędu może ulec weryfikacji podczas jego propagacji mamy wtedy do czynienia z jego re-klasyfikacją.

56 Elementy strategii obsługi wyjątków 1. Detekcja błędu 2. Zbieranie informacji o błędzie Przyczyna Lokalizacja 3. Zgłoszenie wyjątku 4. Propagacja wyjątku, możliwe wzbogacenie o informację kontekstową Pasywna Aktywna 5. Przechwycenie i reakcja na wyjątek: Powtórzenie operacji jeśli to możliwe Notyfikacja uczestników

57 Klasa wyjątku zawiera listę obiektów z informacjami o błędzie.

58 public class AppException extends Exception { protected List<ErrorInfo> errorinfolist = new ArrayList<ErrorInfo>(); public AppException() { public ErrorInfo addinfo(errorinfo info){ this.errorinfolist.add(info); return info; public ErrorInfo addinfo(){ ErrorInfo info = new ErrorInfo(); this.errorinfolist.add(info); return info; public List<ErrorInfo> geterrorinfolist() { return errorinfolist;

59 Klasa informacji o błędzie.

60 public class ErrorInfo { protected Throwable cause = null; protected String errorid = null; protected String contextid = null; protected int errortype = -1; protected int severity = -1; protected String usererrordescription = null; protected String errordescription = null; protected String errorcorrection = null; protected Map<String, Object> parameters = new HashMap<String, Object>();

61 Przykład użycia obu klas.

62 if(! new File(filePath).exists()){ AppException exception = new AppException(); ErrorInfo info = exception.addinfo(); info.seterrorid("filenotfound"); info.setcontextid("fileloader"); info.seterrortype(errorinfo.error_type_client); info.setseverity(errorinfo.severity_error); info.seterrordescription("no file found at file path + filepath); info.seterrorcorrection("filepath should point to existing file."); info.getparameters().put("filepath", filepath); throw exception;

63 W celu zmniejszenia ilości kodu odpowiadającego za tworzenie obiektów informacji o wyjątkach oraz za inicjalizowanie ich można skorzystać z fabryki (metoda wytwórcza) ErrorInfoFactory. Wtedy kod uprości się: try{ FileInputStream fileinputstream = new FileInputStream(filePath); //... catch (IOException e) { AppException exception = new AppException(); exception.addinfo( ErrorInfoFactory.getFileReadErrorInfo(e, filepath) ); throw exception;

64 Koniec

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

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

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

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 9: Wyjątki 5/5/2013 S.Deniziak:Programowanie obiektowe - Java 1 Co to jest wyjątek? błąd wykonania: InputFile.java:8: Warning: Exception java.io.filenotfoundexception must

Bardziej szczegółowo

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

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746) Obsługa błędów za pomocą wyjątków Paweł Motofa (140746) Co zrobić, gdy wystąpi błąd Przykład Co zrobić, gdy wystąpi błąd Co zrobić, gdy wystąpi błąd Co zrobić, gdy wystąpi błąd Jak wyglądałaby funkcja

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Wyjątki mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Spis treści Wyjątki... 3 2 Wyjątki Podczas pracy programu

Bardziej szczegółowo

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

Języki i metody programowania Java INF302W Wykład 3 (część 1) Języki i metody programowania Java INF302W Wykład 3 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 3, część 1 1 STRUKTURA WYKŁADU 1. Wyjątki,

Bardziej szczegółowo

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

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196 Wyjątki 180 / 196 Wyjątki W Javie istnieje mechanizm tzw. wyjątków (ang. exception), który pozwala na przechwytywanie błędów pojawiających się w programie. Kompilacja tab [ 1 0 ] = 100; spowoduje powstanie

Bardziej szczegółowo

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

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu. WYJĄTKI Klasa Throwable Exception Error Klasy dziedziczące po klasie Exception są typami wyjątków, które automatycznie obsługuje Java lub program przy jawnym przechwytywaniu i obsłudze wyjątków w blokach

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

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

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

Programowanie w języku Java WYKŁAD

Programowanie w języku Java WYKŁAD Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 26.05.2014 WYKŁAD 13 Refleksja Data Access Object

Bardziej szczegółowo

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

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x() Wykład 3. Wyjątki 1) Obsługa wyjątków system czasu przebiegu Javy przerwanie programu class Wyjatek_1 //plik Proba_1.java int x; Wyjatek_1(int x_) x = x_; int iloraz() int p = 45/x; //generowanie wyjątku

Bardziej szczegółowo

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

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne. Java podstawy jęyka Wykład 2 Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne. Wyjątki: obsługa błędów Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego 12.03.2015

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

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

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy? Zad.28. Utwórz klasę, która implementuje oba interfejsy: public void pisz ( ) ; public void pisz ( ) ; Zad.29. Utwórz klasę, która implementuje oba interfejsy: public void pisz ( int l i c z b a ) ; public

Bardziej szczegółowo

Dawid Gierszewski Adam Hanasko

Dawid Gierszewski Adam Hanasko Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

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

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System

Bardziej szczegółowo

Rysunkowy tutorial Możesz swobodnie dystrybuować ten plik jeśli pozostawisz go w nietkniętym stanie. Możesz także cytować jego fragmenty umieszczając w tekście odnośnik http://mbartyzel.blogspot.com Jak

Bardziej szczegółowo

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń Java SE Laboratorium nr 4 Temat: Obsługa wyjątków i zdarzeń 1 1. Definicja i idea I. Obsługa wyjątków Praktycznie w każdym większym programie powstają jakieś błędy. Powodów jest bardzo wiele, może być

Bardziej szczegółowo

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

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

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń: Klasy Metody [ModyfikatorMetody] TypZwrotny Nazwa (Typ arg1, ) { // implementacja metody ModyfikatorMetody może być kombinacją wyrażeń: modyfikator widzialności public dostępna dla metod spoza klasy protected

Bardziej szczegółowo

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Platformy Programistyczne Wykład z Javy dla zaawansowanych Platformy Programistyczne Wykład z Javy dla zaawansowanych Agata Migalska 20 maja 2014 Plan wykładu 1 Polimorfizm i dziedziczenie 2 Życie i śmierć obiektu 3 Poziomy oraz modyfikatory dostępu 4 Obsługa

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

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,

Bardziej szczegółowo

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

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu Zdalne wywołanie metod - koncepcja Oprogramowanie systemów równoległych i rozproszonych Wykład 7 RMI (Remote Method Invocation) - obiektowe RPC, dostarcza klientowi interfejs do obiektu, implementacja

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

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

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

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

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. 1/14 Prototype (prototyp) Cel: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. Przykład: Edytor 3D klient tworzy obiekty różnych kształtów

Bardziej szczegółowo

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass

Bardziej szczegółowo

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

Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Wykład 7 p. 1/2 Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Zdalne wywołanie

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki W językach niskopoziomowych błędy zgłaszane były przez zwracanie odpowiedniego statusu (liczby) W C main() zwraca int żeby można było określić

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

Klasy cd. Struktury Interfejsy Wyjątki

Klasy cd. Struktury Interfejsy Wyjątki Klasy cd. Struktury Interfejsy Wyjątki Struktury Struktura pozwala na zdefiniowanie typu danych, który nie charakteryzuje się zbyt złożoną funkcjonalnością (np. punkt, kolor, etc). Do definiowania struktury

Bardziej szczegółowo

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid Tomasz Kuczyński Dział Aplikacji Tomasz Nowak Zespół Bezpieczeństwa Wrocław, 2.12.2010 r. Konferencja i3: internet

Bardziej szczegółowo

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów

Bardziej szczegółowo

Efekty uboczne błędów

Efekty uboczne błędów Obsługa wyjątków Efekty uboczne błędów Fragment kodu programu jest bezpieczny (ang. exception-safe) jeżeli błędy, które wystąpią w trakcie przetwarzania tego kodu nie będą powodowały niepożądanych efektów

Bardziej szczegółowo

Diagramy czynności Na podstawie UML 2.0 Tutorial

Diagramy czynności Na podstawie UML 2.0 Tutorial Diagramy czynności Na podstawie UML 2.0 Tutorial http://sparxsystems.com.au/resources/uml2_tutorial/ Zofia Kruczkiewicz 1 Diagramy czynności 1. Diagramy czyności UML http://sparxsystems.com.au/resources/uml2_tutorial/

Bardziej szczegółowo

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C #import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

Podejście obiektowe do budowy systemów rozproszonych

Podejście obiektowe do budowy systemów rozproszonych Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak 1 Mechanizm RMI umożliwia

Bardziej szczegółowo

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

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

Programowanie poprzez testy z wykorzystaniem JUnit

Programowanie poprzez testy z wykorzystaniem JUnit Programowanie poprzez testy z wykorzystaniem JUnit Programowanie ekstremalne (XP) XP zaproponowano w 1999 (K. Beck: Extreme Programming Explained ) XP dedykowane jest do projektów: O małym lub średnim

Bardziej szczegółowo

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

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

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

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka stub interfejs serwer szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje

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

Wykład 04. Programowanie obiektowe. Maciej Wołoszyn 17 marca Spis treści

Wykład 04. Programowanie obiektowe. Maciej Wołoszyn 17 marca Spis treści Programowanie obiektowe Wykład 04 Maciej Wołoszyn mailto:woloszyn@fatcat.ftj.agh.edu.pl 17 marca 2009 Spis treści 1 Wyjatki i obsługa błędów 2 1.1 Rzucanie wyjątków............................... 2 1.2

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Zaawansowane programowanie obiektowe - wykład 5

Zaawansowane programowanie obiektowe - wykład 5 Zaawansowane programowanie obiektowe - wykład 5 dr Piotr Jastrzębski (czynnościowe) opisują zachowanie obiektów, komunikację pomiędzy nimi i ich odpowiedzialność. Interpreter Iterator (kursor) Łańcuch

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Klasy abstrakcyjne, interfejsy i polimorfizm

Klasy abstrakcyjne, interfejsy i polimorfizm Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z

Bardziej szczegółowo

Wzorce logiki dziedziny

Wzorce logiki dziedziny Wzorce logiki dziedziny 1. Wzorce logiki dziedziny skrypt transakcji (Transaction Script), brama tabeli (Table Data Gateway), model dziedziny (Domain model), strategia (Strategy), moduł tabeli (Table Module),

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

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

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6 Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

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

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

Bardziej szczegółowo

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie. dr Jarosław Skaruz Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,

Bardziej szczegółowo

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

Bardziej szczegółowo

Obsługa wyjątków. Rysunek 2-4 Hierarchia dziedziczenia klas wyjątków

Obsługa wyjątków. Rysunek 2-4 Hierarchia dziedziczenia klas wyjątków Obsługa wyjątków Podczas działania programu mogą wystąpić róŝne sytuacje specjalne, do których naleŝą m.in. wystąpienia błędu polegającego na próbie otwarcia pliku, który nie istnieje. Java posiada zapoŝyczony

Bardziej szczegółowo

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7 Instrukcja 7 Laboratoria 9, 10 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

Wzorce prezentacji internetowych

Wzorce prezentacji internetowych Wzorce prezentacji internetowych 1. Model kontrolera widoku (Model View Controller). 2. Kontroler strony (Page Controller). 3. Kontroler fasady (Front Controller). 4. Szablon widoku (Template View). 5.

Bardziej szczegółowo

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015 Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass

Bardziej szczegółowo

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego. Umiejętność czytania oraz tworzenia diagramów klas UML jest podstawą w przypadku zawodu programisty. Z takimi diagramami będziesz spotykał się w przeciągu całej swojej kariery. Diagramy klas UML są zawsze

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

Bardziej szczegółowo

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób? Problemy projektowania obiektowego Czy podobne problemy można rozwiązywac w podobny sposób? Czy te problemy można przedstawić w abstrakcyjny sposób, tak aby były pomocne w tworzeniu rozwiązań w różnych

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

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1 Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1 Zofia Kruczkiewicz Zofia Kruczkiewicz Inżynieria oprogramowania INEK011 1 Składnia elementów na diagramach UML 1. W prezentacji składni diagramów

Bardziej szczegółowo

Projektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)

Projektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów) Projektowanie obiektowe Wzorce projektowe Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów) 1 Roadmap Adapter Bridge Composite Facade 2 Pojęcia obiekt interfejs typ klasa 3 Co to jest delegacja?

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych Podejście obiektowe do budowy systemów rozproszonych Wywoływanie metod zdalnych model systemu obiekt aplikacja kliencka interfejs serwer proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Wzorce projektowe i refaktoryzacja

Wzorce projektowe i refaktoryzacja Wzorce projektowe i refaktoryzacja Paweł Kozioł p.koziol@students.mimuw.edu.pl 18.01.2005 Moja praca magisterska Narzędzie dla środowiska Eclipse wspierające stosowanie wzorców projektowych J2EE Prowadzący:

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

JAX-RS czyli REST w Javie. Adam Kędziora

JAX-RS czyli REST w Javie. Adam Kędziora JAX-RS czyli REST w Javie Adam Kędziora Webservice Usługa sieciowa (ang. web service) komponent programowy niezależny od platformy i implementacji, dostarczający określonej funkcjonalności. SOAP,UDDI,XML,WSDL

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

Konwencje obsługi błędów

Konwencje obsługi błędów Obsługa błędów Rakieta Ariane 5 spadła 40 sekund po starcie. Straty 0,5 miliarda dolarów. Przyczyna: wyjątek (exception) rzucony przez kod napisany pierwotnie dla Ariane 4. Feralna procedura była niepotrzebna

Bardziej szczegółowo

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu

Bardziej szczegółowo