Systemy rozproszone. Dr inż. L. Miękina. Department of Robotics and Mechatronics AGH University of Science and Technology 1/1
|
|
- Robert Michałowski
- 6 lat temu
- Przeglądów:
Transkrypt
1 1/1 Systemy rozproszone Dr inż. L. Miękina Department of Robotics and Mechatronics AGH University of Science and Technology Marzec, 2013
2 RMI - zdalne wywołanie metod Rozproszone obiekty Stan obiektu składa się z wartości jego pól. Zgodnie z paradygmatem obiektowym, stan całego programu jest reprezentowany przez oddzielne części, odpowiadające poszczególnym obiektom. Ponieważ obiektowo zorganizowane programy są w ten sposób logicznie podzielone, fizyczne rozłożenie obiektów pomiędzy różnymi procesami lub komputerami w systemie rozproszonym jest naturalnym rozszerzeniem. Rozproszone systemy obiektowe mogą być oparte na modelu klient-serwer. W tym przypadku obiekty są zarządzane przez serwery i ich klienci wywołują ich metody używając zdalnych wywołań metod. W RMI, żądanie klienta by wywołać metodę obiektu zostaje wysłane jako komunikat do serwera zawierającego obiekt. Wywołanie to jest realizowane przez metodę obiektu serwera, a rezultat jest zwracany do klienta w osobnym komunikacie. Ponieważ obiekty klientów i serwera są w różnych procesach, mamy do czynienia z naturalną enkapsulacją. To znaczy, że stan obiektu może być dostępny tylko za pomocą metod, co oznacza że nie jest możliwe by nieuprawnione metody (zewnętrzne) wpływały na stan. Pozwala to również odpowiednio rozwiązać zagadnienie równoczesnego dostępu, na przykład stosując mechanizmy synchronizacji (semafory, sekcje krytyczne). 2 / 1
3 RMI Rozproszony model obiektowy Obiekty które mogą podlegać zdalnym wywołaniom są nazywane zdalnymi obiektami. Aby umożliwić pracę ze zdalnymi obiektami wprowadzono szereg rozszerzeń modelu obiektowego. Każdy proces zawiera kolekcję obiektów, niektóre z nich mogą odbierać zarówno zdalne jak i lokalne wywołania metod, podczas gdy pozostałe mogą odbierać tylko lokalne wywołania, jak na schemacie poniżej. wywołania metod między obiektami w różnych procesach, na tym samym lub innym komputerze, są zdalne. wywołania metod między obiektami w tym samym procesie są lokalnymi wywołaniami metod. 3 / 1
4 RMI Rozproszony model obiektowy Zdalna referencja obiektu Identyfikator, który może być używany w systemie rozproszonym w celu odwołania się do wybranego unikalnego zdalnego obiektu. Reprezentacja jej jest zwykle różna od lokalnej referencji obiektu. Składa się ona z: adresu IP komputera i numeru portu związanego z procesem, który utworzył obiekt czasu utworzenia lokalnego numeru obiektu i identyfikatora interfejsu (nazwy) Zdalne referencje obiektu są podobne do lokalnych w tym że: aby zdalny obiekt mógł podlegać RMI musi być określony za pomocą zdalnej referencji obiektu zdalne referencje obiektów mogą być przekazane jako argumenty i zwracane jako rezultaty ze zdalnych wywołań metod Zdalny interfejs Interfejs, który deklaruje metody implementowane przez klasę zdalnego obiektu, na przykład jako publiczne metody w języku Java. Obiekty w innych procesach mogą wywoływać tylko te metody, które należą do zdalnego interfejsu, podczas gdy lokalne obiekty mogą wywoływać metody zdalnego interfejsu jak również inne publiczne metody implementowane przez zdalny obiekt. 4 / 1
5 RMI Architektura Zdalne wywołanie metod jest realizowane przez szereg obiektów i modułów. Ilustruje to poniższy schemat, gdzie obiekt A aplikacji klienta wywołuje metodę w zdalnym obiekcie B aplikacji serwera, dla którego posiada zdalną referencję obiektu. Po obu stronach połączenia istnieją: moduł zdalnych referencji i moduł komunikacyjny. RMI działa w oparciu o nie. 5 / 1
6 RMI Architektura - moduł komunikacyjny Oba moduły komunikacyjne realizują protokół request-reply, który transmituje komunikaty request i reply między klientem i serwerem. Struktura komunikatów request i reply jest następująca: Moduł komunikacyjny używa jedynie 3 pierwszych pól, które określają typ komunikatu, jego identyfikator i zdalną referencję obiektu, którego metoda ma być wywołana. Identyfikacja metody i serializacja argumentów spoczywa na oprogramowaniu RMI. Moduł komunikacyjny serwera wybiera dyspozytora klasy obiektu docelowego wywołania, przekazując mu lokalną referencję, która jest udostępniona przez moduł zdalnych referencji w odpowiedzi na zapytanie o zdalny identyfikator obiektu. 6 / 1
7 RMI Architektura - moduł zdalnych referencji Moduł zdalnych referencji (MZR) odpowiada za translację między lokalnymi i zdalnymi referencjami obiektu i za tworzenie zdalnych referencji obiektu. W tym celu MZR w każdym procesie ma tablicę zdalnych obiektów (TZO), która odzwierciedla powiązania między lokalnymi referencjami obiektów tego procesu i zdalnymi referencjami obiektów (które są unikalne w obrębie systemu rozproszonego). Tablica ta posiada: wpisy dla wszystkich zdalnych obiektów udostępnianych przez proces, np. zdalny obiekt B jest zapisany w TZO serwera wpisy dla wszystkich lokalnych pośredników (proxy), np. proxy dla obiektu B jest zapisany w TZO klienta Działanie MZR: kiedy zdalny obiekt ma być przekazany jako argument lub rezultat po raz pierwszy, MZR tworzy zdalną referencję obiektu i dodaje ją do TZO kiedy zdalna referencja obiektu jest odebrana w komunikacie request lub reply, MZR jest pytany o odpowiadającą lokalną referencję obiektu, która może odnosić się albo do proxy albo do zdalnego obiektu. Jeśli zdalna referencja obiektu nie występuje w TZO, tworzy się nowe proxy i MZR zapisuje je do swojej TZO. 7 / 1
8 RMI Warstwa RMI - pośrednik (proxy) Warstwa RMI występuje pomiędzy obiektami aplikacji a modułami komunikacyjnym i zdalnych referencji. Proxy Rola pośrednika polega na tym, by uczynić zdalne wywołanie metod przeźroczystym dla klienta, poprzez stworzenie wrażenia, że proxy jest lokalnym obiektem, choć w praktyce zamiast wywołać metodę tego obiektu, pośrednik przekazuje to wywołanie w komunikacie do zdalnego obiektu. Pośrednik ukrywa szczegóły zdalnej referencji obiektu, serializacji argumentów i de-serializacji rezultatów, a także wysyłania i odbioru komunikatów. Dla każdego zdalnego obiektu, dla którego proces posiada zdalną referencję istnieje oddzielny pośrednik. Klasa pośrednika implementuje metody zadeklarowane w zdalnym interfejsie zdalnego obiektu, który reprezentuje. To gwarantuje, że zdalne wywołania metod są odpowiednie do typu zdalnego obiektu. Jednakże pośrednik implementuje metody całkiem inaczej - każda metoda pośrednika serializuje referencję do obiektu docelowego, swój własny identyfikator i argumenty wywołania, a następnie wysyła je do obiektu docelowego, czeka na komunikat zwrotny (reply), deserializuje go i zwraca rezultat do metody wywołującej. 8 / 1
9 RMI Warstwa RMI - dyspozytor (dispatcher) i szkielet (skeleton) Dyspozytor Serwer posiada po jednym dyspozytorze i szkielecie dla każdej klasy reprezentujacej zdalny obiekt, w naszym przykładzie serwer ma dyspozytora i szkielet dla klasy zdalnego obiektu B. Dyspozytor odbiera komunikat request z modułu komunikacyjnego. Na podstawie pola methodid wybiera odpowiednią metodę szkieletu, przekazując jej komunikat request. Dyspozytor i pośrednik używają tych samych identyfikatorów methodid do metod zdalnego interfejsu. Szkielet Klasa zdalnego obiektu posiada szkielet, który implementuje metody zadeklarowane w zdalnym interfejsie. Są one zaimplementowane całkiem inaczej niż metody zdalnego obiektu. Metoda szkieletu de-serializuje argumenty komunikatu request i wywołuje odpowiednią metodę zdalnego obiektu. Następnie czeka na zrealizowanie wywołania i serializuje jego rezultat, razem z ewentualnymi wyjątkami, w komunikat reply do metody pośrednika, który inicjował wywołanie. 9 / 1
10 RMI Generowanie klas pośredników, dyspozytorów i szkieletów Klasy pośredników, dyspozytorów i szkieletów są generowane automatycznie przez kompilator interfejsu (interface compiler). Dla Java RMI, metody zdalnego obiektu są deklarowane jako interfejsy języka Java i są implementowane przez klasę zdalnego obiektu. Kompilator interfejsu języka Java RMI rmic generuje klasy namiastek (stub) w oparciu o klasę zdalnego obiektu. Dla implementacji standardu CORBA nazywanej Orbix, interfejsy zdalnych obiektów są definiowane w języku CORBA IDL, a następnie używa się kompilatora interfejsu do generowania klas pośredników, dyspozytorów i szkieletów w C++ lub innych językach. Obiekty CORBA są opisane za pomocą interfejsów wyrażonych w języku Interface Definition Language (IDL), zaprojektowanym przez OMG do definiowania interfejsu obiektów. Interfejs obiektu określa operacje które obiekt realizuje, ale nie określa sposobu implementacji. Implementacja obiektu CORBA jest domeną wybranego języka programowania, np. Java lub C++. Interfejs określa kontrakt wiążący kod użytkownika obiektu i kod implementujący obiekt. Interfejsy IDL są niezależne od języka programowania. IDL definiuje powiązania z wieloma językami programowania (C, C++, Java, Ada, COBOL, Smalltalk, Objective C i Lisp). Pozwala to wybrać dla implementacji obiektów najbardziej odpowiedni język, jak również nie ogranicza programistów klienta co do wyboru identycznego języka jaki użyto dla obiektu. 10 / 1
11 RMI Programy serwera i klientów Program serwera zawiera klasy dyspozytorów i szkieletów, razem z implementacjami klas wszystkich zdalnych obiektów, które udostępnia serwer. Dodatkowo program serwera zawiera sekcję inicjalizacji, zwykle w funkcji main kodu Java lub C++. Sekcja inicjalizacji odpowiada za tworzenie i inicjalizację co najmniej jednego zdalnego obiektu, spośród obiektów serwera; dodatkowe zdalne obiekty mogą być tworzone w odpowiedzi na żądania klientów. Sekcja inicjalizacji może ponadto rejestrować niektóre zdalne obiekty w tzw. binderze. Generalnie rejestrowany będzie tylko jeden zdalny obiekt, przez który realizowany jest dostęp do pozostałych. Program klienta zawiera klasy pośredników dla wszystkich zdalnych obiektów, które będzie wywoływać. Klient może używać bindera do wyszukiwania zdalnych referencji obiektów. Binder w systemie rozproszonym jest oddzielną usługą, która zarządza tablicą zawierającą odwzorowania nazw (tekstowych) na zdalne referencje obiektów. Usługi tej używają serwery do rejestrowania swoich zdalnych obiektów pod odpowiednimi nazwami, a klienci do wyszukiwania obiektów za pomocą nazw. Przykłady usług typu binder: Java RMIregistry i CORBA Naming Service 11 / 1
12 Java API dla RMI Pierwsza wersja Java RMI używała wszystkich klas pokazanych na diagramie architektury. Począwszy od Javy w wersji 1.2 zastosowano mechanizm refleksji do implementacji uniwersalnego dyspozytora i eliminacji szkieletów klas usługowych. Klasy pośredników klienta (proxy) są generowane przez kompilator rmic na podstawie skompilowanych klas usługowych (servant), a nie na podstawie definicji zdalnego interfejsu. Rys. powyżej pokazuje strukturę dziedziczenia klas obsługujących serwery Java RMI. Jedyną klasą istotną dla programisty jest UnicastRemoteObject, z której musi dziedziczyć każda klasa usługowa (servant). Klasa UnicastRemoteObject dziedziczy z abstrakcyjnej klasy RemoteServer, która deklaruje abstrakcyjne wersje metod wymaganych przez zdalne serwery. Inną podklasą RemoteServer jest Activatable, która dostarcza możliwości automatycznej aktywacji obiektu serwera, kiedy zajdzie taka potrzeba. 12 / 1
13 Użycie mechanizmu refleksji Refleksja jest używana do przekazywania w komunikacie request informacji o wywoływanej metodzie. Odbywa się to za pomocą klasy Method pakietu reflection. Każda instancja klasy Method reprezentuje charakterystykę konkretnej metody (jej klasę, typy argumentów, zwracanej wartości i wyjątków). UWAGA: instancja klasy Method może być uruchomiona dla obiektu odpowiedniej klasy za pomocą jej metody invoke. Metoda invoke wymaga dwu argumentów: pierwszy specyfikuje wywoływany obiekt drugi jest tablicą elementów typu Object, zawierającą argumenty Rezultat jest zwracany jako typ Object. Kolejność operacji: Pośrednik (proxy) szereguje informacje dot. metody i jej argumentów w komunikat request. Dane metody szereguje się w postaci obiektu klasy Method. Następnie pakuje się argumenty w tablicy elementów typu Object i szereguje się tę tablicę. Dyspozytor de-szereguje obiekt klasy Method i argumenty z tablicy elementów typu Object z komunikatu request. Jak zwykle, zdalna referencja obiektu docelowego jest de-szeregowana i odpowiednia lokalna referencja obiektu jest odczytana z modułu zdalnych referencji. Dyspozytor wywołuje metodę invoke obiektu klasy Method, z parametrami oznaczającymi obiekt docelowy i tablicę wartości argumentów. 13 / 1
14 Przekazywanie parametrów i rezultatu Dowolny serializowalny obiekt - tzn. taki który implementuje interfejs Serializable - może być przekazany jako argument lub rezultat. Wszystkie typy proste i zdalne obiekty są serializowalne. Klasy argumentów i rezultatu są ładowane w razie potrzeby do odbiorcy przez system RMI. Parametry i rezultaty mogą być przekazywane na dwa sposoby: Przez referencję. Jeśli typ parametru lub rezultatu jest definiowany jako zdalny interfejs, odpowiedni argument lub rezultat jest zawsze przekazywany jako zdalna referencja obiektu. Np., w 3 przykładzie RMI, metoda newshape zwraca rezultat typu Shape - czyli zdalny interfejs. Kiedy zdalna referencja obiektu jest odebrana, może być ona użyta w wywołaniu RMI zdalnego obiektu, do którego się odnosi. Przez wartość. Wszystkie serializowalne nie-zdalne obiekty są kopiowane i przekazywane przez wartość. Np., w 2 przykładzie RMI, argument metody add i rezultat metody get są typu Event, (który jest serializowalny) i są przekazywane przez wartość. Gdy obiekt jest przekazywany przez wartość, nowy obiekt jest tworzony w procesie odbiorcy. Metody tego nowego obiektu mogą być wywoływane lokalnie, powodując zmianę stanu w stosunku do oryginalnego obiektu w procesie nadawcy. Argumenty i zwracane wartości są serializowane do strumienia z użyciem następujących reguł: gdy serializowany jest obiekt który implementuje interfejs Remote, jest on zastępowany przez zdalną referencję obiektu, która zawiera nazwę klasy obiektu. gdy serializowany jest dowolny obiekt, informacja o jego klasie jest uzupełniona o lokalizację klasy (URL), co umożliwia ładowanie klasy do procesu odbiorcy. 14 / 1
15 Bezpieczeństwo Począwszy od wersji 1.2 języka Java istnieje możliwość definiowania przez użytkownika zabezpieczeń maszyny wirtualnej Java. Zabezpieczenia te mogą obejmować: definiowanie akceptowanych połączeń sieciowych (adresów IP, numerów portów) uprawnień do odczytu lub zapisu plików przez zewnętrzne aplikacje uprawnień do ładowania kodu z innych maszyn wirtualnych Java. Ostatni przypadek jest szczególnie ważny, gdyż przekazanie obiektu typu Serializable przez wartość powoduje załadowanie jego kodu i możliwość (a czasem ryzyko) wykonywania jego metod. W przypadku ładowania kodu z zewnątrz maszyna wirtualna Java wręcz wymaga, aby twórca aplikacji zdefiniował i wdrożył zasady bezpieczeństwa. Jeśli nie zostanie to zrobione, wykonanie programu zakończy następujący wyjątek: java.security.accesscontrolexception: access denied \ (java.net.socketpermission :1099 connect,resolve) Definicja polityki bezpieczeństwa powinna się znaleźć w pliku o nazwie java.policy. Taki plik znajduje się zazwyczaj w podkatalogu jre/lib/security katalogu instalacji środowiska Java, ale najczęściej nie jest używany do uruchamiania aplikacji, gdyż zawiera tylko zbiór domyślnych reguł. 15 / 1
16 Bezpieczeństwo Zazwyczaj twórca aplikacji definiuje własny plik java.policy, którego następnie używa przy uruchamianiu aplikacji. Najprostsza możliwa zawartość pliku java.policy, nie zabezpieczająca maszyny wirtualnej w żaden sposób, jest następująca: 1 grant { 2 // Pelne uprawnienia dla wszystkich ladowanych zdalnie klas 3 permission java. security. AllPermission ; 4 }; Za odczytanie i realizowanie w programie Java zdefiniowanych wcześniej zasad bezpieczeństwa odpowiadają klasy tzw. zarządców bezpieczeństwa: ogólna SecurityManager specjalizowana (dla RMI) RMISecurityManager. Zarządca bezpieczeństwa powinien zostać utworzony na samym początku funkcji main, na przykład w następujący sposób: 3 public static void main ( String args []){ 4 if ( System. getsecuritymanager () == null ) 5 System. setsecuritymanager ( new RMISecurityManager ()); 16 / 1
17 Przykład - wymagania funkcjonalne Przykład dotyczy aplikacji prostego monitora komunikatów, który odbiera komunikaty tekstowe od klientów i wyświetla je na ekranie serwera. Funkcjonalność: Serwer obsługuje listę odebranych komunikatów, dostarczając klientom operacji do przesyłania komunikatów tekstowych. Każdy odebrany komunikat jest wyświetlany przez serwer. 17 / 1
18 Przykład - zdalny interfejs Zdalne interfejsy są definiowane przez dziedziczenie z interfejsu Remote dostępnego w pakiecie java.rmi. Metody interfejsu muszą generować wyjątek RemoteException, a poza tym dowolne wyjątki specyficzne dla aplikacji. Przykład zdalnego interfejsu: 1 import java. rmi.*; 2 3 public interface MonitorInterface extends Remote { 4 void komunikuj ( String message ) throws RemoteException ; 5 boolean zarejestruj ( String nick ) throws RemoteException ; 6 } Ten zdalny interfejs deklaruje tylko dwie metody (komunikuj i zarejestruj), które posiadają jeden parametr typu String, przez który przekazywany jest łańcuch reprezentujący komunikat i nazwę użytkownika. 18 / 1
19 Przykład - kod serwera Kod serwera składa się z klas MonitorServer i MonitorServant. MonitorServer jest klasą główną i składa się z dwu pól i dwu metod. Pola są obiektami klas: Registry, który reprezentuje rmiregistry MonitorServant, który reprezentuje klasę usługową (servant). Metoda main serwera tworzy instancję klasy MonitorServer. Jeśli wystąpi jakikolwiek wyjątek, wyświetlany jest stos wywołań i kończy się działanie serwera. 1 import java.rmi. RemoteException ; 2 import java.rmi. registry. LocateRegistry ; 3 import java.rmi. registry. Registry ; 4 import java.rmi. server. UnicastRemoteObject ; 5 6 public class MonitorServer { 7 Registry reg ; /* rejestr nazw obiektow */ 8 MonitorServant servant ; 9 10 public static void main ( String [] args ) { 11 try { 12 MonitorServer s = new MonitorServer (); 13 } catch ( Exception e) { 14 e. printstacktrace (); System.exit (1); 15 } 16 } 19 / 1
20 Przykład - kod serwera Chroniony konstruktor klasy MonitorServer najpierw tworzy zdalny obiekt rejestru, pracujący na wybranym porcie. Następnie tworzy instancję klasy MonitorServant i wiąże ją z pewną nazwą w rejestrze RMIregistry. Wartość reprezentująca to powiązanie jest zdalną referencją obiektu, a jej typ jest typem jego zdalnego interfejsu - MonitorInterface. 18 protected MonitorServer () throws RemoteException { 19 try { 20 /* Utworzenie rejestru nazw */ 21 reg = LocateRegistry. createregistry (1099); 22 /* utworzenie obiektu dostepnego zdalnie */ 23 servant = new MonitorServant (); 24 /* zwiazanie z obiektem nazwy */ 25 reg. rebind (" MonitorServer ", servant ); 26 System.out. println (" Server READY "); 27 } catch ( RemoteException e) { 28 e. printstacktrace (); throw e; 29 } 30 } 31 } 20 / 1
21 Przykład - kod klasy usługowej MonitorServant 1 import java.rmi. RemoteException ; 2 import java.rmi. registry. LocateRegistry ; 3 import java.rmi. registry. Registry ; 4 import java.rmi. server. UnicastRemoteObject ; 5 6 public class MonitorServant 7 extends UnicastRemoteObject 8 implements MonitorInterface { 9 10 public MonitorServant () throws RemoteException { 11 } // Metoda implementujaca funkcje komunikuj () interfejsu MonitorInterface 14 public void komunikuj ( String message ) throws RemoteException { 15 System.out. println (" Server. komunikuj () " + message ); 16 } 17 // Metoda implementujaca funkcje zarejestruj () interfejsu MonitorInterface 18 public boolean zarejestruj ( String nick ) throws RemoteException { 19 System.out. println (" Server. zarejestruj () " + nick ); 20 return true ; 21 } 22 } 21 / 1
22 Przykład - kod klasy klienta MonitorClient 1 import java.rmi. NotBoundException ; 2 import java.rmi. RemoteException ; 3 import java.rmi. registry. LocateRegistry ; 4 import java.rmi. registry. Registry ; 5 6 public class MonitorClient { 7 public static void main ( String [] args ) { 8 if (args. length < 2) { 9 System.out. println (" Usage : MonitorClient <server host name > <msg >"); 10 System.exit ( -1); 11 } 12 MonitorInterface remoteobject ; // referencja do zdalnego obiektu 13 Registry reg ; // rejestr nazw obiektow 14 try { 15 // pobranie referencji do rejestru nazw obiektow 16 reg = LocateRegistry. getregistry (args [0]); 17 // odszukanie zdalnego obiektu po jego nazwie 18 remoteobject = ( MonitorInterface ) reg. lookup (" MonitorServer "); 19 // wywolanie metody zdalnego obiektu 20 remoteobject. komunikuj (args [1]); 21 remoteobject. zarejestruj ("Luc "); 22 } 23 catch ( RemoteException e) { 24 e. printstacktrace (); 25 } 26 catch ( NotBoundException e) { 27 e. printstacktrace (); 28 } 29 } 30 } 22 / 1
23 Przykład - kompilacja i uruchomienie W celu kompilacji i uruchomienia rozproszonej aplikacji należy wykonać: 1 Kompilacja klasy serwera lm@lm-mint ~ $ javac MonitorServer.java 2 Kompilacja klasy klienta lm@lm-mint ~ $ javac MonitorClient.java 3 Generowanie namiastki zdalnego obiektu, w wyniku czego powstaje bajtkod zawarty w pliku MonitorServant_Stub.class lm@lm-mint ~ $ rmic MonitorServant 4 Uruchomienie serwera lm@lm-mint ~ $ java MonitorServer & Server READY 5 Uruchomienie klienta, aby umieścić na serwerze nowy komunikat lm@lm-mint ~ $ java MonitorClient localhost s1 Server.komunikuj() s1 Server.zarejestruj() Luc 23 / 1
24 Przykład 2 - rozbudowany monitor Przykład dotyczy aplikacji nieco rozbudowanego monitora komunikatów, który odbiera komunikaty tekstowe od klientów i wyświetla je na ekranie serwera, a ponadto umożliwia przeglądanie przez klientów zarejestrowanych komunikatów. Funkcjonalność: Serwer obsługuje listę odebranych komunikatów, dostarczając klientom operacji do przesyłania komunikatów tekstowych. Każdy odebrany komunikat jest wyświetlany i rejestrowany wraz z datą przez serwer. Serwer ponadto udostępnia operacje umożliwiające klientom odczyt ilości komunikatów, wybranego komunikatu i całej ich listy. 24 / 1
25 Przykład 2 - zdalny interfejs Zdalne interfejsy są definiowane przez dziedziczenie z interfejsu Remote dostępnego w pakiecie java.rmi. Metody interfejsu muszą generować wyjątek RemoteException, a poza tym dowolne wyjątki specyficzne dla aplikacji. Przykład zdalnego interfejsu: 1 import java. rmi.*; 2 import java.util. Vector ; 3 4 public interface MonitorInterface extends Remote { 5 void Inform ( String message ) throws RemoteException ; 6 Event get ( int i) throws RemoteException ; 7 void add ( Event event ) throws RemoteException ; 8 int getcount () throws RemoteException ; 9 Vector <Event > allevents () throws RemoteException ; 10 } Zdalny interfejs deklaruje następujące metody: inform, która posiada jeden parametr o nazwie message, przez który przekazywany jest łańcuch reprezentujący komunikat. get do odczytu komunikatu zapisanego pod wybranym indeksem add do rejestracji nowego komunikatu przez serwer getcount do odczytu ilości zarejestrowanych komunikatów allevents do odczytu wszystkich zarejestrowanych komunikatów 25 / 1
26 Przykład 2 - kod serwera Kod serwera składa się z klas MonitorServer i MonitorServant. MonitorServer jest klasą główną i składa się z dwu pól i dwu metod. Pola są instancjami klas: Registry, który reprezentuje rmiregistry MonitorServant, który reprezentuje klasę usługową (servant). Metoda main serwera tworzy instancję klasy MonitorServer. Jeśli wystąpi jakikolwiek wyjątek, wyświetlany jest stos wywołań i kończy się działanie serwera. 1 import java.rmi. RemoteException ; 2 import java.rmi. registry. LocateRegistry ; 3 import java.rmi. registry. Registry ; 4 import java.rmi. server. UnicastRemoteObject ; 5 6 public class MonitorServer { 7 Registry reg ; /* rejestr nazw obiektow */ 8 MonitorServant servant ; 9 10 public static void main ( String [] args ) { 11 try { 12 MonitorServer s = new MonitorServer (); 13 } catch ( Exception e) { 14 e. printstacktrace (); System.exit (1); 15 } 16 } 26 / 1
27 Przykład 2 - kod serwera Chroniony konstruktor klasy MonitorServer najpierw tworzy zdalny obiekt rejestru, pracujący na wybranym porcie. Nastepnie tworzy instancję klasy MonitorServant i wiąże ją z pewną nazwą w rejestrze RMIregistry. Wartość reprezentująca to powiązanie jest zdalną referencją obiektu, a jej typ jest typem jego zdalnego interfejsu - MonitorInterface. 18 protected MonitorServer () throws RemoteException { 19 try { 20 /* Utworzenie rejestru nazw */ 21 reg = LocateRegistry. createregistry (1099); 22 /* utworzenie obiektu dostepnego zdalnie */ 23 servant = new MonitorServant (); 24 /* zwiazanie z obiektem nazwy */ 25 reg. rebind (" MonitorServer ", servant ); 26 System.out. println (" Server v2 READY "); 27 } catch ( RemoteException e) { 28 e. printstacktrace (); throw e; 29 } 30 } 31 } 27 / 1
28 Przykład 2 - kod klasy usługowej MonitorInterface 1 import java.rmi. RemoteException ; 2 import java.rmi. registry. LocateRegistry ; 3 import java.rmi. registry. Registry ; 4 import java.rmi. server. UnicastRemoteObject ; 5 import java.util. Vector ; 6 7 public class MonitorServant extends UnicastRemoteObject implements 8 MonitorInterface { 9 10 private Vector <Event > events ; public MonitorServant () throws RemoteException { 13 events = new Vector <Event >(); 14 } // Metoda implementujaca funkcje Inform () interfejsu MonitorInterface 17 public void Inform ( String message ) throws RemoteException { 18 events.add ( new Event ( message )); 19 System.out. println (" Server : " + message ); 20 } public Event get ( int i) throws RemoteException { 23 if (i < 0 i >= events. size ()) 24 return null ; 25 return events. get (i); 26 } 28 / 1
29 Przykład 2 - kod klasy usługowej MonitorInterface 28 public void add ( Event event ) throws RemoteException { 29 events.add ( event ); 30 } public int getcount () throws RemoteException { 33 return events. size (); 34 } public Vector <Event > allevents () throws RemoteException { 37 return events ; 38 } } 29 / 1
30 Przykład - kod klasy klienta MonitorClient 1 import java.rmi. NotBoundException ; 2 import java.rmi. RemoteException ; 3 import java.rmi. registry. LocateRegistry ; 4 import java.rmi. registry. Registry ; 5 import java.util. Vector ; 6 7 public class MonitorClient { 8 9 public static void main ( String [] args ) { 10 if (args. length < 2) { 11 System.out. println (" Usage : MonitorClient <server host name > <msg >"); 12 System.exit ( -1); 13 } 14 MonitorInterface remoteobject ; // referencja do zdalnego obiektu 15 Registry reg ; // rejestr nazw obiektow 16 try { 17 // pobranie referencji do rejestru nazw obiektow 18 reg = LocateRegistry. getregistry (args [0]); 19 // odszukanie zdalnego obiektu po jego nazwie 20 remoteobject = ( MonitorInterface ) reg. lookup (" MonitorServer "); 21 // wywolanie metody zdalnego obiektu 22 remoteobject. Inform (args [1]); 23 remoteobject.add ( new Event (" Event sent from client " )); 24 int cnt = remoteobject. getcount (); 25 System.out. println (" There are " + cnt + " registered events :"); 26 Vector <Event > e = remoteobject. allevents (); 27 for ( Event ev : e) 28 ev. print (); 29 Event back = remoteobject. get (0); 30 back. print (); 31 } catch ( RemoteException e) { 32 e. printstacktrace (); 33 } catch ( NotBoundException e) { 30 / 1
31 Przykład 2 - kompilacja i uruchomienie W celu kompilacji i uruchomienia rozproszonej aplikacji należy wykonać: 1 Kompilacja klasy serwera lm@lm-mint ~$ javac MonitorServer.java 2 Kompilacja klasy klienta lm@lm-mint ~$ javac MonitorClient.java 3 Generowanie namiastki zdalnego obiektu, w wyniku czego powstaje bajtkod zawarty w pliku MonitorServant_Stub.class. lm@lm-mint ~$ rmic MonitorServant 4 Uruchomienie serwera lm@lm-mint ~$ java MonitorServer & Server v2 READY 5 Uruchomienie klienta aby umieścić na serwerze nowe komunikaty lm@lm-mint ~$ java MonitorClient localhost s1 Server: s1 There are 1 registered events: Mon May 02 23:16:34 CEST 2011: s1 lm@lm-mint ~$ java MonitorClient localhost s2 Server: s2 There are 2 registered events: Mon May 02 23:16:34 CEST 2011: s1 Mon May 02 23:16:51 CEST 2011: s2 31 / 1
Wywoływanie metod zdalnych
Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia
Bardziej szczegółowoPodejście obiektowe do budowy systemów rozproszonych
Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak 1 Mechanizm RMI umożliwia
Bardziej szczegółowoJava RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć
Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów
Bardziej szczegółowoWywoływanie metod zdalnych
Wywoływanie metod zdalnych Podejście obiektowe do budowy systemów rozproszonych Wywoływanie metod zdalnych model systemu obiekt aplikacja kliencka interfejs serwer proxy szkielet sieć Istota podejścia
Bardziej szczegółowoAplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html
Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów
Bardziej szczegółowoJava RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć
interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka stub interfejs serwer szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów
Bardziej szczegółowoZdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu
Zdalne wywołanie metod - koncepcja Oprogramowanie systemów równoległych i rozproszonych Wykład 7 RMI (Remote Method Invocation) - obiektowe RPC, dostarcza klientowi interfejs do obiektu, implementacja
Bardziej szczegółowoRemote Method Invocation 17 listopada 2010
Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja klienckak interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów
Bardziej szczegółowoOprogramowanie systemów równoległych i rozproszonych Wykład 7
Wykład 7 p. 1/2 Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Zdalne wywołanie
Bardziej szczegółowoPodejście obiektowe do budowy systemów rozproszonych
Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak (IIPP) 1 Mechanizm
Bardziej szczegółowoRemote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1
interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów
Bardziej szczegółowoRemote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1
P d jś i bi kt d b d t ó Podejście obiektowe do budowy systemów rozproszonych Dariusz Wawrzyniak (IIPP) 1 interfejs (w języku Java),wywiedziony idi z Remote obie kt aplikacja klie ncka interfe js serw
Bardziej szczegółowoObiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1
Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,
Bardziej szczegółowoProgramowanie rozproszone w języku Java
Wstęp Gniazda RMI Podsumowanie Programowanie rozproszone w języku Java Wojciech Rząsa wrzasa@prz-rzeszow.pl Katedra Informatyki i Automatyki, Politechnika Rzeszowska 25 maja 2015 Wojciech Rząsa, KIiA PRz
Bardziej szczegółowoSystemy Rozproszone - Ćwiczenie 6
Systemy Rozproszone - Ćwiczenie 6 1 Obiekty zdalne Celem ćwiczenia jest stworzenie obiektu zdalnego świadczącego prostą usługę nazewniczą. Nazwy i odpowiadające im punkty końcowe będą przechowywane przez
Bardziej szczegółowoProgramowanie współbieżne i rozproszone
Programowanie współbieżne i rozproszone WYKŁAD 11 dr inż. CORBA CORBA (Common Object Request Broker Architecture) standard programowania rozproszonego zaproponowany przez OMG (Object Management Group)
Bardziej szczegółowoAplikacje RMI Lab4
Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Lab4 Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych 1 1. Koncepcja budowy aplikacji RMI (aplikacja rozproszonych
Bardziej szczegółowosieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.
RMI (Remote Method Invocation) zdalne wywołanie metod Część 1 1) RMI jest mechanizmem, który pozwala danej aplikacji: wywoływać metody obiektów zdalnych oraz uzyskać dostęp do obiektów zdalnych (np. w
Bardziej szczegółowoRMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE
Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems www.cs.agh.edu.pl/~slawek/zrodla_rmi2.zip Kilka pytań Co mamy? rok 2005-ty, gotową wersję 2 programu NoteBoard.
Bardziej szczegółowoInterfejsy w Javie. Przykład zastosowania interfejsów:
1 Plan wykładu 1. Interfejsy w Javie. 2. Zdalne wywołanie metod (Remote Method Invocation). interfejsy w RMI, architektura RMI, przykładowa aplikacja korzystająca z RMI, przekazywanie parametrów, dystrybucja
Bardziej szczegółowoAplikacje RMI. Budowa aplikacji rozproszonych. Część 2.
Aplikacje RMI Część 2 Budowa aplikacji rozproszonych http://java.sun.com/j2se/1.5.0/docs/guide/rmi/socketfactory/index.html I. Implementacja gniazd dziedziczących po Socket i ServerSocket oraz produkcji
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami
Bardziej szczegółowoPlan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone
Plan wykładu CORBA Wprowadzenie Architektura CORBA IDL język definicji interfejsów ORB Object Request Broker Usługi i POA Aplikacje CORBA tworzenie serwera tworzenie klienta Aplikacje rozproszone Cechy
Bardziej szczegółowoProgramowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków
Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................
Bardziej szczegółowoTworzenie i wykorzystanie usług
Strona 1 Co to jest usługa w systemie Android? Usługi HTTP Obsługa wywołania HTTP GET Obsługa wywołania HTTP POST Obsługa wieloczęściowego wywołania HTTP POST Usługi lokalne Usługi zdalne Tworzenie usługi
Bardziej szczegółowoTworzenie aplikacji rozproszonej w Sun RPC
Tworzenie aplikacji rozproszonej w Sun RPC Budowa aplikacji realizowana jest w następujących krokach: Tworzenie interfejsu serwera w języku opisu interfejsu RPCGEN Tworzenie: namiastki serwera namiastki
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do
Bardziej szczegółowo76.Struktura oprogramowania rozproszonego.
76.Struktura oprogramowania rozproszonego. NajwaŜniejsze aspekty obiektowego programowania rozproszonego to: Współdziałanie (interoperability) modułów programowych na róŝnych maszynach. Wielokrotne wykorzystanie
Bardziej szczegółowoKatedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej
Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej dr inż. Paweł Czarnul pczarnul@eti.pg.gda.pl Architektury usług internetowych laboratorium
Bardziej szczegółowoRozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury
Rozproszone systemy internetowe Wprowadzenie. Koncepcja zdalnego wywołania procedury Zakres tematyczny przedmiotu Aplikacje rozproszone Technologie /standardy internetowe Programowanie obiektowe 2 Co będzie
Bardziej szczegółowoTworzenia aplikacji rozproszonej RMI
Tworzenia aplikacji rozproszonej RMI Mówiąc o aplikacjach RMI wyróżnia się w nich dwa typy obiektów: obiekty wywołujące metody zdalne (klienci) obiekty udostępniające metody zdalne (serwery) RMI dostarcza
Bardziej szczegółowoKurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016
Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć
Bardziej szczegółowoWątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego
Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować
Bardziej szczegółowoDokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
Bardziej szczegółowoJęzyk JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język
Bardziej szczegółowoWielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.
Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowoJAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Bardziej szczegółowoJava programowanie w sieci. java.net RMI
Java programowanie w sieci java.net RMI Programowanie sieciowe OSI WARSTWA APLIKACJI (7) WARSTWA PREZENTACJI(6) WARSTWA SESJI (5) WARSTWA TRANSPORTU (4) DoD Warstwa aplikacji (HTTP) Transport (gniazdka)
Bardziej szczegółowoWprowadzenie. Dariusz Wawrzyniak 1
Dariusz Wawrzyniak Politechnika Poznańska Instytut Informatyki ul. Piotrowo 2 (CW, pok. 5) 60-965 Poznań Dariusz.Wawrzyniak@cs.put.poznan.pl Dariusz.Wawrzyniak@put.edu.pl www.cs.put.poznan.pl/dwawrzyniak
Bardziej szczegółowoKurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019
Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości
Bardziej szczegółowoAplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java
Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment
Bardziej szczegółowoMultimedia JAVA. Historia
Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania
Bardziej szczegółowoWspółbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Bardziej szczegółowoDiagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com
Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegółowoKurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i
Bardziej szczegółowoNarzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl
Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z
Bardziej szczegółowoEnkapsulacja, dziedziczenie, polimorfizm
17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja
Bardziej szczegółowoProxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.
Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły
Bardziej szczegółowoProgramowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz
Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania
Bardziej szczegółowoJęzyk JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 4, część 1 1 Język JAVA podstawy Plan wykładu: 1. Podstawy modelowania obiektowego 2. Konstruktory 3. Dziedziczenie, związki pomiędzy klasami, UML 4. Polimorfizm 5. Klasy abstrakcyjne
Bardziej szczegółowoPlan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych
Plan prezentacji Budowa aplikacji w technologii Enterprise JavaBeans Przegląd architektur aplikacji rozproszonych: CORBA,, Wprowadzenie do Enterprise JavaBeans () Budowa komponentów sesyjnych Budowa komponentów
Bardziej szczegółowoPlatformy Programistyczne Zagadnienia sieciowe i wątki
Platformy Programistyczne Zagadnienia sieciowe i wątki Agata Migalska 27/28 maja 2014 Komunikacja sieciowa 1 Komunikacja sieciowa 2 Wiele wątków 3 Serializacja Architektura typu klient-serwer Architektura
Bardziej szczegółowoPakiety i interfejsy. Tomasz Borzyszkowski
Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Bardziej szczegółowoWzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski
Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół
Bardziej szczegółowoProgramowanie obiektowe zastosowanie języka Java SE
Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z
Bardziej szczegółowoAplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium
Bardziej szczegółowoKlasy abstrakcyjne i interfejsy
Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie
Bardziej szczegółowo1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Bardziej szczegółowoKurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 13 Marcin Młotkowski 27 maja 2015 Plan wykładu Trwałość obiektów 1 Trwałość obiektów 2 Marcin Młotkowski Programowanie obiektowe 2 / 29 Trwałość (persistence) Definicja Cecha
Bardziej szczegółowoDokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV
Piotr Jarosik, Kamil Jaworski, Dominik Olędzki, Anna Stępień Dokumentacja wstępna TIN Rozproszone repozytorium oparte o WebDAV 1. Wstęp Celem projektu jest zaimplementowanie rozproszonego repozytorium
Bardziej szczegółowoWprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o
Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie 1 czerwca 2009 Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie = bjects = database for objects w pełni obiektowa
Bardziej szczegółowoZad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?
Zad.28. Utwórz klasę, która implementuje oba interfejsy: public void pisz ( ) ; public void pisz ( ) ; Zad.29. Utwórz klasę, która implementuje oba interfejsy: public void pisz ( int l i c z b a ) ; public
Bardziej szczegółowoRPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )
III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego
Bardziej szczegółowoObszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),
Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których
Bardziej szczegółowoDziedziczenie. Tomasz Borzyszkowski
Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.
Bardziej szczegółowoJAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Bardziej szczegółowoProgramowanie w Internecie. Java
Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java
Bardziej szczegółowoWykład 7: Pakiety i Interfejsy
Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,
Bardziej szczegółowoWyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.
Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,
Bardziej szczegółowoProgramowanie obiektowe - 1.
Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która
Bardziej szczegółowoWprowadzenie do technologii Web Services: SOAP, WSDL i UDDI
Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI Maciej Zakrzewicz PLOUG mzakrz@cs.put.poznan.pl Plan prezentacji Wprowadzenie do architektury zorientowanej na usługi Charakterystyka technologii
Bardziej szczegółowoKlasy cd. Struktury Interfejsy Wyjątki
Klasy cd. Struktury Interfejsy Wyjątki Struktury Struktura pozwala na zdefiniowanie typu danych, który nie charakteryzuje się zbyt złożoną funkcjonalnością (np. punkt, kolor, etc). Do definiowania struktury
Bardziej szczegółowoKonstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Bardziej szczegółowoJava. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Bardziej szczegółowoUML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.
UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami
Bardziej szczegółowoKLASY, INTERFEJSY, ITP
KLASY, INTERFEJSY, ITP ZAGADNIENIA: Klasy, modyfkatory dostępu, pakiety. Zmienne i metody statyczne. Klasy abstrakcyjne, dziedziczenie. Interfejsy. Komentarze i javadoc, http://th-www.if.uj.edu.pl/zfs/ciesla/
Bardziej szczegółowo1 Wprowadzenie do J2EE
Wprowadzenie do J2EE 1 Plan prezentacji 2 Wprowadzenie do Java 2 Enterprise Edition Aplikacje J2EE Serwer aplikacji J2EE Główne cele V Szkoły PLOUG - nowe podejścia do konstrukcji aplikacji J2EE Java 2
Bardziej szczegółowoBudowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG
Budowa aplikacji w technologii Enterprise JavaBeans Maciej Zakrzewicz PLOUG Plan prezentacji Przegląd architektur aplikacji rozproszonych: CORBA, SOAP, EJB Wprowadzenie do Enterprise JavaBeans (EJB) Budowa
Bardziej szczegółowoPrototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.
1/14 Prototype (prototyp) Cel: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. Przykład: Edytor 3D klient tworzy obiekty różnych kształtów
Bardziej szczegółowoRozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Bardziej szczegółowoPolimorfizm. dr Jarosław Skaruz
Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie
Bardziej szczegółowoAplikacja wielowątkowa prosty komunikator
Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host
Bardziej szczegółowoWzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs
Bardziej szczegółowoKlasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
Bardziej szczegółowoProgramowanie współbieżne i rozproszone
Programowanie współbieżne i rozproszone WYKŁAD 6 dr inż. Komunikowanie się procesów Z użyciem pamięci współdzielonej. wykorzystywane przede wszystkim w programowaniu wielowątkowym. Za pomocą przesyłania
Bardziej szczegółowo1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)
Instrukcja tworzenia aplikacji EE na podstawie aplikacji z dostępem do bazy danych, prezentowanej na zajęciach lab.5 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom. Projektowanie i wdrażanie
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania
Bardziej szczegółowoZdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1
Zdalne wywołanie procedur Krzysztof Banaś Systemy rozproszone 1 RPC Komunikacja za pomocą gniazd jest wydajna, gdyż korzystamy z funkcji systemowych niewygodna, gdyż musimy wyrażać ją za pomocą jawnego
Bardziej szczegółowoInterfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej
Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,
Bardziej szczegółowoWykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Bardziej szczegółowo