Autorzy: Łukasz Dobrzyński Artur Szaturski

17
klasy w oparciu o klasy w oparciu o tablicę statyczną i tablicę statyczną i kolekcję na przykładzie kolekcję na przykładzie metod klasowych, metod metod klasowych, metod objektu i polimorfizm objektu i polimorfizm metod metod Autorzy: Autorzy: Łukasz Dobrzyński Łukasz Dobrzyński Artur Szaturski Artur Szaturski

description

Realizacja ekstensji klasy w oparciu o tablicę statyczną i kolekcję na przykładzie metod klasowych, metod objektu i polimorfizm metod. Autorzy: Łukasz Dobrzyński Artur Szaturski. Ekstensja klasy. - PowerPoint PPT Presentation

Transcript of Autorzy: Łukasz Dobrzyński Artur Szaturski

Page 1: Autorzy: Łukasz Dobrzyński Artur Szaturski

Realizacja ekstensji klasy w Realizacja ekstensji klasy w oparciu o tablicę statyczną i oparciu o tablicę statyczną i

kolekcję na przykładzie kolekcję na przykładzie metod klasowych, metod metod klasowych, metod

objektu i polimorfizm metodobjektu i polimorfizm metod

Autorzy:Autorzy:

Łukasz DobrzyńskiŁukasz Dobrzyński

Artur SzaturskiArtur Szaturski

Page 2: Autorzy: Łukasz Dobrzyński Artur Szaturski

Ekstensja klasyEkstensja klasy

Ekstensja(class extent) = aktualny (zmienny w czasie) Ekstensja(class extent) = aktualny (zmienny w czasie) zestaw wszystkich wystąpień tej klasy. Ekstensja zestaw wszystkich wystąpień tej klasy. Ekstensja klasy w implementacji oznacza specjalną strukturę klasy w implementacji oznacza specjalną strukturę danych, konkretny byt programistyczny dołączony danych, konkretny byt programistyczny dołączony do klasy. Ta struktura stanowi skład obiektów, do klasy. Ta struktura stanowi skład obiektów, przechowując wszystkie obiekty będące członkami przechowując wszystkie obiekty będące członkami danej klasy.danej klasy.

Klasa może mieć nie jedną lecz wiele ekstansji.Klasa może mieć nie jedną lecz wiele ekstansji.

Page 3: Autorzy: Łukasz Dobrzyński Artur Szaturski

Ekstensja klasy; przykładEkstensja klasy; przykład

OSOBANAZWISKO=NowackiROK_UR=1940

OSOBANAZWISKO=AbackiROK_UR=1948

OSOBANAZWISKO=NowakROK_UR=1951

NAZWISKOROK_URWiek()

PRACOWNIKZAROBEKDZIAŁZarobekNetto()ZmieńZarobek(...)

NAZWISKO=KowalskaROK_UR=1975

NAZWISKO=AbackiROK_UR=1948ZAROBEK=2500DZIAŁ=zabawki

NAZWISKO=NowackiROK_UR=1940ZAROBEK=3000DZIAŁ=sprzedaż

Ekstensja klasyOSOBA

Ekstensja klasyPRACOWNIK

OSOBA

:OSOBA

:PRACOWNIK :PRACOWNIKNAZWISKO=NowakROK_UR=1951ZAROBEK=2000DZIAŁ=zabawki

:PRACOWNIK

Page 4: Autorzy: Łukasz Dobrzyński Artur Szaturski

Ekstansja klasy w oparciu o tablice dynamicznepublic class TablicaDynamiczna {public class TablicaDynamiczna {

public static void main(String[] args) {public static void main(String[] args) {Ludzie ludzie1 = new Ludzie("Piotr", "Staroszczyk", 15);Ludzie ludzie1 = new Ludzie("Piotr", "Staroszczyk", 15);Ludzie ludzie2 = new Ludzie("Marcin", "Gajos", 22);Ludzie ludzie2 = new Ludzie("Marcin", "Gajos", 22);Ludzie ludzie3 = new Ludzie("Sedzia", "Dred", 33);Ludzie ludzie3 = new Ludzie("Sedzia", "Dred", 33);Ludzie ludzie4 = new Ludzie("Che", "Pper", 20);Ludzie ludzie4 = new Ludzie("Che", "Pper", 20);Ludzie ludzie5 = new Ludzie("Endriu", "Leppa", 10);Ludzie ludzie5 = new Ludzie("Endriu", "Leppa", 10);Ludzie ludzie6 = new Ludzie("Jan", "Nowak", 50);Ludzie ludzie6 = new Ludzie("Jan", "Nowak", 50);Ludzie.liczbaLudzi();Ludzie.liczbaLudzi(); ludzie3.podajWiek(); ludzie3.podajWiek(); Ludzie.podajNajstarszaOsobe(); Ludzie.podajNajstarszaOsobe();

}}}}class Osoba {class Osoba {

String imie, nazwisko;String imie, nazwisko;int wiek;int wiek;Osoba (String imie, String nazwisko, int wiek) {Osoba (String imie, String nazwisko, int wiek) {

this.imie = imie;this.imie = imie;this.nazwisko = nazwisko;this.nazwisko = nazwisko;this.wiek = wiek;this.wiek = wiek;

}}public String toString() {public String toString() {

return "imie: " + this.imie + ", nazwisko: " + this.nazwisko + ", wiek: " + this.wiek;return "imie: " + this.imie + ", nazwisko: " + this.nazwisko + ", wiek: " + this.wiek;}}

}}

