Dawid Gierszewski Adam Hanasko

Podobne dokumenty
Kolekcje - pakiet Java Collections Framework

Java niezbędnik programisty spotkanie nr 8. Kolekcje c.d.

Kolekcje - pakiet Java Collections Framework

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

Programowanie w języku Java. Kolekcje

Programowanie obiektowe

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

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

Aplikacje w środowisku Java

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

Programowanie Obiektowe (Java)

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

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

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

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

Programowanie obiektowe

Programowanie obiektowe

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

Kurs programowania. Wykład 9. Wojciech Macyna

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

Klasy abstrakcyjne, interfejsy i polimorfizm

Platformy Programistyczne Podstawy języka Java

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

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

Programowanie obiektowe

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

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

Programowanie i projektowanie obiektowe

TYPY GENERYCZNE (GENERICS)

Programowanie obiektowe

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

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

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

Kolekcje obiektów. Wyj tki.

Programowanie Obiektowe Ćwiczenie 4

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

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

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

java.util.* :Kolekcje Tomasz Borzyszkowski

Typy sparametryzowane

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

Programowanie obiektowe

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

Polimorfizm. dr Jarosław Skaruz

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Typy uogólnione. Programowanie obiektowe. Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego. 8 kwietnia 2013

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

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Java: interfejsy i klasy wewnętrzne

Systemy Rozproszone - Ćwiczenie 6

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

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

Dziedziczenie. Tomasz Borzyszkowski

Programowanie obiektowe i zdarzeniowe

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Kolekcje w Javie cz. 1

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

Programowanie w Javie- wykład 11 Kolekcje (listy)

Klasy cd. Struktury Interfejsy Wyjątki

Wyjątki (exceptions)

Programowanie obiektowe i język Java

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

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Dziedziczenie. dr Jarosław Skaruz

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

Kolekcje. Na podstawie:

PHP: bloki kodu, tablice, obiekty i formularze

Podstawy programowania obiektowego

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

Programowanie obiektowe

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

Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

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

Programowanie obiektowe

Enkapsulacja, dziedziczenie, polimorfizm

Wykład 6: Dziedziczenie

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

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład 4: Klasy i Metody

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

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

Podstawy i języki programowania

TEMAT : KLASY DZIEDZICZENIE

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Dokumentacja do API Javy.

Język C++ wykład VIII

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Szablony klas, zastosowanie szablonów w programach

WYJĄTKI, KOLEKCJE ZAGADNIENIA: 1. Wyjątki, 2. Kolekcje, vector, hashtable, properties, Klasy Arrays i Collections.

Wykład 5: Więcej o Klasach i Metodach

Kurs WWW. Paweł Rajba.

Wykład 8: klasy cz. 4

Podstawy otwartych języków programowania Przechowywanie danych

Wywoływanie metod zdalnych

Metody Metody, parametry, zwracanie wartości

