MAS dr. Inż. Mariusz Trzaska

Podobne dokumenty
MAS dr. Inż. Mariusz Trzaska. Realizacja asocjacji w obiektowych językach

MAS dr. Inż. Mariusz Trzaska. Realizacja różnych modeli dziedziczenia w obiektowych językach programowania

MAS dr. Inż. Mariusz Trzaska

MAS dr. Inż. Mariusz Trzaska. Wykorzystanie klas w obiektowych językach

Mariusz Trzaska Modelowanie i implementacja systemów informatycznych

Modelowanie obiektowe

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

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

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

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

MAS dr. Inż. Mariusz Trzaska

Diagramy klas. dr Jarosław Skaruz

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Programowanie obiektowe

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

MSI dr. Inż. Mariusz Trzaska. obiektowych językach programowania

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Laboratorium 8 Diagramy aktywności

Klasy abstrakcyjne i interfejsy

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Podstawy programowania obiektowego

UML. zastosowanie i projektowanie w języku UML

Aplikacje RMI

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

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Programowanie obiektowe

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

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

Rysunek 1: Przykłady graficznej prezentacji klas.

Podstawy modelowania w języku UML

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Język UML w modelowaniu systemów informatycznych

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

Programowanie obiektowe

Technologie obiektowe

Modelowanie danych, projektowanie systemu informatycznego

MAS dr. Inż. Mariusz Trzaska

Podstawy Programowania Obiektowego

Programowanie obiektowe

Przykład 1 Iteracja 1 tworzenia oprogramowania

Inżynieria oprogramowania. Część 5: UML Diagramy klas

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Modelowanie i implementacja systemów informatycznych

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Lista, Stos, Kolejka, Tablica Asocjacyjna

Podstawy projektowania systemów komputerowych

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

Języki i metody programowania Java. Wykład 2 (część 2)

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Zaawansowane aplikacje WWW - laboratorium

Tworzenie aplikacji w języku Java

INFORMATYKA GEODEZYJNO- KARTOGRAFICZNA. Modelowanie danych. Model związków-encji

Programowanie obiektowe

Programowanie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Polimorfizm, metody wirtualne i klasy abstrakcyjne

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie Obiektowe Ćwiczenie 4

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

Programowanie obiektowe

Dokumentacja do API Javy.

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Aplikacje w środowisku Java

Programowanie obiektowe

Programowanie obiektowe

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

UML w Visual Studio. Michał Ciećwierz

Programowanie obiektowe

Diagramy klas. WYKŁAD Piotr Ciskowski

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

PODSTAWY BAZ DANYCH. 5. Modelowanie danych. 2009/ Notatki do wykładu "Podstawy baz danych"

11.6 Klasa do obsługi liczb wymiernych

Definiowanie własnych klas

Szablony funkcji i szablony klas

Bazy danych i usługi sieciowe

Programowanie obiektowe i zdarzeniowe

Enkapsulacja, dziedziczenie, polimorfizm

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Przypomnienie o klasach i obiektach

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

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

Wykład 8: klasy cz. 4

Transkrypt:

MAS dr. Inż. Mariusz Trzaska Wykład 5 Realizacja asocjacji w obiektowych językach programowania (1)

Zagadnienia o o o o o o o Wstęp teoretyczny Implementacja asocjacji: Przy pomocy identyfikatorów, Korzystając z natywnych referencji. Implementacja asocjacji: ze względu na liczności, binarnych, z atrybutem, kwalifikowanych, n-arnych, Implementacja agregacji, Implementacja kompozycji, Uniwersalne zarządzanie asocjacjami, Podsumowanie Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 2

Powiązania i Asocjacje o Powiązanie.. Zależność łącząca obiekty. o Powiązania binarne. o Asocjacja.. Grupa powiązań o tej samej semantyce i strukturze. o Służą do opisu zależności pomiędzy klasami. o Powiązanie jest wystąpieniem asocjacji (tak jak obiekt jest wystąpieniem klasy). Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 3

