Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Podobne dokumenty
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Lista, Stos, Kolejka, Tablica Asocjacyjna

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Kurs WWW. Paweł Rajba.

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Wątki w Javie. Piotr Tokarski

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Baza danych sql. 1. Wprowadzenie

Wprowadzenie do Doctrine ORM

Wprowadzenie do projektu QualitySpy

Programowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Wdrożenie do projektu

Programowanie obiektowe

Wykład 5: Klasy cz. 3

LABARATORIUM 9 TESTY JEDNOSTKOWE JUNIT 3.8

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Języki i techniki programowania Ćwiczenia 2

Wykład 8: klasy cz. 4

Klasy i obiekty cz II

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie obiektowe i zdarzeniowe

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Dokumentacja do API Javy.

Technologie i usługi internetowe cz. 2

Język Java część 2 (przykładowa aplikacja)

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Czym są właściwości. Poprawne projektowanie klas

Zad. 7: Fabryka obiektów i singleton

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

Programowanie obiektowe

Programowanie obiektowe

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i realizacja serwisu ogłoszeń z inteligentną wyszukiwarką

Kolekcje w Javie cz. 1

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Programowanie zaawansowane

Wykład 4: Klasy i Metody

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Interfejsy i klasy wewnętrzne

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie obiektowe

Obiektowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Zaawansowane programowanie w C++ (PCP)

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Zaawansowane programowanie obiektowe - wykład 5

Dziedziczenie jednobazowe, poliformizm

Java Język programowania

Podstawy programowania obiektowego

Programowanie Obiektowe (Java)

Serwery Statefull i Stateless

Programowanie obiektowe

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Podstawy Języka Java

Wzorce projektowe. dr inż. Marcin Pietroo

Zaawansowane aplikacje WWW - laboratorium

Podstawy otwartych języków programowania Przechowywanie danych

Rozdział 4 KLASY, OBIEKTY, METODY

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

UML a kod. C++, Java i C#

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Programowanie obiektowe

Stworzenie programu KSIĄŻKA ADRESOWA posiadającego funkcjonalności przechowywania danych o osobach dodanych przez użytkownika.

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Podstawy obiektowości

Zadania z podstaw programowania obiektowego

Java Collections Framework

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Dziedziczenie. dr Jarosław Skaruz

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

TEMAT : KLASY DZIEDZICZENIE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Wypożyczalnia VIDEO. Technologie obiektowe

Klasy abstrakcyjne i interfejsy

Aplikacje w środowisku Java

Programowanie obiektowe

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Programowanie zespołowe

Szablony klas, zastosowanie szablonów w programach

java.util.* :Kolekcje Tomasz Borzyszkowski

Aplikacje w Javie- wykład 11 Wątki-podstawy

Podstawy programowania obiektowego

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

PHP: bazy danych, SQL, AJAX i JSON

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Transkrypt:

