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

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

Programowanie obiektowe

MAS dr. Inż. Mariusz Trzaska

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

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

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Programowanie obiektowe

Mariusz Trzaska Modelowanie i implementacja systemów informatycznych

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

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

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

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Aplikacje w środowisku Java

Klasy abstrakcyjne, interfejsy i polimorfizm

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

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

Programowanie obiektowe

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

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

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

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

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

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

Programowanie obiektowe

Definiowanie własnych klas

Wywoływanie metod zdalnych

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Java. Programowanie Obiektowe Mateusz Cicheński

Modelowanie i implementacja systemów informatycznych

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

Polimorfizm. dr Jarosław Skaruz

Wykład 7: Pakiety i Interfejsy

Wykład 6: Dziedziczenie

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Dziedziczenie. Tomasz Borzyszkowski

Dokumentacja do API Javy.

1 Atrybuty i metody klasowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Strumienie i serializacja

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

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

Wywoływanie metod zdalnych

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

Podstawy programowania obiektowego

Programowanie obiektowe

Podstawy obiektowości

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

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

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

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

Kurs WWW. Paweł Rajba.

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

Programowanie obiektowe - 1.

Podstawy Programowania Obiektowego

Programowanie obiektowe

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

TEMAT : KLASY DZIEDZICZENIE

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

Programowanie Obiektowe Ćwiczenie 4

Dawid Gierszewski Adam Hanasko

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

Technologie obiektowe

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wykład 8: klasy cz. 4

Wykład 4: Klasy i Metody

Aplikacje RMI

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Systemy Rozproszone - Ćwiczenie 6

Remote Method Invocation 17 listopada 2010

Programowanie obiektowe

Programowanie obiektowe

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Przypomnienie o klasach i obiektach

Programowanie w Internecie. Java

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

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Technologie i usługi internetowe cz. 2

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

Programowane refleksyjne i serializacja

Dziedziczenie. dr Jarosław Skaruz

Aplikacje RMI Lab4

10. Programowanie obiektowe w PHP5

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Transkrypt:

MAS dr. Inż. Mariusz Trzaska Wykład 7 Wykorzystanie klas w obiektowych językach programowania

Zagadnienia o o Realizacja w popularnych językach programowania (Java) poniższych konstrukcji: Klasa Ekstensja Atrybuty: proste i złożone wymagane i opcjonalne pojedyncze i powtarzalne obiektu i klasowe Wyliczalne (pochodny) Metody: obiektu klasowe przesłonięcie i przeciążenie Trwałość ekstensji Klasa dedykowana Podsumowanie Modelowanie Systemów Informacyjnych (MSI), wykład 7 2

Klasa o Klasa jest nazwanym opisem grupy obiektów, które współdzielą ten sam zbiór własności (inwariantów). o Klasa nie jest zbiorem obiektów, o Stosunek klasa/podklasa oznacza, że obiekty podklasy posiadają wszystkie inwarianty nadklasy, plus (ewentualnie) inwarianty swoje. Np. klasa Student ma wszystkie inwarianty klasy Osoba, plus inwarianty własne. o Klasa opisuje obiekt. Wykłady z PRI autorstwa dr inż. Ewy Stemposz oraz prof. Kazimierza Subiety. Modelowanie Systemów Informacyjnych (MSI), wykład 7 3

Atrybuty o Służą do opisu własności obiektów o Rodzaje Proste i złożone Wymagane i opcjonalne Pojedyncze i powtarzalne Obiektu i klasowe Wyliczalne (pochodne) Modelowanie Systemów Informacyjnych (MSI), wykład 7 4

Metody o Umożliwiają wykonywanie operacji na obiektach, prowadzących (zwykle) do zmiany ich stanu. o Rodzaje Metoda obiektu.. Wykonuje operacje (oraz ma dostęp) na jednym, konkretnym obiekcie. Na tym, na rzecz, którego została wywołana. Metoda klasowa.. Ma dostęp do całej ekstensji klasy. Wywoływana jest na rzecz klasy, a nie obiektu. Dzięki temu można jej użyć nawet nie mając żadnego obiektu danej klasy. Modelowanie Systemów Informacyjnych (MSI), wykład 7 5

Klasy, a języki programowania o Jak ma się podana definicja do popularnych, obiektowych języków programowania? o W językach Java, MS C#, C++ klasy występują w sposób zgodny z przytoczoną definicją. o Niestety nie dotyczy to wszystkich pojęć znanych z obiektowości (UML). Modelowanie Systemów Informacyjnych (MSI), wykład 7 6

