Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

2004-03-161 Implementacja ekstensji klasy Małachowska Anna, Karwowski Piotr, gr. 622.

Podobne prezentacje


Prezentacja na temat: "2004-03-161 Implementacja ekstensji klasy Małachowska Anna, Karwowski Piotr, gr. 622."— Zapis prezentacji:

1 Implementacja ekstensji klasy Małachowska Anna, Karwowski Piotr, gr. 622

2 Plan prezentacji: 1.Drobne przypomnienie teorii ;-) 2.Implementacja ekstensji klasy: i) przy użyciu tablicy statycznej ii) przy użyciu kolekcji a) lista (list) b) mapa (map) c) zbiór (set) iii) w postaci wystąpienia odrębnej klasy 3.Dodatki :) a) implementacja metod obiektowych i klasowych 4.Zadania do rozwiązania

3 Drobne przypomnienie teorii Ekstensja klasy (class extent) - aktualny (zmienny w czasie!) zestaw wszystkich wystąpień (instancji) tej klasy. WAŻNE: jest to zbiór wszystkich wystąpień danej klasy (bezpośrednich i pośrednich), ALE obcięty do atrybutów wyspecyfikowanych w tej klasie. Dlaczego zbiór ekstensji zawiera także wystąpienia pośrednie? Ponieważ obiekt jest wystąpieniem bezpośrednim swojej klasy ale i wystąpieniem pośrednim wszystkich jej nadklas. W implementacji, ekstensja jest specjalną strukturą danych dołączoną do klasy. Ta struktura przechowuje wszystkie obiekty będące członkami danej klasy. Przykład obrazkowy dla osób oglądających tylko rysunki :) PRACOWNIK NAZWISKO ROK_UK ZAROBEK DZIAŁ :PRACOWNIK NAZWISKO=Kluska ROK_UR=1970 ZAROBEK=2500 DZIAŁ=handlowy :PRACOWNIK NAZWISKO=Wałek ROK_UR=1976 ZAROBEK=2800 DZIAŁ=marketing instancja klasy klasa instancja klasy zbiór instancji = ekstensja klasy

