Język programowania Scala + aktorzy Akka



Podobne dokumenty
Programowanie obiektowe

Scala - programowanie obiektowo-funkcyjne

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

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

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

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

Współbieżność w środowisku Java

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron

KOTLIN. Język programowania dla Androida

Języki i techniki programowania Ćwiczenia 2

Wywoływanie metod zdalnych

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Programowanie obiektowe

Dokumentacja do API Javy.

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

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

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

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

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

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

Programowanie w Internecie. Java

Programowanie obiektowe

Aplikacje RMI

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

Systemy rozproszone. Dr inż. L. Miękina. Department of Robotics and Mechatronics AGH University of Science and Technology 1/1

1 Atrybuty i metody klasowe

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

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie obiektowe

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

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ć

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Remote Method Invocation 17 listopada 2010

Programowanie obiektowe zastosowanie języka Java SE

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

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

Podejście obiektowe do budowy systemów rozproszonych

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

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

Kurs programowania. Wykład 8. Wojciech Macyna

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Tworzenie aplikacji w języku Java

Java. Programowanie Obiektowe Mateusz Cicheński

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Programowanie rozproszone w języku Java

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Wywoływanie metod zdalnych

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

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Wykład 8: Obsługa Wyjątków

Co jeszcze mogą nam dać adnotacje? Adam Warski

Programowanie obiektowe

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Podstawy Języka Java

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

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

KLASY, INTERFEJSY, ITP

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Diagramy klas. dr Jarosław Skaruz

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

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

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Kurs programowania. Wykład 9. Wojciech Macyna

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Dziedziczenie. dr Jarosław Skaruz

Programowanie w Javie - wykład 3

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

Wykład 8: klasy cz. 4

Klasy abstrakcyjne i interfejsy

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

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

Enkapsulacja, dziedziczenie, polimorfizm

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

Programowanie obiektowe i zdarzeniowe

Java: interfejsy i klasy wewnętrzne

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

5. Model komunikujących się procesów, komunikaty

Programowanie obiektowe

Programowanie obiektowe

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

Programowanie obiektowe - 1.

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

MODELOWANIE OBIEKTOWE

Aplikacje w środowisku Java

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Multimedia JAVA. Historia

Definiowanie własnych klas

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Aplikacje webowe z wykorzystaniem. Scala i Lift. Opracował: Mikołaj Sochacki

Kolekcje w Javie cz. 1

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

Transkrypt:

Język programowania Scala + aktorzy Akka Marek Skórkowski

Plan prezentacji: Aktorzy Akka Scala 1. Wprowadzenie (AS) 2. Scala(MS) 3. Nawiasy, kropki... (MS) 4. DSL (MS) 5. Wielodziedziczenie(MS) 6. Package Objects (AS) 7. Collections (AS) 8. Structural Types (AS) 9. Kontynuacje (AS) 1. Wprowadzenie do aktorów (AS) 2. Akka (AS) 3. FSM (AS) 4. Play 2.0 (MS)

Martin Odersky, politechnika EPFL

Kto używa dzisiaj Scali? www.scala-lang.org

Programowanie obiektowe Programowanie funkcyjne - Class, Object i Traits - var vs val - Funkcje, Higher order function - Case Marek Skórkowski

Nawiasy, kropki i operatory Marek Skórkowski

Nawiasy, kropki i operatory Marek Skórkowski

Nawiasy, kropki i operatory Marek Skórkowski

Nawiasy, kropki i operatory Marek Skórkowski

DSL http://blog.fogus.me/2009/03/26/baysick-a-scala-dsl-implementing-basic/ Marek Skórkowski

Wielodziedziczeni e Marek Skórkowski

Package Objects W każdej paczce możemy (jednorazowo) umieścić dokładnie to samo co w klasie. package pl.osec.barcamp.scala package po class Test package object po val barcampdate = 2012-03-06 def testpackageobjectmethod println( test package object method )

Package Objects Od teraz importując import pl.osec.barcamp.scala.po._ możemy używać metody testpackageobjectmethod oraz stałej barcampdate. object HelloWorld def main( args : Array[String] ) import pl.osec.barcamp.scala.po._ println( barcampdate ) testpackageobjectmethod

Collections Ogólna struktura kolekcji w Scali:

Collections parametryzajca (generics) od samego początku

Collections traity i mixiny

Collections scala.collections.mutable._ scala.collections.immutable._ mutable (zmienne) immutable (niezmienne) Metody: par - zamienia daną kolekcję na kolekcję równoległą seq - zamienia daną kolekcję na kolekcję przetwarzaną sekwencyjnie

Structural Types Ciekawostka i przyjemnostka. Tak zdefiniowana metoda: def prowadz( samochod : def start() : Unit, def stop() : Unit ) samochod.start //... samochod.stop pozwala przekazać jako argument każdy typ, który będzie miał metodę start oraz metodę stop. Obydwie metody nie biorą żadnych argumentów oraz nie zwracają nic (Unit w Scali jest jak void w Javie). Sekcja samochod : def start() : Unit, def stop() : Unit definiuje stałą samochod jako dowolny typ posiadający tak zdefiniowane metody. Nie wymaga to od nas dziedziczenia nakazanej klasy bądź implementowania wskazanego interfejsu.