Page 5: Autorzy: Łukasz Dobrzyński Artur Szaturski

class Ludzie {class Ludzie {static Ludzie ekstensja[] = new Ludzie[0];static Ludzie ekstensja[] = new Ludzie[0];static int liczbaObiektow;static int liczbaObiektow;Osoba osoba;Osoba osoba;Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) {Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) {

this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek);this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek);liczbaObiektow++;liczbaObiektow++;Ludzie newEkstensja[] = new Ludzie[liczbaObiektow];Ludzie newEkstensja[] = new Ludzie[liczbaObiektow];for (int i=0; i<ekstensja.length; i++) {for (int i=0; i<ekstensja.length; i++) {

newEkstensja[i] = ekstensja[i];newEkstensja[i] = ekstensja[i];}}newEkstensja[liczbaObiektow-1] = this;newEkstensja[liczbaObiektow-1] = this;ekstensja = newEkstensja;ekstensja = newEkstensja;newEkstensja = null;newEkstensja = null;System.out.println("nowy obiekt zostal dodany do tablicy {" + this.osoba + "}");System.out.println("nowy obiekt zostal dodany do tablicy {" + this.osoba + "}");System.out.println("Liczba obiektow: " + liczbaObiektow);System.out.println("Liczba obiektow: " + liczbaObiektow);

}}static void liczbaLudzi() {static void liczbaLudzi() {

System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby");System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby");}}void podajWiek() {void podajWiek() {

System.out.println("Wiek osoby = " + this.osoba.wiek + " lata");System.out.println("Wiek osoby = " + this.osoba.wiek + " lata");}}static void podajNajstarszaOsobe() {static void podajNajstarszaOsobe() {

int wiek = 0;int wiek = 0;System.out.println(ekstensja.length);System.out.println(ekstensja.length);for (int i=0; i<ekstensja.length; i++) {for (int i=0; i<ekstensja.length; i++) {

//System.out.print(i + " ");//System.out.print(i + " ");if (ekstensja[i].osoba.wiek > wiek) { if (ekstensja[i].osoba.wiek > wiek) {

wiek = ekstensja[i].osoba.wiek; wiek = ekstensja[i].osoba.wiek; }}

}}System.out.println("Najstarszy pipol ma " + wiek + " lat");System.out.println("Najstarszy pipol ma " + wiek + " lat");

}}}}

Page 6: Autorzy: Łukasz Dobrzyński Artur Szaturski

Ekstansja klasy w oparciu o tablice statyczne

• Tablica jest najbardziej wydajnym sposobem zapisu i swobodnego dostępu do ciągu przechowywanych obiektów. Ale posiada także duże wady:

• Gdy tworzymy tablicę musimy znać jej rozmiar, którego później nie można zmieniać!

• Obiekt jednej tablicy może przechowywać obiekty tylko jednego, określonego typu.

• Trzeba także pamiętać, że wszystkie metody działające na tej ekstensji muszą być statyczne.

Page 7: Autorzy: Łukasz Dobrzyński Artur Szaturski

KodKod