4 Implementacja (i - tablica stat.) Zalety: Całkiem prosta implementacja Łatwy i szybki dostęp do dowolnego elementu tablicy Wydajność Wady: Stały, niezmienny rozmiar Mało efektywne rozwiązanie od strony usuwania elementów Brak zaimplementowanych użytecznych metod (wstawianie, usuwanie, przesuwanie... itp) Obsługa narzuconego typu danych (np. nie można umieścić w tablicy dowolnych obiektów) Listing implementacja przy użyciu tablicy statycznej – KLIKNIJ TUTAJ.KLIKNIJ TUTAJ Skrócony przykład implementacji: class Pracownik {// klasa pracownik String imie;// i jej atrybuty String nazwisko; int pensja; int id_pracownika; public static void main(String args[]) {} static Pracownik pracownicy[] = new Pracownik[100];// tablica stat. static int index = 0;// wskaźnik static final int max = 100; // rozmiar tab. public Pracownik(String imie, String nazwisko, int pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; if(index

5 Implementacja (ii - kolekcje - wstęp) Co to jest kolekcja? Kolekcja (Collection), określana jako obiekt grupujący elementy w jedną bryłę. Struktura znacznie bardziej zaawansowana od tablic statycznych – kolekcje posiadają własne metody do wyszukiwania czy sortowania oraz umożliwiają przechowywanie dowolnego typu obiektów. Więcej o kolekcjach:

6 Implementacja (ii kolekcje – lista) Lista (interfejs) – uporządkowana kolekcja, określana czasem jako sekwencja Cechy: Daje dużą kontrolę nad tym gdzie chcemy wstawić nowy element praktyczny dostęp do dowolnego elementu (indeksowanie) Może zawierać duplikaty Przechowuje obiekty w takiej kolejności jak je wstawimy Główne implementacje: ArrayList – stosunkowo podobna do tablicy. Szybki dostęp do elementów ale wolniejsza przy wstawianiu i usuwaniu do/z wnętrza. LinkedList – tanie usuwanie i wstawianie w środek listy (stały czas w przeciwieństwie do liniowego w ArrayList). Lista dwukierunkowa, obsługuje kolejki i stosy. Listing implementacji przy użyciu kolekcji (ArrayList) – KLIKNIJ TUTAJ.KLIKNIJ TUTAJ Skrócony przykład implementacji: // klasa class Pracownik { String imie; String nazwisko; int pensja; // deklaracja listy ArrayList pracownicy = new ArrayList(); // dodawanie do listy public Pracownik (String imie, String nazwisko, int pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; pracownicy.add(this); } // pobieranie z listy Pracownik n = (Pracownik)pracownicy.get(id); // usuwanie z listy pracownicy.remove(id);

7 Implementacja (ii kolekcje - mapa) Mapa (interfejs) – określana też jako słownik, jest odzworowaniem klucz- element. Mapa nie jest w sensie stricte kolekcją, choć jest związana z Java Collection Framework Cechy: Każdy element identyfikowany jest przez unikatowy klucz (1 klucz ident. max 1 el.) Nie mogą wystąpić duplikaty kluczy Obiekty są uporządkowane wg wewnętrznej kolejności a nie w kolejności dodawania! Główne implementacje: HashMap (praktyczne to samo co HashTable) - zapewnia wstawianie / szukanie el. w stałym czasie. Nieposortowane (oparte na tablicy haszującej/mieszającej). TreeMap - implementacja w formie drzewa, zapewnia sortowanie rosnące po kluczach. Złożoność oczywiście logarytmiczna. Skrócony przykład implementacji: // klasa class Pracownik { String imie; String nazwisko; int pensja; // deklaracja mapy HashMap pracownicy = new HashMap(); // dodawanie do mapy public Pracownik (String imie, String nazwisko, int pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; pracownicy.put(klucz, this); } // pobieranie z mapy Pracownik p = (Pracownik)pracownicy.get(klucz); if (p != null) { System.out.println("pierwszy = " + p.imie); } // usuwanie z mapy pracownicy.remove(klucz);

8 Implementacja (ii kolekcje - zbiór) Zbiór (interfejs) – oparty na matematycznym pojęciu zbioru Cechy: Bardzo prosta implementacja Brak jakiejkolwiek kolejności (uporządkowania) Nie mogą wystąpić duplikaty elementów ani więcej niż 1 element null Nie ma opcji bezpośredniego pobierania obiektów ze zbioru – konieczne jest uprzednie rzutowanie zbioru np. na tablicę! Główne implementacje: HashSet - umożliwia szybkie wyszukiwanie elementów. Zawartość nieuporządkowana. TreeSet - zbiór uporządkowany na podstawie drzewa, gwarantuje iż elementy są posortowane rosnąco. Złożonośc logarytmiczna. Skrócony przykład implementacji: // klasa class Pracownik { String imie; String nazwisko; int pensja; // deklaracja zbioru TreeSet pracownicy = new TreeSet(); // dodawanie do zbioru public Pracownik (String imie, String nazwisko, int pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; pracownicy.add(this); } // usuwanie ze zbioru pracownicy.remove(new Pracownik("Jan", "Kluska"));

9 Implementacja (ii - kolekcje - iterator) Co to jest iterator? Iterator (Collection) służy do poruszania się do przodu po elementach kolekcji oraz umożliwia ich łatwe wyświetlanie i usuwanie ( next() zwraca kolejny element, hasNext() określa czy kolejny element istnieje, wreszcie remove() usuwa dany element). Ponadto, iterator interfejsu List umożliwia cofanie się (analogiczne previous() oraz hasPrevious() ). Podstawową korzyścią przy korzystaniu z iteratora jest to, iż do wykonywania podstawowych zadań nie musimy znać metod obsługiwanych przez dany interfejs czy implementację kolekcji.

10 Implementacja (iii jako ekstensja innej kl.) Skrócony przykład implementacji: class Pracownik { String imie; String nazwisko; int pensja; int id_pracownika; public Pracownik(String imie, String nazwisko, int pensja, int id_pracownika) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; this.id_pracownika = id_pracownika; } class Pracownicy { static int nastepne_id = 0; static ArrayList listaPracownikow; public static void main(String args[]) { Pracownicy p = new Pracownicy(); p.dodajPracownika("Jan", "Kluska", 1200); p.dodajPracownika("Ben", "Kenobi", 2000); } public Pracownicy() { listaPracownikow = new ArrayList(); } public void dodajPracownika (String imie, String nazwisko, int pensja) { listaPracownikow.add (new Pracownik (imie, nazwisko, pensja)); } Kompletny listing implementacja przy użyciu wystąpienia innej klasy – KLIKNIJ TUTAJ.KLIKNIJ TUTAJ

11 Dodatki (metody obiektowe i klasowe) Metoda obiektowa – operuje na atrybutach obiektu (tego dla którego została wywołana). Skrócony przykład implementacji: class pozycjaNaLisciePlac {... int wynagrodzenie; int premia; int policzWynagrodzenie() { return wynagrodzenie+premia; } Metoda klasowa – operuje na ekstensji klasy (posiada dostęp do wszystkich instancji). Skrócony przykład implementacji: class Pracownik {... String nazwisko int wynagrodzenie; ArrayList listaPracownikow = new ArrayList();... int ileZarabia (String nazwisko) { //...znajdź pracownika wewnątrz ArrayList //...jeśli istnieje to return wynagrodzenie } }

12 Zadanie 1 Problem: Chcemy, aby program wczytał z pliku listę miast (nie wiemy ile ich jest), a następnie wypisał nazwy miast na konsolę w alfabetycznym porządku rosnącym bez powtarzających się nazw miejscowości. Pytanie: Która z omówionych struktur danych będzie najodpowiedniejsza do implementacji programu i dlaczego? Implementacja

13 Zadanie 2 Zaimplementować kolekcję miast z zadania 1 w postaci listy (ArrayList). Zapewnić uporządkowanie nazw miast poprzez zastosowanie gotowego algorytmu sortowania (sort() -statyczna metoda klasy Collections). Elementy kolekcji są obiektami klasy Object. Iterator zwróci wartość ogólnego typu Object. Dokonać konwersji do właściwego typu. Implementacja

14 Zadanie 3 Problem: W pliku miasta.txt znajdują się teraz nazwy miast wraz z kodem pocztowym. Zaimplementować wyszukiwanie kodu pocztowego dla zadanej nazwy miejscowości. Pytanie: Która z omówionych struktur danych będzie najodpowiedniejsza do implementacji programu i dlaczego? Implementacja

15 Dziękujemy za uwagę


Pobierz ppt "2004-03-161 Implementacja ekstensji klasy Małachowska Anna, Karwowski Piotr, gr. 622."

Podobne prezentacje


Reklamy Google