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

Podobne dokumenty
MAS dr. Inż. Mariusz Trzaska

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

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

Mariusz Trzaska Modelowanie i implementacja systemów informatycznych

Modelowanie obiektowe

MAS dr. Inż. Mariusz Trzaska

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.

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

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

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

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

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

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

Klasy abstrakcyjne i interfejsy

Laboratorium 8 Diagramy aktywności

Podstawy programowania obiektowego

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Programowanie obiektowe

Aplikacje RMI

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.

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

MAS dr. Inż. Mariusz Trzaska

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

Podstawy modelowania w języku UML

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

Język UML w modelowaniu systemów informatycznych

UML. zastosowanie i projektowanie w języku UML

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

Programowanie obiektowe

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

Programowanie obiektowe

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

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

Język JAVA podstawy. wykład 2, 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;

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

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

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Programowanie obiektowe

Modelowanie i implementacja systemów informatycznych

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Programowanie obiektowe

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

Programowanie obiektowe

Zaawansowane aplikacje WWW - laboratorium

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

Rysunek 1: Przykłady graficznej prezentacji klas.

Technologie obiektowe

Modelowanie danych, projektowanie systemu informatycznego

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

Podstawy Programowania Obiektowego

Programowanie Obiektowe Ćwiczenie 4

Tworzenie aplikacji w języku Java

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Dokumentacja do API Javy.

Przykład 1 Iteracja 1 tworzenia oprogramowania

MAS dr. Inż. Mariusz Trzaska

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Aplikacje w środowisku Java

UML w Visual Studio. Michał Ciećwierz

Diagramy klas. WYKŁAD Piotr Ciskowski

Programowanie obiektowe

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

Programowanie obiektowe

Bazy danych i usługi sieciowe

Definiowanie własnych klas

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

Programowanie obiektowe i zdarzeniowe

Podstawy projektowania systemów komputerowych

Przypomnienie o klasach i obiektach

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Programowanie obiektowe

Wykład 8: klasy cz. 4

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie obiektowe

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

Programowanie obiektowe

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

11.6 Klasa do obsługi liczb wymiernych

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie obiektowe i zdarzeniowe

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

Klasy abstrakcyjne, interfejsy i 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)

Aplikacje RMI Lab4

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

Podstawy programowania III WYKŁAD 4

Enkapsulacja, dziedziczenie, polimorfizm

Transkrypt:

MAS dr. Inż. Mariusz Trzaska Wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 3

Powiązania i Asocjacje (2) : Pracownik Imię = Jan Nazwisko = Kowalski : Pracownik Imię = Andrzej Nazwisko = Nowak pracuje w pracuje w : Firma Nazwa = IBM : Firma Nazwa = Softmakers Modelowanie Systemów Informacyjnych (MSI), wykład 8 4

Liczności asocjacji o 1 do 0, 1 -Imię Pracownik -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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 7

Asocjacja rekurencyjna o Zachodzi w ramach tej samej klasy Modelowanie Systemów Informacyjnych (MSI), wykład 8 8

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

Asocjacja z atrybutem (3) : Pracownik pracuje w -2002.07.12 07-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 Systemów Informacyjnych (MSI), wykład 8 11

Asocjacja kwalifikowana o Kwalifikator: atrybut lub zestaw atrybutów jednoznacznie identyfikujący obiekt w ramach asocjacji. o Umożliwia szybkie otrzymanie obiektu z drugiej strony powiązania na podstawie kwalifikatora o Indeksowanie (?) Pracownik -Imię -Nazwisko pracuje w Id 1 * Firma -Nazwa Modelowanie Systemów Informacyjnych (MSI), wykład 8 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. Modelowanie Systemów Informacyjnych (MSI), wykład 8 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. Modelowanie Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 15

Kompozycja (2) o Agregacja o Kompozycja Modelowanie Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 par identyfikatorów (dla asocjacji dwukierunkowych) :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] Film = [1, 2] Film = [1] Id = 3 :Aktor Imię i Nazwisko = KL Film = [2] Modelowanie Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 21

Wykorzystanie identyfikatorów (4) Film film1 = new Film(1, "T1", new int[]{3, 4); Film film2 = new Film(2, "T3", new int[]{3); 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[]{3); // 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 Modelowanie Systemów Informacyjnych (MSI), wykład 8 22 AS MB T1 T3

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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 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 Systemów Informacyjnych (MSI), wykład 8 31

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 Systemów Informacyjnych (MSI), wykład 8 32

Implementacja asocjacji skierowanej 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 Systemów Informacyjnych (MSI), wykład 8 33

Implementacja asocjacji rekurencyjnej 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 Systemów Informacyjnych (MSI), wykład 8 34

Implementacja asocjacji z atrybutem o Najpierw musimy zamienić: jedną konstrukcję UML (asocjacja z atrybutem) na inną konstrukcję UML (asocjacją z klasą pośredniczącą). Modelowanie Systemów Informacyjnych (MSI), wykład 8 35

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 Systemów Informacyjnych (MSI), wykład 8 36

Implementacja asocjacji kwalifikowanej Tytul 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: 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 Systemów Informacyjnych (MSI), wykład 8 37

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 Systemów Informacyjnych (MSI), wykład 8 38

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 Systemów Informacyjnych (MSI), wykład 8 39

Ciąg dalszy na następnym wykładzie... Modelowanie Systemów Informacyjnych (MSI), wykład 8 40