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

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

MAS dr. Inż. Mariusz Trzaska

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 10

Katalog książek cz. 1

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

Przeciążanie metod i operatorów

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 11

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 7

Laboratorium 5 Zend Framework: lista zadań

MODELOWANIE W UML DO OPISU BIZNESU, CZY SYSTEMÓW?

TWORZENIE I TESTOWANIE TEST-DRIVEN DEVELOPMENT APLIKACJI Z UŻYCIEM KOD: TDD

Java: interfejsy i klasy wewnętrzne

Partner projektu F5 Konsulting Sp. z o.o. ul. Składowa 5, Poznań T: F:

Aplikacje w środowisku Java

Opis i specyfikacja interfejsu SI WCPR do wybranych systemów zewnętrznych

WYKŁAD 2 Historia rozwoju technik programowania. Granica pomiędzy programem a agentem. Cykl życia i podstawowe elementy składowe agenta.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

stworzyliśmy najlepsze rozwiązania do projektowania organizacji ruchu Dołącz do naszych zadowolonych użytkowników!

Dokumentacja do API Javy.

Wykład 7: Pakiety i Interfejsy

Operatory odległości (część 2) obliczanie map kosztów

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

1 Historia i cechy C++ 2 PRZYDATNE KONSTRUKCJE

Optymalne przydzielanie adresów IP. Ograniczenia adresowania IP z podziałem na klasy

Dziedziczenie. dr Jarosław Skaruz

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 8

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Sugerowany sposób rozwiązania problemów. Istnieje kilka sposobów umieszczania wykresów w raportach i formularzach.

ZAPYTANIE OFERTOWE. Bielsko-Biała, 22 maja 2013 r.

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Klasy abstrakcyjne i interfejsy

Enkapsulacja, dziedziczenie, polimorfizm

Przypomnienie o klasach i obiektach

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

Nowe funkcje w programie Symfonia e-dokumenty w wersji Spis treści:

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

Polimorfizm. dr Jarosław Skaruz

SZCZEGÓŁOWY OPIS PRZEDMIOTU ZAMÓWIENIA

Informatyka Systemów Autonomicznych

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

"Pies" P i e s \0. Prawidłowy zapis wymaga wykorzystania funkcji strcpy() z pliku nagłówkowego string.h: char txt[10]; strcpy(txt, Pies );

Dostosowywanie zakresu subskrypcji na platformie Marketplace przez usuwanie i dodawanie licencji lub anulowanie całej subskrypcji

Programowanie obiektowe

Metody pracy na lekcji. Referat przedstawiony na spotkaniu zespołu matematyczno przyrodniczego

Rodzaj szkolenia nieformalnego: Coaching

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

Instrukcja korzystania z serwisu Geomelioportal.pl. - Strona 1/12 -

QuarkXpress skład i publikacja operacje podstawowe

Programowanie obiektowe

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

Programowanie obiektowe i zdarzeniowe

Wykład 8: klasy cz. 4

Programowanie obiektowe

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

Klasy abstrakcyjne, interfejsy i polimorfizm

imię kod ulica prześlij Dzięki formularzom możliwe jest pobieranie danych, a nie tylko ich wyświetlanie.

Technologie i usługi internetowe cz. 2

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

STANDARDY PRACY DYPLOMOWEJ (LICENCJACKIEJ, INŻYNIERSKIEJ I MAGISTERSKIEJ)

POWIATOWY URZĄD PRACY W GRUDZIĄDZU ul. Parkowa 22, Grudziądz, tel. (056) , fax. (056) ;

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

Bożena Czyż-Bortowska, Biblioteka Pedagogiczna w Toruniu

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

Programowanie obiektowe

CZYLI MYŚLENIE W ROZCIĄGANIU CZĘŚĆ PIERWSZA STATYCZNA

TECHNOLOGIA EJB I JPA KOD: EJBJPA

Wykład 6: Dziedziczenie

Programowanie obiektowe

Tworzenie kwerend. Nazwisko Imię Nr indeksu Ocena

Zapytanie ofertowe. Stworzenie inteligentnych narzędzi do generacji i zarządzania stron internetowych (SaaS+WEB2.0),

Pierwsze kroki. Stworzenie terenu. (3pkt)

Przykład -

