1 / 15

Implementacja ekstensji klasy

Implementacja ekstensji klasy. Małachowska Anna, Karwowski Piotr, gr. 622. Plan prezentacji:. Drobne przypomnienie teorii ;-) Implementacja ekstensji klasy: i) przy użyciu tablicy statycznej ii) przy użyciu kolekcji a) lista (list) b) mapa (map) c) zbiór (set)

ronda
Download Presentation

Implementacja ekstensji klasy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Plan prezentacji: Drobne przypomnienie teorii ;-) 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 Dodatki :) a) implementacja metod obiektowych i klasowych Zadania do rozwiązania

  3. 1 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Ł :PRACOWNIKNAZWISKO=Kluska ROK_UR=1970 ZAROBEK=2500 DZIAŁ=handlowy :PRACOWNIKNAZWISKO=Wałek ROK_UR=1976 ZAROBEK=2800 DZIAŁ=marketing klasa instancja klasy instancja klasy zbiór instancji = ekstensja klasy

  4. 2 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. 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<max) { pracownicy[index] = this; // wstaw do tablicy index++; } } // przykład realizacji usuwania public static void usunPracownika (int id_pracownika){ // znajdź pracownika po id (pętla for) // zastąp pracownika ostatnim pracownikiem w tabeli // lub wartością NULL jeśli tylko 1 prac. w tab. }

  5. 2 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: http://java.sun.com/docs/books/tutorial/collections/index.html

  6. 2 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. 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. 2 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. 2 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. 2 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. 2 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.

  11. 3 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 nazwiskoint wynagrodzenie;ArrayList listaPracownikow = new ArrayList();... int ileZarabia (String nazwisko) { // ...znajdź pracownika wewnątrz ArrayList // ...jeśli istnieje to return wynagrodzenie} }

  12. 4 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. 4 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. 4 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ę

More Related