– public class TablicaStatyczna {public class TablicaStatyczna {– public static void main(String[] args) {public static void main(String[] args) {– Ludzie ludzie1 = new Ludzie("Piotr", "Staroszczyk", 15);Ludzie ludzie1 = new Ludzie("Piotr", "Staroszczyk", 15);– Ludzie ludzie2 = new Ludzie("Marcin", "Gajos", 22);Ludzie ludzie2 = new Ludzie("Marcin", "Gajos", 22);– Ludzie ludzie3 = new Ludzie("Sedzia", "Dred", 33);Ludzie ludzie3 = new Ludzie("Sedzia", "Dred", 33);– Ludzie.liczbaLudzi();Ludzie.liczbaLudzi(); – ludzie3.podajWiek(); ludzie3.podajWiek(); – Ludzie.podajNajstarszaOsobe(); Ludzie.podajNajstarszaOsobe(); – }}– }}– class Osoba {class Osoba {– String imie, nazwisko;String imie, nazwisko;– int wiek;int wiek;– Osoba () {Osoba () {– }}– Osoba (String imie, String nazwisko, int wiek) {Osoba (String imie, String nazwisko, int wiek) {– this.imie = imie;this.imie = imie;– this.nazwisko = nazwisko;this.nazwisko = nazwisko;– this.wiek = wiek;this.wiek = wiek;– }}– }}

Page 8: Autorzy: Łukasz Dobrzyński Artur Szaturski

– class Ludzie {class Ludzie {– static Ludzie ekstensja[] = new Ludzie[100];static Ludzie ekstensja[] = new Ludzie[100];– static int liczbaObiektow;static int liczbaObiektow;– Osoba osoba;Osoba osoba;– Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) {Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) {– this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek);this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek);– ekstensja[liczbaObiektow] = this;ekstensja[liczbaObiektow] = this;– liczbaObiektow++;liczbaObiektow++;– System.out.println("nowy obiekt zostal dodany do tablicy");System.out.println("nowy obiekt zostal dodany do tablicy");

– }}– static void liczbaLudzi() {static void liczbaLudzi() {– System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby");System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby");– }}– void podajWiek() {void podajWiek() {– System.out.println("Wiek osoby = " + this.osoba.wiek + " lata");System.out.println("Wiek osoby = " + this.osoba.wiek + " lata");– }}– static void podajNajstarszaOsobe() {static void podajNajstarszaOsobe() {– int wiek = 0;int wiek = 0;– for (int i=0; i<liczbaObiektow; i++) {for (int i=0; i<liczbaObiektow; i++) {– if (ekstensja[i].osoba.wiek > wiek) { if (ekstensja[i].osoba.wiek > wiek) { – wiek = ekstensja[i].osoba.wiek; wiek = ekstensja[i].osoba.wiek; – }}– }}– System.out.println("Najstarszy pipol ma " + wiek + " lat");System.out.println("Najstarszy pipol ma " + wiek + " lat");– }}– }}

Page 9: Autorzy: Łukasz Dobrzyński Artur Szaturski

Ekstansja klasy w oparciu o kolekcje

• Kolekcja jest strukturą danych służącą do przechowywania danych i wykonywania na nich operacji. W odróżnieniu od tablicy, struktura to Klasa, która posiada zdefiniowane metody umożliwiające takie operacje jak dodawanie, usuwanie i przeglądnie (iteracja) elementów, które się w niej znajdują.

• Przykładowe kolekcje w Javie to: Vector, Stack, HashSet, HashTable, TreeSet, ArrayList, LinkedList, HashMap, TreeMap.

Page 10: Autorzy: Łukasz Dobrzyński Artur Szaturski

KodKodclass Osoba {class Osoba { String imie, nazwisko;String imie, nazwisko; int wiek;int wiek; Osoba (String imie, String nazwisko, int wiek) {Osoba (String imie, String nazwisko, int wiek) { this.imie = imie;this.imie = imie; this.nazwisko = nazwisko;this.nazwisko = nazwisko; this.wiek = wiek;this.wiek = wiek; }} public String toString() {public String toString() { return "imie: " + this.imie + ", nazwisko: " + this.nazwisko + ", wiek: " + this.wiek;return "imie: " + this.imie + ", nazwisko: " + this.nazwisko + ", wiek: " + this.wiek; }}}}class Ludzie {class Ludzie { static Vector ekstensja = new Vector();static Vector ekstensja = new Vector(); static int liczbaObiektow;static int liczbaObiektow; Osoba osoba;Osoba osoba; Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) {Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) { this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek);this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek); ekstensja.add(this);ekstensja.add(this); liczbaObiektow++; liczbaObiektow++; System.out.println("nowy obiekt zostal dodany do kolekcji {" + this.osoba + "}");System.out.println("nowy obiekt zostal dodany do kolekcji {" + this.osoba + "}"); System.out.println("Liczba obiektow: " + liczbaObiektow);System.out.println("Liczba obiektow: " + liczbaObiektow); }} static void liczbaLudzi() {static void liczbaLudzi() { System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby");System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby"); }} void podajWiek() {void podajWiek() { System.out.println("Wiek osoby = " + this.osoba.wiek + " lata"); System.out.println("Wiek osoby = " + this.osoba.wiek + " lata"); } }