Automatyzacja pracy w magazynie tylko na bazie standardowo zakodowanych informacji!

Imię i nazwisko zamawiającego...

Przestrzeń papier / model

Programowanie w Internecie. Java

Ogłoszenie o zamówieniu BZP - postępowanie nr A /14/PJ

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Nowe funkcje w module Repozytorium Dokumentów

Programowanie 2. Język C++. Wykład 3.

Wyjątki. Wyjątki. Wyjątki. Wyjątki. Wyjątki. Wyjątki. Wprowadzenie. Wprowadzenie

MAS dr. Inż. Mariusz Trzaska. Wykład 1

OFERTA JEDNOSTKI NAUKOWEJ. STAŻ PRACOWNIKA PRZEDSIĘBIORSTWA W JEDNOSTCE NAUKOWEJ w ramach projektu Stolica staży (UDA.POKL

Oznaczenie CE. Ocena ryzyka. Rozwiązanie programowe dla oznakowania

Metody sparametryzowane

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

PROGRAM SZKOLENIA DLA SPECJALISTÓW RYNKU PRACY Z UŻYTKOWANIA OPROGRAMOWANIA EIPD

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

Programowanie obiektowe

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

Zmiany funkcjonalne wprowadzone w Comarch ERP XL w wersji

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

Programowanie obiektowe

Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia:

1 Historia i cechy C++ 2 PRZYDATNE KONSTRUKCJE

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Ocena modeli biznesowych. Otoczenie firmy - modele biznesowe Internet pozycja konkurencyjna w sektorze

Transkrypt:

MAS dr. Inż. Mariusz Trzaska Wykład 9 Realizacja ascjacji w biektwych językach prgramwania (2)

Ciąg dalszy pprzednieg wykładu Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 2

Zagadnienia Wstęp teretyczny Implementacja ascjacji: Przy pmcy identyfikatrów, Krzystając z natywnych referencji. Implementacja ascjacji: ze względu na licznści, binarnych, z atrybutem, kwalifikwanych, n-arnych, Implementacja agregacji, Implementacja kmpzycji, Uniwersalne zarządzanie ascjacjami, Pdsumwanie Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 3

* Implementacja ascjacji n-arnej Najpierw musimy zamienić: jedną knstrukcję UML (ascjacja n-arną) na inną knstrukcję UML (n ascjacji binarnych raz klasę pśredniczącą). Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 4

Implementacja ascjacji n-arnej (2) Dzięki zastąpieniu ascjacji n-arnej, ascjacjami binarnymi raz klasą pśredniczącą trzymaliśmy n zwykłych ascjacji. Nwe ascjacje implementujemy na jeden ze znanych spsbów. Prblemy z semantyką Nazwa nwej klasy, Nazwy ról ascjacji: starych raz nwych, Licznści ascjacji. Utrudniny dstęp d biektów dcelwych (pprzez biekt klasy pśredniczącej) Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 5

Implementacja agregacji Czy zastswanie agregacji niesie jakieś knsekwencje dla zaangażwanych biektów? Nie! W związku z pwyższym agregacje implementujemy dkładnie tak sam jak klasyczne ascjacje. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 6

Implementacja kmpzycji Część ascjacyjna realizwana na dtychczaswych zasadach. Prblemy d rzwiązania: 1. Blkwanie samdzielneg twrzenia części, 2. Zakazanie współdzielenia części, 3. Usuwanie części przy usuwaniu całści. Mżliwe dwa pdejścia: Zmdyfikwanie istniejąceg rzwiązania, Wykrzystanie klas wewnętrznych. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 7

Implementacja kmpzycji (2) 1. Blkwanie samdzielneg twrzenia części (istnienia części bez całści), Prywatny knstruktr, Dedykwana metda (klaswa): pbierająca referencję d całści (i sprawdzająca czy jest na prawidłwa), twrząca biekt części, ddające infrmacje pwiązaniu zwrtnym. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 8

Implementacja kmpzycji (3) public class Czesc { public String nazwa;// public - dla uprszczenia private Calsc calsc; private Czesc(Calsc calsc, String nazwa) { this.nazwa = nazwa; this.calsc =calsc; public static Czesc utwrzczesc(calsc calsc, String nazwa) thrws Exceptin { if(calsc == null) { thrw new Exceptin("Calsc nie istnieje!"); // Utwcz nwa czesc Czesc cz = new Czesc(calsc, nazwa); // Ddaj d calsci calsc.ddajczesc(cz); return cz; Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 9

Implementacja kmpzycji (4) public class Calsc { private Vectr<Czesc> czesci = new Vectr<Czesc>(); private String nazwa; public Calsc(String nazwa) { this.nazwa = nazwa; public vid ddajczesc(czesc czesc) { if(!czesci.cntains(czesc)) { czesci.add(czesc); public String tstring() { String inf = "Calsc: " + nazwa + "\n"; fr(czesc cz : czesci) { inf += " " + cz.nazwa + "\n"; return inf; Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 10

Implementacja kmpzycji (5) 2. Zakazanie współdzielenia części Zmdyfikwana wersja metdy ddającej część Sprawdzająca czy dana część nie jest już gdzieś ddana, Oprócz ddawania infrmacji pwiązaniu z pdaną częścią, zapamiętuje (glbalnie) fakt, że dana część jest już pwiązana z całścią. Atrybut klaswy przechwujący infrmacje wszystkich częściach pwiązanych z całściami. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 11

Implementacja kmpzycji (6) Specjalna wersja metdy ddającej część public class Calsc { private Vectr<Czesc> czesci = new Vectr<Czesc>(); private static HashSet<Czesc> wszystkieczesci = new HashSet<Czesc>(); // [...] public vid ddajczesc(czesc czesc) thrws Exceptin { if(!czesci.cntains(czesc)) { // Sprawdz czy ta czesc nie zstala ddana d jakiejs calsci if(wszystkieczesci.cntains(czesc)) { thrw new Exceptin("Ta czesc jest juz pwiazana z calscia!"); czesci.add(czesc); // [...] // Zapamietaj na liscie wszystkich czesci (przeciwdziala wspldzielniu czesci) wszystkieczesci.add(czesc); Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 12

Implementacja kmpzycji (7) 3. Usuwanie części przy usuwaniu całści. W językach typu Java raz C# nie ma mżliwści ręczneg usuwania biektu, biekt jest usuwany przez VM gdy nie jest siągalny (nie ma d nieg żadnych referencji). W C++ mamy mżliwść ręczneg usunięcia biektu. Plecenia usunięcia części wart umieścić w destruktrze. Dzięki temu całść jest w miarę zautmatyzwana. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 13

Implementacja kmpzycji (8) 3. Usuwanie części przy usuwaniu całści c. d. W przypadku naszej implementacji, wart: Stwrzyć metdę (klaswą) usuwającą całść z ekstensji, Pwyższa metda pwinna również zadbać usunięcie infrmacji z glbalnej listy części (przeciwdziałającej współdzieleniu). Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 14

Implementacja kmpzycji przy pmcy klas wewnętrznych Obiekt klasy wewnętrznej nie mże istnieć bez (taczająceg g) biektu klasy zewnętrznej. Obiekt klasy wewnętrznej ma bezpśredni dstęp d inwariantów biektu klasy zewnętrznej. Pniższy kd nie wywłuje błędu, ale jeg efekt nie jest taki jaki byśmy chcieli. Obiekt klasy wewnętrznej (Czesc Czesc) ma dstęp d biektu klasy zewnętrznej (Calsc) t dbrze, Obiekt klasy zewnętrznej (Calsc Calsc) nic nie wie, że utwrzn biekt klasy wewnętrznej (Czesc) a t już bardz źle. // Bledny efekt: utwrzenie nwej czesci w kntekscie istniejacej calsci, // ale bez infrmwania tym calsci. Calsc.Czesc cz = c1.new Czesc("Czesc 02"); Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 15

Implementacja kmpzycji przy pmcy klas wewnętrznych (2) Aby temu przeciwdziałać: klasa wewnętrzna pwinna mieć prywatny knstruktr, klasa zewnętrzna musi dstarczać dedykwaną metdą zapewniającą właściwe utwrzenie biektów-części. Należy ręcznie zadbać : Blkwanie współdzielenia części. Część zawsze jest płączna tylk z jednym biektem-całścią. Niemniej, mże się zdarzyć, że różne całści byłyby płączne (pkazywałyby na) z tą samą częścią. Usuwanie części przy usuwaniu całści (pdbnie jak w przypadku pprzednieg spsbu implementacji kmpzycji). Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 16

Implementacja kmpzycji przy pmcy klas public class Calsc { private String nazwacalsci; wewnętrznych (3) private Vectr<Czesc> czesci = new Vectr<Czesc>(); public Calsc(String nazwa) { nazwacalsci = nazwa; public Czesc utwrzczesc(string nazwa) { Czesc czesc = new Czesc(nazwa); czesci.add(czesc); return czesc; // Klasa wewnetrzna czesc. public class Czesc { private String nazwaczesci; // Ze wzgledu na specyfike klas wewnetrznych, nie ptrzebujemy referencji pkazujacej na calsc. public Czesc(String nazwa) { nazwaczesci = nazwa; Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 17

Zarządzanie ascjacjami Przedstawine spsby implementacji zarządzania ascjacjami będą (prawie) takie same dla każdej bizneswej klasy w systemie. C więcej, będą (prawie) takie same dla każdej ascjacji nawet w tej samej klasie. Czy da się t jakś zunifikwać? Aby nie pisać wiele razy (prawie) teg sameg kdu? Oczywiście pdbnie jak przy kazji zarządzania ekstensją, wykrzystamy dziedziczenie istniejące w języku Java. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 18

Uniwersalne zarządzanie ascjacjami Przy kazji zarządzania ekstensją stwrzyliśmy nwa klasę ObjectPlus. Aby nie stracić zawartej tam funkcjnalnści, stwrzymy nwą klasę ObjectPlusPlus dziedziczącą z ObjectPlus. Dzięki temu, istniejącą funkcjnalnść w zakresie ekstensji, uzupełnimy ułatwienia w zarządzaniu ascjacjami. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 19

Uniwersalne zarządzanie ascjacjami (2) Stwrzymy klasę z której będą dziedziczyć wszystkie bizneswe klasy w naszej aplikacji. Nazwijmy ją ObjectPlusPlus i wypsażmy w funkcjnalnść ułatwiającą zarządzanie: zwykłymi ascjacjami binarnymi, ascjacjami kwalifikwanymi, kmpzycjami (częściw tylk warunek nr 2). Zastsujemy drugie z mawianych pdejść d implementacji ascjacji: w parciu referencje. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 20

Uniwersalne ascjacje Pnieważ wszystkie ascjacje w ramach jedneg biektu będą przechwywane w jednej klekcji, nie mżemy zastswać zwykłeg pjemnika typu Vectr czy ArrayList. Użyjemy kntenera przechwująceg klucze i wartści: Kluczem będzie nazwa rli ascjacji, Wartścią mapa zawierająca: Klucz będący kwalifikatrem. Gdy nie chcemy użyć ascjacji kwalifikwanej, kwalifikatr będzie tżsamy z biektem dcelwym. Wartść - referencje d knkretneg pwiązania. Atrybut klaswy przechwujący cy referencje d wszystkich biektów ddanych jak części, umżliwi pilnwanie warunku nr 2 dtycząceg kmpzycji (brak współdzielenia), Innymi słwy, ten nwy kntener będzie zawierał pwiązania istniejące w ramach wielu ascjacji. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 21

Uniwersalne ascjacje (2) :Aktr Arnld Schwarzenegger Rla A :Film Terminatr 1 Hashtable<String, HashMap<Object, ObjectPlusPlus>> Aktrzy Rla B Grupa Rla C Rla D HashMap<Object, ObjectPlusPlus> Kwalifikatr Kwalifikatr Kwalifikatr HashMap<Object, ObjectPlusPlus> Kwalifikatr Kwalifikatr Kwalifikatr Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 22

Klasa ObjectPlusPlus public class ObjectPlusPlus extends ObjectPlus implements Serializable { /** * Przechwuje infrmacje wszystkich pwiazaniach teg biektu. */ private Hashtable<String, HashMap<Object, ObjectPlusPlus>> pwiazania = new Hashtable<String, HashMap<Object, ObjectPlusPlus>>(); /** * Przechwuje infrmacje wszystkich czesciach pwiazanych z ktrymklwiek z biektw. */ private static HashSet<ObjectPlusPlus> wszystkieczesci = new HashSet<ObjectPlusPlus>(); /** * Knstruktr. * */ public ObjectPlusPlus() { super(); // [...] Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 23

Klasa ObjectPlusPlus (2) public class ObjectPlusPlus extends ObjectPlus implements Serializable { // [...] private vid ddajpwiazanie(string nazwarli, String dwrtnanazwarli, ObjectPlusPlus biektdcelwy, Object kwalifikatr, int licznik) { HashMap<Object, ObjectPlusPlus> pwiazaniaobiektu; if(licznik < 1) { return; if(pwiazania.cntainskey(nazwarli)) { // Pbierz te pwiazania pwiazaniaobiektu = pwiazania.get(nazwarli); else { // Brak pwiazan dla takiej rli ==> utwrz pwiazaniaobiektu = new HashMap<Object, ObjectPlusPlus>(); pwiazania.put(nazwarli, pwiazaniaobiektu); if(!pwiazaniaobiektu.cntainskey(kwalifikatr)) { // Ddaj pwiazanie dla teg biektu pwiazaniaobiektu.put(kwalifikatr, biektdcelwy); // Ddaj pwiazanie zwrtne biektdcelwy.ddajpwiazanie(dwrtnanazwarli, nazwarli, this, this, licznik - 1); Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 24

Klasa ObjectPlusPlus (3) public class ObjectPlusPlus extends ObjectPlus implements Serializable { // [...] public vid ddajpwiazanie(string nazwarli, String dwrtnanazwarli, ObjectPlusPlus biektdcelwy, Object kwalifikatr) { ddajpwiazanie(nazwarli, dwrtnanazwarli, biektdcelwy, kwalifikatr, 2); public vid ddajpwiazanie(string nazwarli, String dwrtnanazwarli, ObjectPlusPlus biektdcelwy) { ddajpwiazanie(nazwarli, dwrtnanazwarli, biektdcelwy, biektdcelwy); public vid ddajczesc(string nazwarli, String dwrtnanazwarli, ObjectPlusPlus biektczesc) thrws Exceptin { // Sprawdz czy ta czesc juz gdzies nie wystepuje if(wszystkieczesci.cntains(biektczesc)) { thrw new Exceptin("Ta czesc jest już pwiazana z jakas calscia!"); ddajpwiazanie(nazwarli, dwrtnanazwarli, biektczesc); // Zapamietaj ddanie biektu jak czesci wszystkieczesci.add(biektczesc); // [...] Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 25

Klasa ObjectPlusPlus (4) public class ObjectPlusPlus extends ObjectPlus implements Serializable { // [...] public ObjectPlusPlus[] dajpwiazania(string nazwarli) thrws Exceptin { HashMap<Object, ObjectPlusPlus> pwiazaniaobiektu; if(!pwiazania.cntainskey(nazwarli)) { // Brak pwiazan dla tej rli thrw new Exceptin("Brak pwiazan dla rli: " + nazwarli); pwiazaniaobiektu = pwiazania.get(nazwarli); return (ObjectPlusPlus[]) pwiazaniaobiektu.values().tarray(new ObjectPlusPlus[0]); public vid wyswietlpwiazania(string nazwarli, PrintStream stream) thrws Exceptin { HashMap<Object, ObjectPlusPlus> pwiazaniaobiektu; if(!pwiazania.cntainskey(nazwarli)) { // Brak pwiazan dla tej rli thrw new Exceptin("Brak pwiazan dla rli: " + nazwarli); pwiazaniaobiektu = pwiazania.get(nazwarli); Cllectin cl = pwiazaniaobiektu.values(); stream.println(this.getclass().getsimplename() + " pwiazania w rli " + nazwarli + ":"); fr(object bj : cl) { stream.println(" " + bj); // [...] Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 26

Klasa ObjectPlusPlus (5) public class ObjectPlusPlus extends ObjectPlus implements Serializable { // [...] public ObjectPlusPlus dajpwiazanyobiekt(string nazwarli, Object kwalifikatr) thrws Exceptin { HashMap<Object, ObjectPlusPlus> pwiazaniaobiektu; if(!pwiazania.cntainskey(nazwarli)) { // Brak pwiazan dla tej rli thrw new Exceptin("Brak pwiazan dla rli: " + nazwarli); pwiazaniaobiektu = pwiazania.get(nazwarli); if(!pwiazaniaobiektu.cntainskey(kwalifikatr)) { // Brak pwiazan dla tej rli thrw new Exceptin("Brak pwiazania dla kwalifikatra: " + kwalifikatr); return pwiazaniaobiektu.get(kwalifikatr); Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 27

Klasy bizneswe d zaimplementwania Inicjały Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 28

Implementacja klas bizneswych krzystająca z ObjectPlusPlus public class Aktr extends ObjectPlusPlus { private String imienazwisk; public Aktr(String imienazwisk) { super();// wlanie knstruktra z nadklasy - bwiazkwe! this.imienazwisk = imienazwisk; public String tstring() { return "Aktr: " + imienazwisk; public class Film extends ObjectPlusPlus { private String tytul; public Film(String tytul) { super();// wlanie knstruktra z nadklasy - bwiazkwe! this.tytul = tytul; public String tstring() { return "Film: " + tytul; Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 29

Implementacja klas bizneswych krzystająca z ObjectPlusPlus (2) public class Grupa extends ObjectPlusPlus { private int nr; public Grupa(int nr) { super();// wlanie knstruktra z nadklasy - bwiazkwe! this.nr = nr; public String tstring() { return "Grupa: " + nr; Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 30

Przykład wykrzystania klas bizneswych krzystających z ObjectPlusPlus // Utwrz nwe biekty (na razie bez infrmacji pwiazaniach) Aktr a1 = new Aktr("Arnld Schwarzenegger"); Aktr a2 = new Aktr("Michael Biehn"); Aktr a3 = new Aktr("Kristanna Lken"); Film f1 = new Film("Terminatr 1"); Film f3 = new Film("Terminatr 3"); Grupa g1 = new Grupa(1); Grupa g2 = new Grupa(2); // Ddaj infrmacje pwiazaniach f1.ddajpwiazanie("aktrzy", "filmy", a1); // f1.ddajpwiazanie("aktrzy", "filmy", a2); f1.ddajpwiazanie("aktrzy", "filmy", a2, "MB");// wykrzystanie ascjacji kwalifikwanej f3.ddajpwiazanie("aktrzy", "filmy", a1); f3.ddajpwiazanie("aktrzy", "filmy", a3); g1.ddajczesc("czesc", "calsc", a1); g1.ddajczesc("czesc", "calsc", a2); g2.ddajczesc("czesc", "calsc", a3); // g2.ddajczesc("czesc", "calsc", a1); // wyjatek pniewaz ddawana czesc (aktr) nalezy juz d innej calsci (grupy) Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 31

Przykład wykrzystania klas bizneswych krzystających z ObjectPlusPlus (2) Zadanie C jest ptencjalnie złeg (niebezpieczneg) w tym pdejściu? Jak mżna t pprawić? // Wyswietl infrmacje f1.wyswietlpwiazania("aktrzy", System.ut); f3.wyswietlpwiazania("aktrzy", System.ut); a1.wyswietlpwiazania("filmy", System.ut); Film pwiazania w rli aktrzy: Aktr: Arnld Schwarzenegger Aktr: Michael Biehn Film pwiazania w rli aktrzy: Aktr: Arnld Schwarzenegger Aktr: Kristanna Lken Aktr pwiazania w rli filmy: Film: Terminatr 1 Film: Terminatr 3 Grupa pwiazania w rli czesc: Aktr: Arnld Schwarzenegger Aktr: Michael Biehn Aktr: Michael Biehn g1.wyswietlpwiazania("czesc", System.ut); // test ascjacji kwalifikwanej System.ut.println(f1.dajPwiazanyObiekt("aktrzy", "MB")); Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 32

Pdsumwanie Mamy dwa generalne pdejścia d implementacji ascjacji: Identyfikatry, Natywne referencje. Niektóre rdzaje ascjacji, przed ich implementacją należy zamienić na knstrukcje równważne. Dzięki temu implementujemy je krzystając ze znanych już spsbów. Całą funkcjnalnść związaną z zarządzaniem ascjacjami, wart zgrmadzić w specjalnej nadklasie (ObjectPlusPlus). Dzięki temu, że nwa klasa (ObjectPlusPlus) dziedziczy z ObjectPlus, bsługuje również zarządzanie ekstensjami. Mdelwanie Systemów Infrmacyjnych (MSI), wykład 9 33