Transkrypt:

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{ But pierwszy; But drugi; Redundancja kodu, wiele możliwości pomyłki

Stosujemy mechanizm dziedziczenia public class ParaObiektow { Object pierwszy; Object drugi; public Object getpierwszy() { return pierwszy; public static void main(string[] args) { ParaObiektow para = new ParaObiektow("tekst", new Integer(20)); String tekst = (String) para.getpierwszy(); Rezygnujemy z automatycznego sprawdzania typów wykonywanego przez kompilator i każemy mu uwierzyć (a nie wyliczyć), że typ obiektu jest właściwy.

Pomysł jest bardzo prosty - chcemy sparametryzować fragment kodu typem przetwarzanych danych, więc dodajemy nowy rodzaj parametrów opisujących typy. public class Para<T1, T2> { T1 pierwszy; T2 drugi; public Para(T1 pierwszy, T2 drugi) { this.pierwszy = pierwszy; this.drugi = drugi; public T1 getpierwszy() { return pierwszy;

Typem jest klasa uogólniona wraz z konkretnymi parametrami Pary z różnymi typami parametrów są różne Para< String, Integer> p1 = null; Para< Integer, String> p2 = p1; // błąd Jako parametrów typów uogólnionych nie można podawać typów prostych Para<int, int> para = new Para<int, int>(7, 13); // błąd Para<Integer, Integer> para = new Para<Integer, Integer>(7, 13);

zwykłe klasy mogą dziedziczyć po (ukonkretnionych) klasach uogólnionych public class ParaInt extends Para<Integer, Integer>{ public ParaInt(Integer pierwszy, Integer drugi){ super (pierwszy, drugi); klasy uogólnione mogą dziedziczyć po klasach uogólnionych public class ParaJednorodna<T> extends Para<T,T>{ public ParaJednorodna(T pierwszy, T drugi) { super (pierwszy, drugi); argumentami dla klas uogólnionych mogą być dowolnie złożone typy, w szczególności ukonkretnienia tych samych klas uogólnionych Para< Para<String, Integer>, String > dużapara

deklaracje poprzedzamy podaniem parametrów (w postaci listy ujętej w kątowe nawiasy) public class TestMetody { <T> Para<T,T> utworzpare(t v) { return new Para<T,T>(v, v); void test() { Para<Integer, Integer> p = utworzpare(new Integer(202));

Przykład chcemy sortować parę: public class ParaPosortowana <T> extends ParaJednorodna<T> { public ParaPosortowana(T pierwszy, T drugi) { super(pierwszy, drugi ); if (pierwszy().compareto(drugi()) > 0) // blad { T pom = pierwszy(); pierwszy(drugi()); drugi(pom); Powinno być: public class ParaPosortowana <T extends Comparable<T> > extends ParaJednorodna<T>

klasy, których obiekty służą do przechowywania zestawów innych obiektów udostępniają mechanizmy pozwalające na wstawianie, przeglądanie i pobieranie składowanych w nich obiektów mają służyć do przechowywania obiektów różnych typów kolekcja jest w stanie pomieścić w zasadzie dowolną ilość obiektów

Klasy konkretne Klasy abstrakcyjne Interfejsy

Metoda int size() boolean isempty() boolean contains(object o) boolean add(object o) boolean addall(collection c) boolean remove(object o) boolean removeall(collectin c) boolean retainall(collection) void clear() Object [] toarray() Opis zwraca liczbę elementów zawartych w kolekcji sprawdza, czy kolekcja jest pusta sprawdza, czy kolekcja zawiera podany obiekt. dodaje obiekt o do kolekcji. dodanie do dowolnej kolekcji wszystkich elementów kolekcji przekazanej przez parametr c usuwa obiekt o z kolekcji. usunięcie z kolekcji wszystkich elementów, które są zawarte w kolekcji przekazanej przez parametr c pozostawienie w kolekcji tylko tych elementów, które są zawarte w kolekcji przekazanej przez parametr c usunięcie wszystkich elementów kolekcji. zwraca tablicę obiektów zawartych w kolekcji.

Implementują metody z interfejsów AbstractCollection<E> implementacja większości metod zadeklarowanych w interfejsie Collection AbstractList<E>, AbstractQueue<E>, AbstractSet<E> dziedziczą po AbstractCollection i implementują większość metod interfejsów odpowiednio List, Queue, Set

ArrayList<E> realizacja tablicy dynamicznej dziedzicząca po AbstractList LinkedList<E> lista dziedzicząca po AbstractSequentialList TreeSet<E> zbiór przechowywany w strukturze typu drzewa HashMap<K,V> podstawowa implementacja interfejsu Map<K,V>. Zgodnie z nazwą stosuje w swojej implementacji haszowanie. Zapewnia dostęp do elementów (metody get i put) w czasie stałym (o ile funkcja haszująca równomiernie rozrzuci klucze).

Iterator to obiekt pozwalający poruszać się (iterować) po innym obiekcie (kolekcji). Interfejs Iterator<E> Przykład: Iterator iter = c.iterator(); metoda boolean hasnext(); E next(); while(iter.hasnext()) void remove(); { Object o = iter.next(); //... // wykonanie operacji na obiekcie o //... if ( warunek_usuniecia(o) ) iter.remove(); opis informuje, czy w kolekcji są jeszcze elementy pobiera kolejny element z kolekcji usuwa z kolekcji element, który był ostatnio przekazany jako wynik metody next.

Służy do wykonania operacji na wszystkich elementach for (Typ Identyfikator: Wyrażenie) Instrukcja typ elementów kolekcji Przykład: nazwa, za pomocą której można w Instrukcji odwoływać się do kolejnych elementów kolekcji, która jest wyliczana jako wartość Wyrażenia for(string s: kolekcja) System.out.println(s);

Pętla foreach for (type var : arr) { body-of-loop Równoważność for (int i = 0; i < arr.length; i++) { type var = arr[i]; body-of-loop for (type var : coll) { body-of-loop for (Iterator<type> iter = coll.iterator(); iter.hasnext(); ){ type var = iter.next(); body-of-loop

try{ <instrukcje> catch(typwyjątku refdowyjątku){ <obsługawyjątku> catch(typwyjątku refdowyjątku){ <obsługawyjątku>... catch(typwyjątku refdowyjątku){ <obsługawyjątku> finally{ <kodzawszewykonywany>

boolean metoda(...) { try { //instrukcje, które mogą spowodować //wyjątek catch (Exception e) { return false; finally { //uporządkowanie return true;

Throwable Exception Error RuntimeException

pochodne od klas RuntimeException i Error wyjątki niekontrolowane pozostałe wyjątki - kontrolowane, tzn.: metody zgłaszające te wyjątki wymieniają je jawnie w swojej deklaracji w klauzuli throws metody te mogą zgłaszać tylko wymienione w klauzuli throws wyjątki lub wyjątki ich podklas odwołania do tych metod wymagają jawnej obsługi ewentualnie zgłaszanych wyjątków:

Nieobsłużone wyjątki wydostając się poza main powodują przerwanie wykonywania programu oraz wypisanie komunikatu o błędzie: Exception in thread "main" java.lang.exception at test.wyjątki.głębiej(wyjątki.java:4) Szczegółowość informacji o umiejscowieniu błędu w kodzie zależy od ustawień kompilatora.

class Wyjątki { public static void main(string[] args) throws Exception { (new Wyjątki()).głęboko(); void głęboko() throws Exception { głębiej(); void głębiej() throws Exception { throw new Exception(); //kompilator wykryje miejsca, do których //sterowanie nigdy nie dotrze

class Wyjątki { public static void main(string[] args) throws Exception { głęboko(); static void głęboko() throws Exception { głębiej(); static void głębiej() throws MójWyjątek { throw new MójWyjątek(); Exception in thread "main" test.wyjątki at test.wyjątki.głębiej(wyjątki.java:114) at test.wyjątki.głęboko(wyjątki.java:111) at test.wyjątki.main(wyjątki.java:97)

static void głęboko() throws MójWyjątek { try { głębiej(); catch (MójWyjątek w) { w.fillinstacktrace(); throw w; //throw (MójWyjątek) w.fillinstacktrace(); //ta metoda jest zazwyczaj dziedziczona, aż z Throwable //czy przesłaniając można zmienić jej typ zwrotny Exception in thread "main" test.mójwyjątek at test.wyjątki.głęboko(wyjątki.java:120) at test.wyjątki.main(wyjątki.java:112)

Aby stworzyć własny wyjątek należy zdefiniować własną klasę dziedziczącą z podklasy Exception, np. class NowyWyjatek extends Exception {... w której można zawrzeć pola i metody służące dodatkowej informacji o przyczynach powstania wyjątku

Zgłaszanie wyjątku: jeśli nasza metoda ma zgłaszać wyjątek NowyWyjatek to musi podać w deklaracji, że może to zrobić tzn.: void naszametoda () throws nowywyjatek naszametoda sprawdza warunki powstania błędu, jeśli wystąpił błąd tworzy wyjątek: new NowyWyjatek(..) throw new NowyWyjatek

Podczas inicjalizacji statycznej klasy nowego obiektu nie mogą być zgłaszane żadne wyjątki kontrolowane. Każdy wyjątek kontrolowany, który może być zgłoszony w trakcie inicjalizacji atrybutów egzemplarza lub podczas wykonywania kodu z bloków inicjalizacji ({... ), musi być wymieniony w klauzulach throws wszystkich konstruktorów.

Studia informatyczne materiały dydaktyczne: http://wazniak.mimuw.edu.pl/

sirius.cs.put.poznan.pl/~inf89743/po/java.pdf