Page 11: Autorzy: Łukasz Dobrzyński Artur Szaturski

static void podajNajstarszaOsobe() {static void podajNajstarszaOsobe() {

int wiek = 0;int wiek = 0;

int wiek2 = 0;int wiek2 = 0;

Iterator i = ekstensja.iterator();Iterator i = ekstensja.iterator();

while (i.hasNext()) {while (i.hasNext()) {

wiek2 = ((Ludzie)i.next()).osoba.wiek;wiek2 = ((Ludzie)i.next()).osoba.wiek;

if (wiek2 > wiek) { if (wiek2 > wiek) {

wiek = wiek2; wiek = wiek2;

}}

}}

System.out.println("Najstarszy pipol ma " + wiek + " lat");System.out.println("Najstarszy pipol ma " + wiek + " lat");

}}

}}

Page 12: Autorzy: Łukasz Dobrzyński Artur Szaturski

Rodzaje metodRodzaje metod

Metody mogą być:Metody mogą być:

- - abstrakcyjneabstrakcyjne

- - obiektu:obiektu: policz wiek, czy pracował w (nazwa policz wiek, czy pracował w (nazwa firmy)firmy)

- - klasowe:klasowe: policz wiek (imię, nazwisko), znajdź policz wiek (imię, nazwisko), znajdź najstarszegonajstarszego

Page 13: Autorzy: Łukasz Dobrzyński Artur Szaturski

Metoda objektuMetoda objektu - operuje na - operuje na atrybutach atrybutach jednego obiektu jednego obiektu – tego dla – tego dla którego została którego została wywołana. wywołana.

Obiekt jest argumentem Obiekt jest argumentem domyślnym metodydomyślnym metody

Metoda klasowaMetoda klasowa - - operuje na ekstensji operuje na ekstensji klasy, czyli posiada klasy, czyli posiada

dostęp do dostęp do atrybutów atrybutów wszystkich obiektów wszystkich obiektów członków członków danej klasy.danej klasy.

Page 14: Autorzy: Łukasz Dobrzyński Artur Szaturski

Polimorfizm metodPolimorfizm metod

Polega na tym, że operacja wywołana Polega na tym, że operacja wywołana za pośrednictwem komunikatu może za pośrednictwem komunikatu może być różnie wykonana, w zależności być różnie wykonana, w zależności od rodzaju obiektu, do którego ten od rodzaju obiektu, do którego ten komunikat został wysłany; innymi komunikat został wysłany; innymi słowy – może istnieć wiele metod słowy – może istnieć wiele metod implementujących daną operację. implementujących daną operację.

Page 15: Autorzy: Łukasz Dobrzyński Artur Szaturski

KodKod

Page 16: Autorzy: Łukasz Dobrzyński Artur Szaturski

Obsługa ekstensji klasy Obsługa ekstensji klasy używając klasy pomocniczejużywając klasy pomocniczej

Polega na tym, że tworzeniem Polega na tym, że tworzeniem obiektów i zarządzaniem nimi obiektów i zarządzaniem nimi zajmuje się klasa pomocnicza - zajmuje się klasa pomocnicza - kontener.kontener.

Klasa pomocnicza posiada metody, Klasa pomocnicza posiada metody, które pozwalają na dodawanie i które pozwalają na dodawanie i usuwanie obiektów innej klasy. usuwanie obiektów innej klasy.

Page 17: Autorzy: Łukasz Dobrzyński Artur Szaturski

Wady i zalety obsługi ekstensji Wady i zalety obsługi ekstensji klasy za pomocą klasy klasy za pomocą klasy

pomocniczejpomocniczejWielką zaletą takiego sposobu obsługi Wielką zaletą takiego sposobu obsługi

ekstensji jest to, że programista posiada ekstensji jest to, że programista posiada kontrole nad tworzeniem i usuwaniem kontrole nad tworzeniem i usuwaniem obiektów. Ponadto takie klasy mają dużą obiektów. Ponadto takie klasy mają dużą funkcjonalność, w przykładzie jest tylko funkcjonalność, w przykładzie jest tylko kilka podstawowych funkcji takich jak kilka podstawowych funkcji takich jak zliczanie elementów ekstensji,ale można zliczanie elementów ekstensji,ale można rozszerzyć o bardziej skomplikowane i rozszerzyć o bardziej skomplikowane i równie pożyteczne metody (np.sortowanie)równie pożyteczne metody (np.sortowanie)