• Nie Znaleziono Wyników

Implementacja ekstensji klasy

N/A
N/A
Protected

Academic year: 2021

Share "Implementacja ekstensji klasy"

Copied!
15
0
0

Pełen tekst

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

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Ł

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

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 nazwisko int 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ę

Cytaty

Powiązane dokumenty

Żeby sprawdzić, czy słowo jest postaci ww R w można policzyć jego długość (musi to być liczba postaci 3k) a następnie użyć 3 liczników zmieniających się odpowiednio od 1 do

W podobny sposób jak uzyskaliśmy pochodne drugiego i trzeciego rzędu poprzez dwu- i trzykrotne różniczkowanie funkcji, możemy zdefiniować 1 pochodną dowolnego rzędu 2 naturalnego

Domyślny inicjalizujący pola klasy dowolnymi wartościami, a także drugi inicjalizowany czterema parametrami: imie, nazwisko, stanowisko, stazPracy. Klasa

Dla wszystkich obiektów klasy Ksiazka powinna zostać wywołana metoda PrzedstawSie(), natomiast dla obiektów klasy Film na ekran powinno zostać wypisane nazwisko reżysera oraz

Metoda klasowa: Mają dostęp do całej ekstensji, a zatem do wszystkich obiektów należących do danej klasy. Mogą na nich operować, ale nie muszą: może

• Pojęcie wystąpienie klasy (instancja klasy) oznacza obiekt, który jest “podłączony” do danej klasy, jest jej członkiem.. • Wystąpienia mogą być: bezpośrednie i

Metoda jest implementacją operacji w jednej z klas, może być wiele metod.. implementujących daną

(a) Jeżeli obiekt jest określony przez nazwę, stosujemy operator w postaci kropki, wpisywanej pomiędzy na- zwą obiektu a nazwą składowej, na przykład wywo- łanie