Klasy w języku Java o Załóżmy, że potrzebna nam jest klasa opisująca film w wypożyczalni wideo. ** * Informacje o filmie. * */ public class Film { /* Cialo klasy */ Modelowanie Systemów Informacyjnych (MSI), wykład 7 7

Ekstensja klasy o Zbiór aktualnie istniejących obiektów danej klasy. o W językach Java, MS C#, C++ ekstensja klasy nie występuje. o Co w takim razie możemy zrobić? o Własna implementacja ekstensji klasy Modelowanie Systemów Informacyjnych (MSI), wykład 7 8

Implementacja ekstensji klasy o Dwa różne podejścia. Implementacja: W ramach tej samej klasy biznesowej Przy użyciu klasy dodatkowej Klasa Film,, jej ekstensja np. Filmy Klasa Film,, jej ekstensja np. FilmEkstensja o Które podejście jest lepsze? Wady Zalety Modelowanie Systemów Informacyjnych (MSI), wykład 7 9

Implementacja ekstensji klasy (2) o Implementacja w ramach tej samej klasy Kontener przechowujący referencje do obiektów danej klasy (jako atrybut klasowy czyli static), Metody pomocnicze Dodanie, Usunięcie, Wyszukanie.? Realizacja metod klasowych. W tej samej klasie, ze słowem kluczowym static. Modelowanie Systemów Informacyjnych (MSI), wykład 7 10

Implementacja w ramach tej samej klasy public class Film { // Implementacja czesci biznesowej public Film() { // Dodaj do ekstensji dodajfilm(this); // Implementacja ekstensji /** Ekstensja. */ private static Vector<Film> ekstensja = new Vector<Film>(); private static void dodajfilm(film film) { ekstensja.add(film); private static void usunfilm(film film) { ekstensja.remove(film); // Modelowanie Systemów Informacyjnych (MSI), wykład 7 11

Implementacja w ramach tej samej klasy (2) public class Film { // c. d. /** Wyswietla ekstensje. Metoda klasowa */ public static void pokazekstensje() { System.out.println("Ekstensja klasy Film: "); for(film film : ekstensja) { System.out.println(film); public static void main(string[] args) { // Test: Implementacja ekstensji w ramach tej samej klasy Film film1 = new Film(); Film film2 = new Film(); Film.pokazEkstensje(); Ekstensja klasy Film: mt.mas.film@126804e mt.mas.film@b1b4c3 Modelowanie Systemów Informacyjnych (MSI), wykład 7 12

Implementacja ekstensji klasy (3) o Implementacja przy użyciu klasy dodatkowej Nazewnictwo Klasa Film, jej ekstensja np. Filmy Klasa Film, jej ekstensja np. FilmEkstensja Możliwość stworzenia wielu różnych ekstensji Kolekcja przechowująca referencje do obiektów klasy biznesowej, Metody pomocnicze Dodanie, Usunięcie, Wyszukanie. Modelowanie Systemów Informacyjnych (MSI), wykład 7 13

Implementacja ekstensji klasy (4) o Implementacja przy użyciu klasy dodatkowej c. d. Realizacja metod klasowych. Będą na zewnątrz klasy biznesowej w klasie zarządzającej ekstensją. Problemy z dostępem do atrybutów (public/private/protected). Utrudnione automatyczne dodawanie do ekstensji. Inne rozwiązania, np. z klasą wewnętrzną Kolekcją referencji jako atrybutem static Modelowanie Systemów Informacyjnych (MSI), wykład 7 14

Implementacja ekstensji przy użyciu klasy dodatkowej public class Film { /* Cialo klasy */ public class FilmEkstensja { private Vector<Film> ekstensja = new Vector<Film>(); public void dodajfilm(film film) { ekstensja.add(film); public void usunfilm(film film) { ekstensja.remove(film); public void pokazekstensje() { System.out.println("Ekstensja klasy Film: "); for(film film : ekstensja) { System.out.println(film); Modelowanie Systemów Informacyjnych (MSI), wykład 7 15

Implementacja ekstensji przy użyciu klasy dodatkowej (2) public static void main(string[] args) { // Test: Implementacja ekstensji przy uzyciu klasy dodatkowej FilmEkstensja filmekstensja = new FilmEkstensja(); Film film1 = new Film(); filmekstensja.dodajfilm(film1); Film film2 = new Film(); filmekstensja.dodajfilm(film2); filmekstensja.pokazekstensje(); Ekstensja klasy Film: mt.mas.film@d2906a mt.mas.film@72ffb Modelowanie Systemów Informacyjnych (MSI), wykład 7 16

Atrybuty w obiektowości, a w języku Java o Rodzaje Proste.. Występują w takiej postaci jak w obiektowości (w UML). public class Film { private float cena; Złożone.. Atrybut złożony jest opisywany za pomocą nowej klasy (np. data). Konsekwencje: W klasie biznesowej (np. Film) przechowujemy referencję do jego wystąpienia, a nie (złożoną) wartość. W związku z powyższym możemy go współdzielić (inaczej niż w teoretycznej semantyce atrybutu złożonego), np. inny obiekt może przechowywać referencję do tej samej daty. public class Film { private Date datadodania; Modelowanie Systemów Informacyjnych (MSI), wykład 7 17

Atrybuty w obiektowości, a w języku Java (2) o Rodzaje c. d. Wymagane. Każdy atrybut prosty przechowuje jakąś wartość nie może nie przechowywać. Atrybut złożony przechowuje referencję do obiektu będącego jego wartością. Ponieważ jest to referencja, może mieć wartość null,, czyli brak wartości. Należy ręcznie sprawdzać czy jest różna od null. Opcjonalne Dla atrybutów złożonych przechowujemy null jako informację o braku wartości. Co z atrybutami prostymi?? Klasy opakowujące! Modelowanie Systemów Informacyjnych (MSI), wykład 7 18

Atrybuty w obiektowości, a w języku Java (3) o Rodzaje c. d. Pojedyncze.. Taka sama semantyka jak w obiektowości (w UML). Powtarzalne.. Należy wykorzystać tablice lub kontenery (rozwiązanie preferowane gdy liczba wartości jest zmienna). Obiektu.. Taka sama semantyka jak w obiektowości (w UML). Klasowe.. Sposób realizacji zależy od podejścia do ekstensji: Ekstensja w ramach tej samej klasy atrybuty klasowe w tej samej klasie ze słowem kluczowym static, Ekstensja jako klasa dodatkowa atrybuty klasowe w klasie dodatkowej (bez słowa kluczowego static). Modelowanie Systemów Informacyjnych (MSI), wykład 7 19

Atrybuty w obiektowości, a w języku Java (3) o Rodzaje c. d. Wyliczalne (pochodne). W przypadku: hermetyzacji ortodoksyjnej, specjalne traktowanie atrybutu zaimplementowane w metodzie udostępniającej/zmieniającej jego wartość. bezpośredniego dostępu do atrybutu, implementacja jego specjalnego traktowania jest mocno utrudniona (niemożliwa?). Doskonały mechanizm: properties jak na razie tylko w języku MS C#. private float cena { get { set { return cena_netto * 1.22; cena_netto = value / 1.22; Modelowanie Systemów Informacyjnych (MSI), wykład 7 20

Metody w obiektowości, a w języku Java o Rodzaje Metoda obiektu.. Taka sama semantyka jak w obiektowości (w UML). public float getcena() { return cena; Metoda klasowa.. Sposób realizacji zależy od podejścia do ekstensji (np. void pokazekstensje()): ): Ekstensja w ramach tej samej klasy metody klasowe w tej samej klasie ze słowem kluczowym static, Ekstensja jako klasa dodatkowa metody klasowe w klasie dodatkowej (bez słowa kluczowego static). Modelowanie Systemów Informacyjnych (MSI), wykład 7 21

Metody w obiektowości, a w języku Java (2) o Przeciążenie metody.. Taka sama semantyka jak w obiektowości (w UML). public float getcena() { return cena; public float getcena(float stawkavat) { return cena * (1.0f + stawkavat / 100.0f); o Przesłonięcie metody.. Taka sama semantyka jak w obiektowości (w UML). Object public class Film { // Implementacja czesci biznesowej public String tostring() { return "Film: " + tytul; Ekstensja klasy Film: mt.mas.film@126804e mt.mas.film@b1b4c3 Ekstensja klasy Film: Film: Terminator 1 Film: Terminator 2 tostring() Modelowanie Systemów Informacyjnych (MSI), wykład 7 22 Film tostring()

Trwałość ekstensji o Ekstensja klasy jest trwała gdy jej obiekty przeżyją wyłączenie systemu po ponownym włączeniu systemu będziemy mieli te same obiekty. o W językach Java, MS C#, C++ cecha ta nie występuje bezpośrednio. o W związku z tym implementujemy ja ręcznie zapamiętując ekstensje na dysku, a następnie je wczytując. Modelowanie Systemów Informacyjnych (MSI), wykład 7 23

Trwałość ekstensji (2) o o W efekcie, zamiast tych samych obiektów,, mamy takie same obiekty. Implementacja Ręczna, Szybkość, Duża kontrola nad efektem końcowym, Większa odporność na zmiany w kodzie utrwalanych klas, Mały plik, Wymaga (przeważnie) sporo pracy. Korzystająca z serializacji, Bardzo łatwa w użyciu, Mniejsza szybkość, Duży plik, Możliwość kontroli dzięki: dodaniu metod: private void writeobject(objectoutputstreamobjectoutputstream stream) throws IOException private void readobject(objectinputstreamobjectinputstream stream) throws IOException, ClassNotFoundException słowu kluczowemu transient. Modelowanie Systemów Informacyjnych (MSI), wykład 7 24

o Implementacja c. d. Trwałość ekstensji (3) W oparciu o bazę danych, Konieczność mapowania struktur języka Java na konstrukcje z bazy danych, Możliwość skorzystania z języka zapytań, Praca z różnymi bazami danych, Duży plik (czasami), Szybkość działania Korzystając z gotowych bibliotek. Hibernate (http://www.hibernate.org/ http://www.hibernate.org/) Java Persistence API (https://glassfish.dev.java.net/ https://glassfish.dev.java.net/) Java Data Objects (http://www.jpox.org/ http://www.jpox.org/) Modelowanie Systemów Informacyjnych (MSI), wykład 7 25

Trwałość ekstensji implementacja ręczna o W każdej z klas biznesowych znajduje się metoda zapisująca oraz odczytująca stan pojedynczego obiektu. public class Film { private String tytul; private float cena; private Date datadodania; private void write(dataoutputstream stream) throws IOException { stream.writeutf(tytul); stream.writefloat(cena); stream.writelong(datadodania.gettime()); private void read(datainputstream stream) throws IOException { tytul = stream.readutf(); cena = stream.readfloat(); long time = stream.readlong(); datadodania = new Date(time); Modelowanie Systemów Informacyjnych (MSI), wykład 7 26

Trwałość ekstensji implementacja ręczna (2) o W każdej z klas zarządzających ekstensją (lub w klasie biznesowej jeżeli wybraliśmy takie podejście), znajdują się metody zapisujące oraz odczytujące ekstensję. public class Film { public static void zapiszekstensje(dataoutputstream stream) throws IOException { stream.writeint(ekstensja.size()); for(film film : ekstensja) { film.write(stream); public static void odczytajekstensje(datainputstream stream) throws IOException { Film film = null; int liczbaobiektow = stream.readint(); ekstensja.clear(); for(int i = 0; i < liczbaobiektow; i++) { film = new Film(); film.read(stream); Modelowanie Systemów Informacyjnych (MSI), wykład 7 27

Trwałość ekstensji implementacja ręczna (3) o Przykład pokazuje zapis oraz odczyt ekstensji. o Dzięki podzieleniu funkcjonalności na odpowiednie metody, możemy w łatwy sposób zapisywać inne ekstensje do tego samego strumienia (pliku). o Dzięki temu, stan całej aplikacji może być zapamiętany w jednym pliku. o Efekt działania Ekstensja utworzona w pamięci, Ekstensja zapisana i odczytana z pliku Ekstensja klasy Film: Film: Terminator 1, id: mt.mas.film@27391d Film: Terminator 2, id: mt.mas.film@116ab4e Ekstensja klasy Film: Film: Terminator 1, id: mt.mas.film@1434234 Film: Terminator 2, id: mt.mas.film@af8358 Modelowanie Systemów Informacyjnych (MSI), wykład 7 28

Trwałość ekstensji implementacja ręczna (4) final String ekstensjaplik = "d:\\ekstensja.bin"; Film film1 = new Film("Terminator 1", new Date(), 29.90f); Film film2 = new Film("Terminator 2", new Date(), 34.90f); try { // Zapisz ekstensje do strumienia DataOutputStream out2 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(ekstensjaPlik))); Film.zapiszEkstensje(out2); out2.close(); // Odczytaj ekstensje ze strumienia DataInputStream in2 = new DataInputStream(new BufferedInputStream(new FileInputStream(ekstensjaPlik))); Film.odczytajEkstensje(in2); in2.close(); catch ( ) { // Modelowanie Systemów Informacyjnych (MSI), wykład 7 29

Trwałość ekstensji problem z powiązaniami o Przedstawiony sposób ręcznej implementacji trwałości jest bardzo prosty. Nie pozwala na właściwe traktowanie powiązanych obiektów. Ekstensja filmów Ekstensja aktorów :Film Komando :Film Terminator 1 :Film Terminator 2 :Film Terminator 3 :Aktor Arnold Schwarzenegger :Aktor Michael Biehn :Aktor Kristanna Loken Modelowanie Systemów Informacyjnych (MSI), wykład 7 30

Trwałość ekstensji implementacja z wykorzystaniem serializacji o o o o Serializacja jest mechanizmem zaimplementowanym w ramach bibliotek języka Java. Umożliwia automatyczne: zapisywanie grafu obiektów do strumienia, Odczytywanie grafu obiektów ze strumienia. Jedynym wymogiem, który trzeba spełnić aby z niego korzystać, jest specjalna implementacja przez klasę (oraz wszystkie jej elementy składowe) interfejsu Serializable. Specjalność implementacji interfejsu polega na tym, że w najprostszym przypadku deklarujemy jego implementację przez klasę, ale nie musimy implementować jego metod. Tym zajmie się kompilator języka Java. Modelowanie Systemów Informacyjnych (MSI), wykład 7 31

Trwałość ekstensji implementacja z wykorzystaniem serializacji (2) o Deklarujemy implementację interfejsu przez klasę biznesową public class Film implements Serializable { private String tytul; private float cena; private Date datadodania; o Tworzymy metody do zapisu oraz odczytu ekstensji public class Film implements Serializable { public static void zapiszekstensje(objectoutputstream stream) throws IOException { stream.writeobject(ekstensja); public static void odczytajekstensje(objectinputstream stream) throws IOException { ekstensja = (Vector<Film>) stream.readobject(); Modelowanie Systemów Informacyjnych (MSI), wykład 7 32

Trwałość ekstensji implementacja z wykorzystaniem serializacji (3) o Użycie try { // Zapisz ekstensje do strumienia ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(ekstensjaPlik)); Film.zapiszEkstensje(out); // Odczytaj ekstensje ze strumienia ObjectInputStream in = new ObjectInputStream(new FileInputStream(ekstensjaPlik)); Film.odczytajEkstensje(in); catch (FileNotFoundException e) {... o Rozmiar pliku z ekstensją: Ręczna implementacja: 56 bajtów, Serializacja: 354 bajty. Ekstensja klasy Film: Film: Terminator 1, id: mt.mas.film@148aa23 Film: Terminator 2, id: mt.mas.film@199f91c Ekstensja klasy Film: Film: Terminator 1, id: mt.mas.film@92bbba Film: Terminator 2, id: mt.mas.film@162dbb6 Dla większych danych różnice są mniejsze około x2. Modelowanie Systemów Informacyjnych (MSI), wykład 7 33

Zarządzanie ekstensją o Przedstawione sposoby implementacji zarządzania ekstensją będą (prawie) takie same dla każdej biznesowej klasy w systemie. o Czy da się to jakoś zunifikować? Aby nie pisać wiele razy (prawie) tego samego kodu? o Oczywiście wykorzystamy dziedziczenie istniejące w języku Java. Modelowanie Systemów Informacyjnych (MSI), wykład 7 34

Uniwersalne zarządzanie ekstensją o Stworzymy klasę z której będą dziedziczyć wszystkie biznesowe klasy w naszej aplikacji. o Nazwijmy ją ObjectPlus i wyposażmy w: trwałość, zarządzanie ekstensją,? o Zastosujemy pierwsze z omawianych podejść do implementacji ekstensji: w ramach tej samej klasy. Modelowanie Systemów Informacyjnych (MSI), wykład 7 35

Uniwersalna ekstensja o Ponieważ wszystkie biznesowe klasy dziedziczą z jednej nadklasy (ObjectPlus), nie możemy zastosować zwykłego kontenera przechowującego referencje. o Użyjemy kontenera przechowującego klucze i wartości: Kluczem będzie nazwa konkretnej biznesowej klasy, Wartością kontener zawierający referencje do jej wystąpień (właściwa ekstensja). o Innymi słowy, ten nowy kontener będzie zawierał wiele ekstensji, a nie jedną ekstensję. Modelowanie Systemów Informacyjnych (MSI), wykład 7 36

Uniwersalna ekstensja (2) Kontener mapujący Film :Film Komando :Film Terminator 1 :Film Terminator 2 Aktor :Film Terminator 3 :Aktor Arnold Schwarzenegger :Aktor Michael Biehn :Aktor Kristanna Loken Modelowanie Systemów Informacyjnych (MSI), wykład 7 37

Uniwersalna ekstensja (3) o Konstruktor każdej z klasy biznesowych będzie odwoływał się do konstruktora z nadklasy. public class Film2 extends ObjectPlus implements Serializable { private String tytul; private float cena; private Date datadodania; /** * Konstruktor. */ public Film2(String tytul, Date datadodania, float cena) { // Wywołaj konstruktor z nadklasy super(); this.tytul = tytul; this.datadodania= datadodania; this.cena = cena; // Dalsza implementacja czesci biznesowej Modelowanie Systemów Informacyjnych (MSI), wykład 7 38

Uniwersalna ekstensja (4) o Konstruktor z nadklasy zadba o właściwe dodanie do ekstensji. public class ObjectPlus implements Serializable { private static Hashtable ekstensje = new Hashtable(); public ObjectPlus() { Vector ekstensja = null; Class klasa = this.getclass(); if(ekstensje.containskey(klasa)) { // Ekstensja tej klasy istnieje w kolekcji ekstensji ekstensja = (Vector) ekstensje.get(klasa); else { // Ekstensji tej klasy jeszcze nie ma -> dodaj ją ekstensja = new Vector(); ekstensje.put(klasa, ekstensja); ekstensja.add(this); Modelowanie Systemów Informacyjnych (MSI), wykład 7 39

Uniwersalna ekstensja (5) o Utrwalenie takich ekstensji też jest bardzo proste (korzystamy z serializacji). public class ObjectPlus implements Serializable { private static Hashtable ekstensje = new Hashtable(); //... public static void zapiszekstensje(objectoutputstream stream) throws IOException { stream.writeobject(ekstensje); public static void odczytajekstensje(objectinputstream stream) throws IOException { ekstensje = (Hashtable) stream.readobject(); //... Modelowanie Systemów Informacyjnych (MSI), wykład 7 40

Uniwersalne metody klasowe o Część metod klasowych też może korzystać z ogólnej funkcjonalności zgromadzonej w nadklasie, np. wyświetlenie ekstensji. public class ObjectPlus implements Serializable { //... public static void pokazekstensje(class klasa) throws Exception { Vector ekstensja = null; if(ekstensje.containskey(klasa)) { // Ekstensja tej klasy istnieje w kolekcji ekstensji ekstensja = (Vector) ekstensje.get(klasa); else { throw new Exception( Nieznana klasa " + klasa); System.out.println("Ekstensja klasy: " + klasa.getsimplename()); for(object obiekt : ekstensja) { System.out.println(obiekt); //... Modelowanie Systemów Informacyjnych (MSI), wykład 7 41

Uniwersalne metody klasowe (2) o Wyświetlenie ekstensji w klasie biznesowej (korzysta z funkcjonalności zdefiniowanej w nadklasie). public class Film2 extends ObjectPlus implements Serializable { //... public static void pokazekstensje() throws Exception { ObjectPlus.pokazEkstensje(Film2.class); Ekstensja klasy: Film2 Film2: Terminator 1, id: mt.mas.film2@199f91c Film2: Terminator 2, id: mt.mas.film2@1b1aa65 Ekstensja klasy: Film2 Film2: Terminator 1, id: mt.mas.film2@4ac00c Film2: Terminator 2, id: mt.mas.film2@1865b28 Modelowanie Systemów Informacyjnych (MSI), wykład 7 42

Podsumowanie o Część pojęć z obiektowości występuje w popularnych językach programowania. o Niestety, niektóre z nich istnieją w niepełnym zakresie lub nie ma ich w ogóle. o W większości przypadków, nieistniejące konstrukcje można: zaimplementować samodzielnie na sposobów, Obsłużyć korzystając z gotowych bibliotek. kilka, różnych o Całą funkcjonalność związaną z zarządzaniem ekstensją klasy, warto zgromadzić w specjalnej nadklasie. Modelowanie Systemów Informacyjnych (MSI), wykład 7 43