Kontynuacje Kontynuacje pozwalają przerwać wykonywanie naszego kodu w oczekiwaniu na pojawienie się zasobu zewnętrznego. Kiedy się pojawi możemy go kontynuować kod "wstrzykując" owy zasób. reset // jakis nasz kod wywolany przed kontynuacja shift kontynuacja => Przykład użycia: //... connection.open // jakis nasz kod wywolany przed kontynuacja kontynuacja() // wywolanie kontynuacji // jest to operacja blokująca, jednak w tym momencie następuje nasze "zamrożenie", inny wątek zacznie kontynuować program w momencie otworzenia połączenia (lub jakiegoś błędu) // jakis nasz kod wywolany po kontynuacji val data = connection.read // tutaj znajduje sie kontynuacja connection.write( data ) connection close

Aktorzy oddzielają nas od wątków aktor może mieć na stałe przypisany wątek bądź korzystać ze wspólnej puli wątków aktorzy komunikują się przesyłając pomiędzy sobą wiadomości wiadomością może być dowolny obiekt Java (w przypadku zdalnych aktorów obiekt musi być serializowalny) każdy aktor ma swój mailbox z którego ściąga oczekujące wiadomości i przetwarza je szeregowo Dzięki aktorom: możemy pisać programy wydajnie wykorzystujące dostępną ilość procesorów i rdzeni oddzielamy się od fizycznego zasobu jakim jest wątek dzięki czemu możemy przesłać poprzez sieć referencje do aktora lub możemy przesłać na inną maszynę całego aktora

www.akka.io

Aktorzy Akka (2.0) profesjonalny framework z aktorami API dla Scali jak i dla Javy wiele różnych podsystemów aktorów w tej samej JVM... a nawet w tym samym ClassLoader, każdy może posiadać odmienną konfigurację przeźroczystość lokalizacyjna jeśli posiadamy referencję do aktora to możemy wysyłać i odbierać od niego wiadomości bez wiedzy czy jest on lokalnym aktorem, zdalnym oraz czy podczas rozmowy z nim nie zmienił swojej lokalizacji hierarchia każdy aktor ma swojego rodzica oraz swoje dzieci (aktorzy powołani przez niego do życia), każdy nasz top-level aktor ma rodzica w postaci głównego aktora Akka TypedActor system podobny do proxy w Javie, podając trait (interfejs) oraz instancję klasy (domiksowującą ten trait) uzyskujemy obiekt na rzecz którego najnormalniej w świecie wywołujemy metody - są one jednak zamieniane na wiadomości i przesyłane do aktora, gdzie wywołują się szeregowo STM i Transactor

Aktorzy Akka (2.0) FSM Finite State Machine pozwalają nam zamienić aktora (który w dowolnym momencie może otrzymać dowolną wiadomość) na maszynę stanów object Stream sealed trait States case object NotConnected extends States case object Connecting extends States case object Connected extends States sealed trait Messages case class Connect( ip : String, port : Int ) extends Messages case class Connected( socket : Socket ) extends Messages case class Send( bytearray : Array[ Byte ] ) extends Messages case object Disconnect extends Messages

FSM cd.... class SocketStreamActor extends Actor with FSM[ Stream.States, Unit ] import FSM._ // --------------------------------------when( Stream.NotConnected ) case Ev( Stream.Connect( ip, port ) ) => // wyrzucamy rzadanie polaczenia do jakiegos zewnetrznego aktora, ktory odesle nam odpowiedz goto( Stream.Connecting ) // ---------------------------------------

FSM cd.... // --------------------------------------when( Stream.Connecting ) case EV( Strean.Connected( socket ) ) => // zapamietujemy sobie otrzymany socket goto( Stream.Connected ) case Ev( Stream.Disconnect ) => log.debug( "received disconnecting request" ) stop( Normal ) // ---------------------------------------

FSM cd.... // --------------------------------------when( Stream.Connected ) case Ev( Stream.Send( bytearray ) ) => // wysylanie danych z bytearray stay case Ev( Stream.Disconnect ) => log.debug( "received disconnecting request" ) stop( Normal ) // ---------------------------------------

FSM cd.... // --------------------------------------whenunhandled case Ev( message ) => log.debug( "received unhandled message " + message ) stay // --------------------------------------ontransition case fromstate -> tostate => log.debug( "changing state from " + fromstate + " to " + tostate ) // ---------------------------------------

FSM cd.... // --------------------------------------ontermination case StopEvent( stoptype, state, data ) => log.debug( "stopping, stoptype " + stoptype + ", state " + state + ", data " + data ) // kod na zakonczenie // --------------------------------------startwith( Stream.NotConnected, null ) initialize

FSM cd.... Gotowe! val actorsystem = ActorSystem( "ArduinoTesterActorSystem" ) // tworzymy system aktorow (mozemy miec ich wiele w JVM, kazdy z nich // moze miec inna konfiguracje val streamactor = actorsystem.actorof( Props[SocketStreamActor], name = "SocketStreamActor" ) streamactor! new Stream.Connect( "192.168.10.90", 15123 ) // aktor przechodzi ze stanu NotConnected do Connecting // jesli polaczenie sie uda to przechodzi do stanu Connected wpp. // przechodzi do zakonczenia swojej pracy streamactor! new Stream.Send( "ala ma kota".getbytes ) // polaczonemu aktorowi nadajemy wiadomosc nakazujaca nadanie bajtow streamactor! Stream.Disconnect

Play 2.0 Marek Skórkowski

Dziękujemy :) stanek.artur@gmail.com marun.skor@gmail.com www.scala.net.pl