Zadanie: Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Na kolejnych zajęciach projekt będzie rozwijana i uzupełniana o kolejne elementy omawiane na wykładzie. Na obecnych zajęciach poznasz: 1) Podstawy programowania obiektowego 2) Wzorzec fabryki oraz cel jego stosowania 3) Zagadnienia określania odpowiedniego operatora widoczności/zasięgu 4) Manipulacje ze strukturami danych oraz dobór struktury do problemu Zadanie 1) Stwórz pakiet baza.element pakiet będzie zawierał obiekty składowe przechowywane w bazie w pakiecie baza.element stwórz klasę osoba. Klasa powinna mieć pola do przechowywania imienia, nazwiska oraz daty urodzenia (wykorzystaj klasę LocalDate). Do każdego z pól powinien być dostęp za pomocą odpowiednich getterów i setterów. Klasa powinna mieć polę idosoby tj. numer identyfikujący osobę, do którego powinien być dostępny jedynie getter!!! Klasa powinna przesłaniać metodę tostring, tak aby wyświetlały się informacje o użytkowniku. Zwróć uwagę na wartości null. Klasa powinna posiadać dwa konstruktory. Konstruktory powinny być dostępne jedynie z poziomu tego samego pakietu. Konstruktory powinny przyjmować id uwaga pole id powinno być niezmienne!!! Oraz drugi konstruktor powinien inicjalizować obiekt imieniem i nazwiskiem oraz odpowiednim id osoby Zadanie 2) Wygeneruj lub stwórz interfejs IOsoba na podstawie klasy Osoba (możesz wykorzystać w tym celu polecenie Refactor -> Extract Interface

Zadanie 3) Stwórz test jednostkowy z wykorzystaniem polecenia Tools -> Create/Update Tests Przetestuj program na ewentualność występowania wartości null w imieniu i nazwisku i dacie w szczególności dla metody tostring, oraz dla getterów i setterów Zadanie 4) Stwórz fabrykę osób. Fabryka to klasa zawierająca metody służące do generacji obiektów danej klasy. Dzięki temu użytkownik w programie nie stosuje słowa new jak i nie wywołuje jawnie konstruktora obiektu. Dzięki temu programista twórca biblioteki ma możliwość podmiany tworzonej przez fabrykę klasy, czyli może łatwo dokonać jej reimplementacji/podmiany w zależności od potrzeb/sytuacji/w miarę rozwoju projektu. Pamiętaj że fabryka powinna każdorazowo nadawać unikatowe ID dla każdego nowego użytkownika. Fabrykę można utworzyć poprzez metody statyczne ale również w postaci zwykłych metod związanych z obiektem (nie z klasą). Zastanów się nad wadami i zaletami poszczególnych rozwiązań. PYTANIE: W jakim pakiecie należy umieścić fabrykę osób? Fabryka powinna generować obiekty klasy IOsoba. Powinna ona udostępniać dwie metody getosoba oraz getosoba(imie,nazwisko). Zadanie 5) Stwórz pakiety baza pakiet ten będzie zawierał elementy związane z bazą osób Stwórz klasę BazaOsob - Klasa BazaOsob powinna oferować funkcjonalność: 1) Dodawanie nowej osoby do bazy metoda addosoba(osoba) 2) Odczytywanie osoby po id metoda getosoba(id) 3) Odczytywanie osoby po nazwisku metoda getosoba(nazwisko) 4) Zmianę danych osoby w bazie metoda changeosoba(osoba) 5) Metodę reset()- służącą do resetu bazy usuwającą wszystkie osoby z bazy i zerującą jej zawartość 6) Metodę remove(id) służącą do usunięcia z bazy osoby o określonym id 7) Matodę zwracającą liczbę osób w bazie size() 8) Iterator po osobach z bazy Uwaga dot. iteratorów pozwalają one w łatwy sposób trawersować strukturę danych zawierającą określone elementy. Iterator w Javie powinien implementować interfejs Iterator<T> oferując następujące metody: 1) boolean hasnext() zwraca informację czy istnieją nowe elementy na liście

