Implementacja ekstensji klasy

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Programowanie obiektowe
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Standardowa biblioteka języka C++
Programowanie obiektowe
Wzorce.
Agregacja Agregacja jest rodzajem asocjacji; zadaniem agregacji jest modelowanie związku całość-część. agregacja jest asocjacją: dla obu jej końców są.
Static, const, volatile.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Sposoby implementacji asocjacji
Kamil Łącki Dominik Strzelichowski
Implementacja asocjacji
Programowanie Obiektowe w Javie (c.d.)
Programowanie obiektowe w Javie
ODE Zapytania. Pętla for (1) Do obiektów będących instancjami klas możemy uzyskać dostęp za pomocą pętli for Zakres tej pętli to wszystkie obiekty klasy.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
Marcin Kujawa Michał Łobarzewski
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Języki programowania obiektowego
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Hibernate relacje.
Techniki i języki programowania
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Tworzenie aplikacji mobilnych
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe 2013/2014
Kurs języka C++ – wykład 3 ( )
OCPJP Inner classes.
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Paweł Starzyk Obiektowe metody projektowania systemów
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Wykład 5 Klasa Vec i jej operatory 1.Kategorie operatorów 2.Operatory ogólne - przykłady 3.Operatory specjalne [ ], ( ) oraz –> 4.Operatory new i delete.
Kolekcje (3) Zbiory. Porównywanie i porządkowanie elementów kolekcji. (c) Krzysztof Barteczko 2014.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 1/20 Wykład 4 Model obiektowy (2) dr inż. Ewa Stemposz
Asocjacja,Kompozycja,Agregacja
Implementacja asocjacji (z atrybutami i bez) przy użyciu: referencji (kolekcji referencji) tablic asocjacyjnych przygotował: Kamil Kowalczyk.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Programowanie Obiektowe – Wykład 6
Przypomnienie wiadomości – kilka zadań
Typy wyliczeniowe, kolekcje
Kurs języka C++ – wykład 3 ( )
Wątki, programowanie współbieżne
(według:
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
Dane, zmienne, instrukcje
PGO - Projektowanie i implementacja pierwszych klas
PGO Dziedziczenie Michail Mokkas.
Programowanie w Javie 1 Dr Robert Kowalczyk
Zapis prezentacji:

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

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

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 :) klasa 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 instancja klasy zbiór instancji = ekstensja klasy 2004-03-16

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

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

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

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

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")); 2004-03-16

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

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

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

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

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

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

Dziękujemy za uwagę 2004-03-16