1 / 17

Autorzy: Łukasz Dobrzyński Artur Szaturski

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.

stan
Télécharger la présentation

Autorzy: Łukasz Dobrzyński Artur Szaturski

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

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

  3. Ekstensja klasy; przykład NAZWISKO ROK_UR Wiek() PRACOWNIK ZAROBEK DZIAŁ ZarobekNetto() ZmieńZarobek(...) NAZWISKO=Nowak ROK_UR=1951 ZAROBEK=2000 DZIAŁ=zabawki :PRACOWNIK OSOBA Ekstensja klasy OSOBA :OSOBA NAZWISKO=Kowalska ROK_UR=1975 OSOBA NAZWISKO=Nowak ROK_UR=1951 OSOBA NAZWISKO=Abacki ROK_UR=1948 OSOBA NAZWISKO=Nowacki ROK_UR=1940 Ekstensja klasy PRACOWNIK :PRACOWNIK NAZWISKO=Abacki ROK_UR=1948 ZAROBEK=2500 DZIAŁ=zabawki :PRACOWNIK NAZWISKO=Nowacki ROK_UR=1940 ZAROBEK=3000 DZIAŁ=sprzedaż

  4. Ekstansja klasy w oparciu o tablice dynamiczne public class TablicaDynamiczna { public static void main(String[] args) { Ludzie ludzie1 = new Ludzie("Piotr", "Staroszczyk", 15); Ludzie ludzie2 = new Ludzie("Marcin", "Gajos", 22); Ludzie ludzie3 = new Ludzie("Sedzia", "Dred", 33); Ludzie ludzie4 = new Ludzie("Che", "Pper", 20); Ludzie ludzie5 = new Ludzie("Endriu", "Leppa", 10); Ludzie ludzie6 = new Ludzie("Jan", "Nowak", 50); Ludzie.liczbaLudzi(); ludzie3.podajWiek(); Ludzie.podajNajstarszaOsobe(); } } class Osoba { String imie, nazwisko; int wiek; Osoba (String imie, String nazwisko, int wiek) { this.imie = imie; this.nazwisko = nazwisko; this.wiek = wiek; } public String toString() { return "imie: " + this.imie + ", nazwisko: " + this.nazwisko + ", wiek: " + this.wiek; } }

  5. class Ludzie { static Ludzie ekstensja[] = new Ludzie[0]; static int liczbaObiektow; Osoba osoba; Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) { this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek); liczbaObiektow++; Ludzie newEkstensja[] = new Ludzie[liczbaObiektow]; for (int i=0; i<ekstensja.length; i++) { newEkstensja[i] = ekstensja[i]; } newEkstensja[liczbaObiektow-1] = this; ekstensja = newEkstensja; newEkstensja = null; System.out.println("nowy obiekt zostal dodany do tablicy {" + this.osoba + "}"); System.out.println("Liczba obiektow: " + liczbaObiektow); } static void liczbaLudzi() { System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby"); } void podajWiek() { System.out.println("Wiek osoby = " + this.osoba.wiek + " lata"); } static void podajNajstarszaOsobe() { int wiek = 0; System.out.println(ekstensja.length); for (int i=0; i<ekstensja.length; i++) { //System.out.print(i + " "); if (ekstensja[i].osoba.wiek > wiek) { wiek = ekstensja[i].osoba.wiek; } } System.out.println("Najstarszy pipol ma " + wiek + " lat"); } }

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

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

  8. class Ludzie { • static Ludzie ekstensja[] = new Ludzie[100]; • static int liczbaObiektow; • Osoba osoba; • Ludzie (String osobaImie, String osobaNazwisko, int osobaWiek) { • this.osoba = new Osoba(osobaImie, osobaNazwisko, osobaWiek); • ekstensja[liczbaObiektow] = this; • liczbaObiektow++; • System.out.println("nowy obiekt zostal dodany do tablicy"); • } • static void liczbaLudzi() { • System.out.println("w systemie znajduje sie " + liczbaObiektow + " osoby"); • } • void podajWiek() { • System.out.println("Wiek osoby = " + this.osoba.wiek + " lata"); • } • static void podajNajstarszaOsobe() { • int wiek = 0; • for (int i=0; i<liczbaObiektow; i++) { • if (ekstensja[i].osoba.wiek > wiek) { • wiek = ekstensja[i].osoba.wiek; • } • } • System.out.println("Najstarszy pipol ma " + wiek + " lat"); • } • }

  9. 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.

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

  11. static void podajNajstarszaOsobe() { int wiek = 0; int wiek2 = 0; Iterator i = ekstensja.iterator(); while (i.hasNext()) { wiek2 = ((Ludzie)i.next()).osoba.wiek; if (wiek2 > wiek) { wiek = wiek2; } } System.out.println("Najstarszy pipol ma " + wiek + " lat"); } }

  12. Rodzaje metod Metody mogą być: - abstrakcyjne - obiektu: policz wiek, czy pracował w (nazwa firmy) - klasowe: policz wiek (imię, nazwisko), znajdź najstarszego

  13. Metoda objektu - operuje na atrybutach jednego obiektu – tego dla którego została wywołana. Obiekt jest argumentem domyślnym metody Metoda klasowa - operuje na ekstensji klasy, czyli posiada dostęp do atrybutów wszystkich obiektów członków danej klasy.

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

  15. Kod

  16. Obsługa ekstensji klasy używając klasy pomocniczej Polega na tym, że tworzeniem obiektów i zarządzaniem nimi zajmuje się klasa pomocnicza - kontener. Klasa pomocnicza posiada metody, które pozwalają na dodawanie i usuwanie obiektów innej klasy.

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

More Related