Liczności asocjacji o 1 do 0, 1 Pracownik -Imię -Nazwisko pracuje w 0..1 1 Firma -Nazwa o 1 do 1 Pracownik -Imię -Nazwisko pracuje w 1 1 Firma -Nazwa o 1 do * Pracownik -Imię -Nazwisko pracuje w * 1 Firma -Nazwa o * do * Pracownik -Imię -Nazwisko pracuje w * * Firma -Nazwa Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 4

Powiązania i Asocjacje - przykład Pracownik pracuje w Firma * 1 : Pracownik Imię = Jan Nazwisko = Kowalski : Pracownik Imię = Andrzej Nazwisko = Nowak pracuje w pracuje w : Firma Nazwa = IBM : Firma Nazwa = Softmakers Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 5

Asocjacja skierowana o Informacja biznesowa (zależność) jest przechowywana tylko w jednym kierunku. o Zastosowania? o Użyteczność? Pracownik -Imię -Nazwisko pracuje w *? * Firma -Nazwa Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 6

Role asocjacji o Oprócz nazwy asocjacja może posiadać nazwy ról. o Nazewnictwo Nazwa asocjacji: pracuje w, Nazwa roli: pracodawca o Role kiedy opcjonalne, a kiedy wymagane? o Użyteczność z punktu widzenia implementacji. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 7

Asocjacja rekurencyjna o Zachodzi w ramach tej samej klasy Pracownik : Pracownik -Podwładny * -Imię -Nazwisko Szef Imię = Jan Nazwisko = Kowalski Szef 0..1 -Szef Podwładny Podwładny : Pracownik Imię = Janusz Nazwisko = Abacki : Pracownik Imię = Andrzej Nazwisko = Nowak Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 8

Asocjacja z atrybutem o Załóżmy, że mamy przypadek biznesowy opisany poniższym diagramem Pracownik -Imię -Nazwisko o Chcemy zapamiętać: Kiedy pracownik pracował w danej firmie, Ile tam zarabiał. pracuje w * * Firma -Nazwa o Jak i gdzie umieścić takie informacje na diagramie? Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 9

Asocjacja z atrybutem (2) Pracownik -Imię -Nazwisko?! pracuje w * * Data od Data do Pensja Firma -Nazwa?! o Rozwiązanie asocjacja z atrybutem (klasa asocjacji) Pracownik -Imię -Nazwisko pracuje w -Data od -Data do -Pensja * * Firma -Nazwa Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 10

Asocjacja z atrybutem (3) pracuje w -Data od -Data do -Pensja Pracownik -Imię -Nazwisko * * Firma -Nazwa : Pracownik pracuje w -2002.07.12-2004.01.11-2700,00 o Diagram klas oraz diagram obiektów Imię = Jan Nazwisko = Kowalski : Pracownik Imię = Andrzej Nazwisko = Nowak pracuje w -2005.03.20-2006.02.12-3000,00 : Firma Nazwa = IBM -2006.03.12 -null -4500,00 pracuje w : Firma Nazwa = Softmakers Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 11

Asocjacja kwalifikowana o Kwalifikator: atrybut lub zestaw atrybutów jednoznacznie identyfikujący obiekt w ramach asocjacji. o Umożliwia szybkie Pracownik -Imię pracuje w Firma otrzymanie obiektu -Nazwisko -Nazwa -Id z drugiej strony powiązania na podstawie * * Pracownik pracuje w Firma kwalifikatora -Imię Id -Nazwa -Nazwisko 1 * o Indeksowanie (?) Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 12

* Asocjacja n-arna o Asocjacja łącząca n klas. o Problemy koncepcyjne (w tym z szacowaniem liczności) o Zakłada się, że liczności powinny być wiele. Pracownik * wykonuje Od Do Wynagrodzenie * Projekt Zadanie Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 13