2) T next() zwracająca referencję kolejnego elementu T przechowywanego na liście 3) void remove() metoda pozwalająca usunąć obecnie analizowany obiekt T Do implementacji iteratora albo stwórz nową klasę albo skorzystaj z klas anonimowych UWAGA DO BAZA OSÓB: Zastanów się jak efektywnie zaimplementować wyszukiwanie osób po id i po nazwisku. W tym celu zrób test. Ze strony prowadzącego pobierz klasę StringGenerator oraz TestWydajności. Pierwsza klasa służy do generacji losowych napisów, druga służącą do testowania. W klasie TestWydajności zaimplementuj brakujące metody i sprawdź ile czasu zajmuje bezpośrednio wyszukiwanie napisu w liście a ile z wykorzystaniem odpowiednich struktur danych. Jaka to struktura? Zadanie 6) Stwórz test jednostkowy weryfikujący poprawność bazy sprawdź czy poprawnie działają poszczególne metody Zadanie 7) Dodaj możliwość zapisu i odczytu bazy (utrwalenia bazy). Zastanów się jak to efektywnie zaimplementować. Czy lepiej zrobić obiekt służący do zapisu bazy, czy może metodę statyczną. Docelowo należy wziąć pod uwagę kilka faktów tj: a) Możliwość wystąpienia różnych form zapisu plik CSV, XML, Baza Danych,. b) Całość powinna być jak najbardziej ogólna zastanów się nad API UWAGA: bazę zapisz w postaci prostego pliku CSV, w którym nagłówki odpowiadają poszczególnym polom w obiekcie. Zadanie 8) Przerób klasę BazaOsób, na postać umożliwiającą przechowywanie w niej dowolnego typu obiekty stwórz klasę generyczną. Zastanów się jak to zrobić tak aby całość poprawnie działała. Zadanie 9) Stwórz nową implementację pozwalającą na utrwalenie bazy w postaci pliku XML. Zastanów się nad API. Zadanie 10) Zrób zadanie dot. wielowątkowości Zadanie 11)

Zrób zadanie dot. RMI Zadanie 10) Wykorzystaj obiekt BazaOsób do stworzenia komunikatora dodatkowo wykorzystując RMI i wielowątkowość w tym celu: a) Stwórz nową klasę pochodną do Osoba np. OsobaKomunikator, która dodatkowo będzie posiadała dwie metody: jedną pozwalającą na dodanie wiadomości dla tej osoby, a drugą na odczytanie wiadomości wysłanej dla danej osoby. Uwagi: - Możesz się tutaj wspomóc np. kolejką i w tym celu wykorzystać np. LinkedList, tak iż nowa wiadomość będzie dodawana na koniec kolejki a pierwsza wiadomość z kolejki będzie odsyłana - Pamiętaj aby obsługa kolejki była synchroniczna tj. aby można było dodawać do kolejki i odczytywać z kolejki w wielu wątkach - Odczytywanie z kolejki powinno być blokujące tj. jeśli wątek odczytujący nie ma nic do przeczytania to powinien przejść w stan uśpienia na tak długo aż w kolejce pojawi się wiadomość - Dodawanie do kolejki powinno iść automatycznie bez oczekiwania (ale całość kolejki musi być sychroniczna) b) Dokonaj adaptacji fabyrki osób, tak aby fabryka obecnie zamiast obiektów klasy Osoba zwracała OsobaKomunikator (zwróć uwagę jak to łatwo zrobić w programie który korzysta z fabryk) Uwaga: - Fabryka też będzie wykorzystywana przez wiele wątków, więc zastanów się czy nie będzie problemów w systemie wielowątkowym, jeśli tak, to jakie i jak się zabezpieczyć c) Stwórz interfejs RMI do obsługi bazy Następnie dokonaj jego implementacji UWAGI - Pamiętaj, że RMI dla scenariusza wielowątkowego wymaga odpowiedniej synchronizacji. Bez odpowiedniej adaptacji klasy BazaOsob RMI nie będzie działał: podaj kiedy to może nastąpić d) Dokonaj implementacji klienta RMI

UWAGI: - pamiętaj, że polecenie getmessage() jest blokujące, co więc trzeba zrobić aby klient mógł działać jak komunikator. e) Popraw i zaadaptuj komunikator wg. własnych potrzeb: np. dodaj uwierzytelnianie w pierwszej kolejności a potem pozwól pisać jedynie uwierzytelnionym użytkownikom.. Zaimplementuj operacje JOIN dla klas BazaOsób jak to efektywnie zaimplementować? W tym celu stwórz klasę Tools zawierającą metodę statyczną JOIN przyjmującą jako argument dwa obiekty BazaOsob i zwracającą połączoną bazę. W tym celu wczytaj podane przez prowadzącego dwie bazy i stwórz jedną, zawierającą jedynie elementy unikatowe.