Implementacja ekstensji klasy

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

description

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) - PowerPoint PPT Presentation

Transcript of Implementacja ekstensji klasy

Page 1: Implementacja ekstensji klasy

2004-03-16 1

Implementacja ekstensji klasyMałachowska Anna, Karwowski Piotr, gr. 622

Page 2: Implementacja ekstensji klasy

2004-03-16 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

Page 3: Implementacja ekstensji klasy

2004-03-16 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óboglądających tylko rysunki :)

PRACOWNIKNAZWISKOROK_UKZAROBEKDZIAŁ

:PRACOWNIKNAZWISKO=KluskaROK_UR=1970ZAROBEK=2500DZIAŁ=handlowy

:PRACOWNIKNAZWISKO=WałekROK_UR=1976ZAROBEK=2800DZIAŁ=marketing

instancja klasy

klasa

instancja klasy

zbiór instancji = ekstensja klasy

Page 4: Implementacja ekstensji klasy

2004-03-16 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. }

Page 5: Implementacja ekstensji klasy

2004-03-16 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

Page 6: Implementacja ekstensji klasy

2004-03-16 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:

// klasaclass Pracownik {String imie;String nazwisko;int pensja;

// deklaracja listyArrayList pracownicy = new ArrayList();

// dodawanie do listypublic Pracownik (String imie, String nazwisko, int pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; pracownicy.add(this);}

// pobieranie z listyPracownik n = (Pracownik)pracownicy.get(id);

// usuwanie z listypracownicy.remove(id);

Page 7: Implementacja ekstensji klasy

2004-03-16 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:

// klasaclass Pracownik {String imie;String nazwisko;int pensja;

// deklaracja mapy HashMap pracownicy = new HashMap();

// dodawanie do mapypublic 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);

Page 8: Implementacja ekstensji klasy

2004-03-16 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:

// klasaclass Pracownik {String imie;String nazwisko;int pensja;

// deklaracja zbioru TreeSet pracownicy = new TreeSet();

// dodawanie do zbiorupublic Pracownik (String imie, String nazwisko, int pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; pracownicy.add(this);

}

// usuwanie ze zbiorupracownicy.remove(new Pracownik("Jan", "Kluska"));

Page 9: Implementacja ekstensji klasy

2004-03-16 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.

Page 10: Implementacja ekstensji klasy

2004-03-16 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.

Page 11: Implementacja ekstensji klasy

2004-03-16 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}

}

Page 12: Implementacja ekstensji klasy

2004-03-16 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

Page 13: Implementacja ekstensji klasy

2004-03-16 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

Page 14: Implementacja ekstensji klasy

2004-03-16 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

Page 15: Implementacja ekstensji klasy

2004-03-16 15

Dziękujemy za uwagę