Agregacja o Asocjacja opisująca zależność typu część całość: Składa się z, Należy do, Jest członkiem, Itp.. o Posiada wszystkie cechy zwykłej asocjacji. o Ze względu na opisywanie specyficznej zależności warto zrezygnować z nazwy. o Wykorzystanie asocjacji nie narzuca żadnych konsekwencji na związek łączący klasy. Pracownik Grupa * * Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 14

Kompozycja o Kompozycja jest mocniejszą forma agregacji. o Czyli jest również asocjacją, a zatem posiada wszystkie jej cechy. o Inaczej niż w przypadku agregacji, wykorzystanie kompozycji niesie pewne konsekwencje: Część nie może być współdzielona (liczności), Część nie może istnieć bez całości (całość może), Usunięcie całości oznacza usunięcie również wszystkich jej części. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 15

Kompozycja (2) o Agregacja Pracownik Grupa * * o Kompozycja Pracownik Grupa * 1 Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 16

Asocjacje, a języki programowania o Jak się mają podane definicje do popularnych, obiektowych języków programowania? o W językach Java, MS C#, C++ asocjacje nie występują. o Oczywiście można je samodzielnie zaimplementować. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 17

Implementacja asocjacji o Można zastosować dwa podejścia. Zasadnicza różnica polega na sposobie przechowywania informacji o powiązaniu obiektów: Identyfikatory, np. liczbowe, Natywne referencje języka (Java, C#) lub wskaźniki (C++). o Które podejście jest lepsze? Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 18

Wykorzystanie identyfikatorów o o o Do każdej klasy dodajemy atrybut będący identyfikatorem, np. liczbę int. Informacje o powiązanych obiektach przechowujemy pamiętając ich identyfikatory (uwaga na liczności). Konieczność tworzenia Film Film Aktor -Id par identyfikatorów (dla -Tytuł * * asocjacji dwukierunkowych) Aktor -Id -Imię i nazwisko :Film :Film :Aktor :Aktor Id = 1 Id = 2 Id = 3 Id = 4 Tytuł = T1 Tytuł = T3 Imię i Nazwisko = AS Imię i Nazwisko = MB Aktor = [3, 4] Aktor = [3, 5] Film = [1, 2] Film = [1] Id = 5 :Aktor Imię i Nazwisko = KL Film = [2] Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 19

Wykorzystanie identyfikatorów (2) public class Aktor { private int id; public String imienazwisko;// public dla uproszczenia public int[] film; private static ArrayList<Aktor> ekstensja = new ArrayList<Aktor>(); public Aktor(int id, String imienazwisko, int[] filmid) { // Dodaj do ekstensji ekstensja.add(this); this.id = id; this.imienazwisko = imienazwisko; film = filmid; public static Aktor znajdzaktora(int id) throws Exception { for(aktor aktor : ekstensja) { if(aktor.id == id) { return aktor; throw new Exception("Nie znaleziono aktora o id = " + id); Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 20

Wykorzystanie identyfikatorów (3) public class Film { public int id; public String tytul; // public dla uproszczenia public int[] aktor; private static ArrayList<Film> ekstensja = new ArrayList<Film>(); public Film(int id, String tytul, int[] aktorid) { // Dodaj do ekstensji ekstensja.add(this); this.id = id; this.tytul = tytul; aktor = aktorid; public static Film znajdzfilm(int id) throws Exception { for(film film : ekstensja) { if(film.id == id) { return film; throw new Exception("Nie znaleziono filmu o id = " + id); Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 21

Wykorzystanie identyfikatorów (4) Film film1 = new Film(1, "T1", new int[]{3, 4); Film film2 = new Film(2, "T3", new int[]{3, 5); Aktor aktor1 = new Aktor(3, "AS", new int[]{1, 2); Aktor aktor2 = new Aktor(4, "MB", new int[]{1); Aktor aktor3 = new Aktor(5, "KL", new int[]{2); // Wyswietl info o filmie1 System.out.println(film1.tytul); for(int i = 0; i < film1.aktor.length; i++) { System.out.println(" " + Aktor.znajdzAktora(film1.aktor[i]).imieNazwisko); // Wyswietl info o aktor1 System.out.println(aktor1.imieNazwisko); for(int i = 0; i < aktor1.film.length; i++) { System.out.println(" " + Film.znajdzFilm(aktor1.film[i]).tytul); T1 AS MB AS T1 T3 Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 22

Wykorzystanie identyfikatorów (5) o Wady: Konieczność wyszukiwania obiektu na podstawie jego numeru identyfikacyjnego problemy z wydajnością. Wydajność wyszukiwania można zdecydowanie poprawić używając kontenerów mapujących zamiast zwykłych, np.: public class Film { private static Map<Integer, Film> ekstensja = new TreeMap<Integer, Film>(); // [...] public Film(int id, String tytul, int[] aktorid) { // Dodaj do ekstensji ekstensja.put(new Integer(id), this); // [...] public static Film znajdzfilm(int id) throws Exception { return ekstensja.get(new Integer(id)); Mimo wszystko i tak trzeba wyszukiwać Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 23

Wykorzystanie identyfikatorów (6) o Zalety (właściwie jedna (?), ale czasami ważna): Uniezależnienie poszczególnych obiektów od siebie. Dzięki temu, że nie używamy referencji języka Java, maszyna wirtualna nic nie wie o naszych powiązaniach. Jest to bardzo ważne, gdy np. chcemy odczytać jeden obiekt z bazy danych lub przesłać przez sieć: Tworzony jest obiekt języka Java na podstawie zawartości BD, ale nie są tworzone obiekty z nim powiązane, Całość można tak zaprojektować, aby dopiero przy próbie dostępu do obiektu wskazywanego przez id, pobrać go z BD czy lokalizacji sieciowej. Dzięki temu nie musimy rekonstruować od razu całego grafu obiektów, który nie musi być nam potrzebny. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 24

Wykorzystanie natywnych referencji o W celu pokazywania na powiązane obiekty wykorzystujemy natywne referencje języka (Java, C#) lub wskaźniki (C++). o Dzięki temu nie musimy odszukiwać obiektów; o Mając jego referencje (lub wskaźnik) mamy do niego natychmiastowy dostęp (szybciej już się nie da). o Konieczność tworzenia par referencji (jeżeli chcemy nawigować w dwie strony a przeważnie chcemy). Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 25

Wykorzystanie natywnych referencji (2) o W zależności od liczności asocjacji, wykorzystujemy różne konstrukcje: 1 do 1. Pojedyncza referencja z każdej strony. public class Aktor { public String imienazwisko;// public dla uproszczenia public Film film; // impl. asocjacji, licznosc 1 public Aktor(String imienazwisko, Film film) { this.imienazwisko = imienazwisko; this.film = film; public class Film { public String tytul; // public dla uproszczenia public Aktor aktor; // impl. asocjacji, licznosc 1 public Film(String tytul, Aktor aktor) { this.tytul = tytul; this.aktor = aktor; Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 26

Wykorzystanie natywnych referencji (3) o W zależności od liczności asocjacji, wykorzystujemy różne konstrukcje: 1 do *. Pojedyncza referencja oraz kontener. public class Aktor { public String imienazwisko;// public dla uproszczenia public Film film; // impl. asocjacji, licznosc 1 public Aktor(String imienazwisko, Film film) { this.imienazwisko = imienazwisko; this.film = film; public class Film { public String tytul; // public dla uproszczenia public ArrayList<Aktor> aktor; // impl. asocjacji, licznosc * public Film(String tytul, Aktor aktor) { this.tytul = tytul; this.aktor.add(aktor); Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 27

Wykorzystanie natywnych referencji (4) o W zależności od liczności asocjacji, wykorzystujemy różne konstrukcje: * do *. Dwa kontenery. public class Aktor { public String imienazwisko;// public dla uproszczenia public ArrayList<Film> film; // impl. asocjacji, licznosc * public Aktor(String imienazwisko) { this.imienazwisko = imienazwisko; public class Film { public String tytul; // public dla uproszczenia public ArrayList<Aktor> aktor; // impl. asocjacji, licznosc * public Film(String tytul) { this.tytul = tytul; Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 28

Ulepszone zarządzanie powiązaniami o Poprzednie podejście wymagało ręcznego dodawania informacji o powiązaniu zwrotnym. o Warto to jakoś zautomatyzować. o Stworzymy metodę, która doda informacje o powiązaniu: W klasie głównej, W klasie z nią powiązanej. o Całość musi być tak zaprojektowana aby nie dochodziło do zapętlenia. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 29

Ulepszone zarządzanie powiązaniami (2) public class Aktor { public String imienazwisko;// public dla uproszczenia private ArrayList<Film> film = new ArrayList<Film>(); // impl. asocjacji, licznosc * public Aktor(String imienazwisko) { this.imienazwisko = imienazwisko; public void dodajfilm(film nowyfilm) { // Sprawdz czy nie mamy juz informacji o tym filmie if(!film.contains(nowyfilm)) { film.add(nowyfilm); // Dodaj informacje zwrotna nowyfilm.dodajaktor(this); public String tostring() { String info = "Aktor: " + imienazwisko + "\n"; // Dodaj info o tytulach jego filmow for(film f : film) { info += " " + f.tytul + "\n"; return info; Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 30

Ulepszone zarządzanie powiązaniami (3) public class Film { public String tytul; // public dla uproszczenia private ArrayList<Aktor> aktor = new ArrayList<Aktor>(); // impl. asocjacji, licznosc * public Film(String tytul) { this.tytul = tytul; public void dodajaktor(aktor nowyaktor) { // Sprawdz czy nie mamy juz takiej informacji if(!aktor.contains(nowyaktor)) { aktor.add(nowyaktor); // Dodaj informacje zwrotna nowyaktor.dodajfilm(this); public String tostring() { String info = "Film: " + tytul + "\n"; // Dodaj info o tytulach jego filmow for(aktor a : aktor) { info += " " + a.imienazwisko + "\n"; return info; Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 31

Ulepszone zarządzanie powiązaniami (4) o Uwaga na liczność 1 - *: Tam gdzie jest liczność 1 będzie setter,, np. setfilm (zamiast addfilm). W efekcie zanim wstawimy nową wartość, musimy sprawdzić czy aktualna jest różna od null. Jeżeli tak, to trzeba usunąć istniejące powiązanie z obu stron. Następnie możemy utworzyć nowe poprzez przypisanie (liczność 1) ) i dodanie (liczność *). Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 32

Ulepszone zarządzanie powiązaniami (4) // Utworz nowe obiekty (na razie bez informacji o powiazaniach) Film film1 = new Film("T1"); Film film2 = new Film("T3"); Aktor aktor1 = new Aktor("AS"); Aktor aktor2 = new Aktor("MB"); Aktor aktor3 = new Aktor("KL"); // Dodaj informacje o powiazaniach film1.dodajaktor(aktor1); film1.dodajaktor(aktor2); film2.dodajaktor(aktor1); film2.dodajaktor(aktor3); // Wyswietl info o filmach System.out.println(film1); System.out.println(film2); // Wyswietl info o aktorach System.out.println(aktor1); System.out.println(aktor2); System.out.println(aktor3); Film: T1 AS MB Film: T3 AS KL Aktor: AS T1 T3 Aktor: MB T1 Aktor: KL T3 Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 33

Implementacja asocjacji skierowanej -Tytuł Film Aktor * Aktor -Imię i nazwisko o Powyższy diagram oznacza, że dla: konkretnego filmu chcemy znać jego aktorów, Konkretnego aktora nie chcemy znać jego filmów. o Implementacja jest analogiczna do poprzednich przypadków, z tym, że pamiętamy tylko informacje w jednej z klas: W klasie film jest odpowiedni kontener (pokazujący na filmy), W klasie aktor brak kontenera przechowującego info o filmach. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 34

Implementacja asocjacji rekurencyjnej Aktor -Imię i nazwisko dziecko * rodzic 0..2 o Implementacja takiej asocjacji bazuje na poprzednio poznanych zasadach. o W klasie mamy dwa kontenery (zamiast jednego), przechowujące informacje z punktu widzenia każdej z ról. public class Aktor { public String imienazwisko;// public dla uproszczenia private ArrayList<Film> film = new ArrayList<Film>(); // impl. asocjacji, licznosc private ArrayList<Aktor> rodzic = new ArrayList<Aktor>(); private ArrayList<Aktor> dziecko = new ArrayList<Aktor>(); // [...] Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 35

Implementacja asocjacji z atrybutem o Najpierw musimy zamienić: jedną konstrukcję UML (asocjacja z atrybutem) na inną konstrukcję UML (asocjacją z klasą pośredniczącą). -Tytuł Film * * Aktor -Imię i nazwisko -Film -Aktor -Wynagrodzenie Film Film Aktor FilmAktor Film Aktor Aktor -Tytuł -Wynagrodzenie -Imię i nazwisko 1 * * 1 Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 36

Implementacja asocjacji z atrybutem (2) o Dzięki zastąpieniu atrybutu asocjacji, klasą pośredniczącą otrzymaliśmy dwie zwykłe asocjacje. o Nowe asocjacje implementujemy na jeden ze znanych sposobów. o Problem z semantyką tej nowej klasy Nazwa? Nazwy ról: starych oraz nowych o Utrudniony dostęp do obiektów docelowych (poprzez obiekt klasy pośredniczącej) Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 37

Implementacja asocjacji kwalifikowanej Film Film Aktor Tytul Aktor -Imię i nazwisko 1 * o Najprostsza implementacja: Korzystamy z istniejącego podejścia, Dodajemy metodę, która na podstawie tytułu zwróci nam obiekt klasy Film, Słaba wydajność. o Lepsze rozwiązanie: Nie korzystamy z ArrayList, Stosujemy kontener mapujący, gdzie kluczem jest tytuł, a wartością obiekt opisujący film. Informacja zwrotna w dotychczasowy sposób. Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 38

Implementacja asocjacji kwalifikowanej (2) public class Aktor { // [...] private TreeMap<String, Film> filmkwalif = new TreeMap<String, Film>(); public void dodajfilmkwalif(film nowyfilm) { // Sprawdz czy nie mamy juz informacji o tym filmie if(!filmkwalif.containskey(nowyfilm.tytul)) { filmkwalif.put(nowyfilm.tytul, nowyfilm); // Dodaj informację zwrotną nowyfilm.dodajaktor(this); public Film znajdzfilmkwalif(string tytul) throws Exception { // Sprawdz czy nie mamy juz informacji o tym filmie if(!filmkwalif.containskey(tytul)) { throw new Exception("Nie odnaleziono filmu o tytule: " + tytul); return filmkwalif.get(tytul); // [...] Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 39

Implementacja asocjacji kwalifikowanej (3) // Utworz nowe obiekty (na razie bez informacji o powiazaniach) Film film1 = new Film("T1"); Film film2 = new Film("T3"); Aktor aktor1 = new Aktor("AS"); Aktor aktor2 = new Aktor("MB"); Aktor aktor3 = new Aktor("KL"); // Dodaj informacje o powiazaniach aktor1.dodajfilmkwalif(film1); aktor1.dodajfilmkwalif(film2); aktor2.dodajfilmkwalif(film1); aktor3.dodajfilmkwalif(film2); // Wyswietl info o aktorach System.out.println(aktor1); System.out.println(aktor2); System.out.println(aktor3); // Pobierz info o filmie "T1" dla aktora aktor1 Film f = aktor1.znajdzfilmkwalif("t1"); System.out.println(f); Aktor: AS T1 T3 Aktor: MB T1 Aktor: KL T3 Film: T1 AS MB Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 40

Ciąg dalszy na następnym wykładzie... Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 5 41