Sunteți pe pagina 1din 44

Curs 1: Intro + Actori

2016-2017 Dezvoltarea aplicaţiilor interactive


1 / 43
Cuprins

1 Organizare

2 Calcul interactiv – privire de ansamblu

3 Concurenţă şi actori

2 / 43
Organizare

3 / 43
Instructor

Denisa Diaconescu
https://sites.google.com/site/denisadiaconescu/
ddiaconescu [at] fmi.unibuc.ro
denisa.diaconescu [at] gmail.com

4 / 43
Suport curs

Moodle

https://sites.google.com/view/dai2017/home
sau
https://goo.gl/QX9HU0

5 / 43
Bibliografie

Pe parcursul cursului, la fiecare capitol.

6 / 43
Notare

Seminar: 30 puncte

Proiect: 30 puncte

Examen: 40 puncte

7 / 43
Notare seminar

Reading seminar

Dina Goldin, Scott A. Smolka, P. Wegner, Interactive Computation,


Springer, 2006

Prezentarea unui capitol din carte ı̂n timpul seminarului, conform


unei planificări

Echipă de 2-3 persoane

Timp prezentare: 45 min.

8 / 43
Notare seminar

Notare
Prezentare: 20 puncte
Prezenţă la reading seminar: 10 puncte

Deadline: 26 februarie (pe email sau la curs)


Anunţarea echipei
Anunţarea temei
Planificarea prezentării

9 / 43
Proiect

Proiect: 30 puncte

Detalii la finalul cursului de astăzi

10 / 43
Examen

Examen: 40 puncte

Cu materialele pe bancă

Întrebări şi exerciţii din curs

11 / 43
Restanţă

Proiectul şi/sau seminarul nu se pot reface!!

Se păstrează eventualele puncte obţinute ı̂n timpul semestrului


(proiect, seminar)

Restanţa constă doar ı̂n examen

12 / 43
Calcul interactiv – privire de ansamblu

13 / 43
Aţi văzut acest film?

14 / 43
Alan Turing

23 iunie 1912 – 7 iunie 1954

pioner ı̂n informatică

considerat ”tatăl” informaticii


şi al inteligenţei artificiale

a fost judecat ı̂n 1952 pentru


”acte homosexuale”

s-a sinucis la vârsta de 41 ani

15 / 43
(Grigore C. Moisil)

pioner ı̂n informatică


considerat ”tatăl” informaticii
ı̂n România

16 / 43
Maşina Turing

17 / 43
Teza Church-Turing [1937]

O funcţie pe numere naturale poate fi calculată de un om urmând un


algoritm (funcţie calculabilă)

poate fi calculată de o maşină Turing.

[Knuth]
Algoritmii sunt transformări bazate pe funcţii ı̂ntre intrări şi ieşiri.

O maşină Turing poate simula orice algoritm!

18 / 43
Teza Church-Turing reinterpretată [’60]

O maşină Turing poate face orice poate face un calculator.

19 / 43
Teza Church-Turing reinterpretată [’60]

O maşină Turing poate face orice poate face un calculator.


NU este adevărată!

20 / 43
Limitările maşinilor Turing/algoritmilor

Exemplu: Maşinile autonome


nu putem da de la ı̂nceput un algoritm exact care să fixeze cum să
meargă maşina

maşina trebuie să observe condiţiile de drum, maşinile din jurul ei,
semafoarele etc.

maşina trebuie să se adapteze la mediul ı̂nconjurător

apare o interacţiune ı̂ntre maşină şi mediu

21 / 43
Limitările maşinilor Turing/algoritmilor

Exemple:

programare orientată pe obiect


procese concurente
sisteme distribuite
reţele, precum Internet-ul
roboţi
...

Maşinile Turing nu pot surprinde noţiunea de interacţiune!

22 / 43
Maşini interactive

În prezent, calculatoarele funcţionează şi ca


mediatori
coordonatori
organizatori
pentru a permite colaborarea ı̂ntre diverşi agenţi, cum ar fi
calculatoare (sau programe)
senzori şi dispozitive de acţionare
oameni

P. Wegner a introdus conceptul de maşină interactivă.

23 / 43
Maşini Turing vs. maşini interactive

Maşina Turing
sistem ı̂nchis
primeşte o intrare pe bandă, incepe să calculeze, şi se opreşte (ı̂n
cazul fericit), iar banda de ieşire conţine rezultatul
la fiecare pas, maşina Turing depinde doar de starea sa internă şi de
simbolul curent de pe bandă

Maşina interactivă
trebuie să fie un sistem deschis
extensie a maşinii Turing care să poată interacţiona cu mediul din
jurul său prin noi acţiuni de intrare/ieşire

24 / 43
Calcule interactive

maşinile Turing ↔ calcule algoritmice


??? ↔ calcule interactive

Calcul interactiv = instrument matematic pentru calcule care implică


comunicare de tip intrare/ieşire cu mediul extern
ı̂n timpul procesului

25 / 43
Calcule interactive

maşinile Turing ↔ calcule algoritmice


??? ↔ calcule interactive

Calcul interactiv = instrument matematic pentru calcule care implică


comunicare de tip intrare/ieşire cu mediul extern
ı̂n timpul procesului

Ce veţi vedea la acest curs:


Sisteme interactive
Reţele Petri
Maşini Turing reactive
Maşini Turing persistente

25 / 43
Concurenţă şi actori

26 / 43
Concurenţa

Calculatoarele nu sunt mai rapide, dar sunt ieftine


Putem folosi extrem de multe calculatoare (scalabilitate pe
orizontală)
Avem nevoie de metode pentru a rula programele concurent
Fire de execuţie (threads)
foarte greu de urmărit erorile
s-au dovedit a nu fie cea mai bună metodă

Există alternative mai bune!

27 / 43
Modelul cu actori

Inventat ı̂n 1973 de către Carl


Hewitt (MIT)
Un model conceptual pentru
sisteme concurente
Descrie reguli generale despre
cum ar trebui să se comporte şi
să interacţioneze ı̂ntre ele
componentele unui sistem
concurent

28 / 43
Implementări

Exemple de limbaje de programare şi librării standard:


Erlang
Elixir
Scala
F#

Exemple de librării pentru alte limbaje:


Java
C#
C/C++
Javascript
Python
Ruby

29 / 43
Actori

30 / 43
Actori

Unitatea fundamentală de calcul


Este acel ceva care primeşte un mesaj şi calculează ceva pe baza lui
Similar cu ce se ı̂ntâmplă ı̂n programarea orientată pe obiect:
un obiect primeşte un mesaj (apelarea unei metode) şi face ceva ı̂n
funcţie de ce mesaj primeşte (ce metodă apelăm)

Actorii sunt complet izolaţi ı̂ntre ei!


Actorii nu au memorie comună!
Un actor are o stare privată.
Starea unui actor nu poate fi modificată direct de niciun actor.

31 / 43
Modelul cu actori

Un singur actor nu este un actor.


Actorii vin ı̂n sisteme
Orice este un actor!!
Actorii trebuie să aibă adrese, pentru a-şi putea trimite mesaje.

32 / 43
Mailbox

Deşi putem rula simultan mai mulţi actori,


un actor procesează mesajele primite secvenţial.
Dacă trimitem 3 mesaje aceluiaşi actor, acesta le va executa pe rând,
secvenţial.
Chiar dacă am crea 3 actori şi am trimite câte un mesaj fiecăruia, tot
nu avem garanţia că se vor executa simultan (deşi este posibil).

Mesajele sunt trimise asincron către un actor.


Un actor stochează mesajele primite ı̂ntr-o cutie poştală (mailbox)
până când ı̂l poate procesa.

33 / 43
Mailbox

Actorii comunică ı̂ntre ei trimiţându-şi mesaje ı̂n mod asincron.


Mesajele trimise sunt stocate de un actor ı̂n cutia sa poştală
până când sunt procesate.

34 / 43
Ce fac actorii?

Când un actor primeşte un mesaj, poate să facă următoarele 3 lucruri:


1 Poate crea mai muļti actori
2 Poate trimite mesaje către alţi actori
3 Poate specifica ce să facă cu următorul mesaj

35 / 43
Poate specifica ce să facă cu următorul mesaj

Un actor are o stare privată.


”Poate specifica ce să facă cu următorul mesaj” ı̂nseamnă a defini
cum arată starea actorului pentru următorul mesaj.
Este modul ı̂n care actorii işi schimbă starea.
Exemplu:
Un actor care se comportă ca un calculator.
Actorul are starea iniţiala 0.
Când actorul primeşte mesajul add(1), decât să işi schimbe starea
iniţiala, specifică că pentru următorul mesaj starea sa o să fie 1.

36 / 43
Toleranţa faţă de erori

Erlang a introdus filozofia ”let is crash”.


Nu ar trebui să programăm defensiv, ı̂ncercând să anticipăm şi
manevrăm toate problemele posibile.
Este aproape imposibil să ne gândim la toate cazurile de eroare.
În Erlang, un actor se poate bloca, dar acesta este supravegheat de
un alt actor care monitorizează cazurile de eroare şi acţionează (de
ex., resetarea actorului la o stare stabilă).

37 / 43
Toleranţa faţă de erori

Orice cod este rulat ı̂ntr-un proces (aşa apelează Erlang actorii).
Acest proces este complet izolat; starea sa nu influenţează niciun alt
proces.
Există un proces numit supraveghetor care va fi ı̂nştiinţat când
procesul supravegheat se blochează şi care poate face ceva ı̂n acel
caz.
Astfel, se pot crea sisteme care ”se vindecă singure”.
Dacă un actor ajunge ı̂ntr-o stare critică şi se blochează din diferite
motive, un supraveghetor poate readuce actorul ı̂ntr-o stare sigură.
Există mai multe strategii pentru supraveghetor. De exemplu, poate
restarta actorul la starea sa iniţială.

38 / 43
Distribution

Dacă trimitem un mesaj unui actor, nu contează dacă acesta este


rulat local sau ı̂n altă parte.
Dacă un actor este doar o unitate de cod cu o cutie poştală şi o
stare internă, şi doar răspunde la mesaje, nu contează pe ce maşină
este rulat.
Contează doar ca mesajele să ajungă. Nu există canale de
comunicaţie!

39 / 43
Recomandare

Vă recomand acest interviu cu Carl Hewitt


ı̂n care explică ce este modelul cu actori.

40 / 43
Proiecte

Echipe de 2-3 persoane

Proiectele se prezintă ı̂n ultimele 3 săptămâni ı̂n cadrul seminarului,


conform unei planificări

Timp prezentare: 15 min.


Documentaţie: 10-15 pagini
ce face aplicaţia
ce aţi folosit ı̂n aplicaţie
arhitectura aplicaţiei
prezentarea lucrului ı̂n echipă
etc.

Deadline: 13 martie (pe email sau la curs)


Anunţarea echipei
Anunţarea temei
Planificarea prezentării

41 / 43
Proiecte

În Elixir (http://elixir-lang.org/)


Actorii ı̂n Elixir sunt de mai multe tipuri:
Proces
Agent
GenServer
Supervisor
Application

Cerinţe obligatorii:
1 Aplicaţia trebuie să conţină cel puţin 10 actori din lista de mai sus,
din care cel puţin unul să fie Supervisor şi cel puţin unul să fie
Application.
2 Aplicaţia trebuie să conţină un bug care obligă un actor să se
blocheze şi să fie repornit de supervisor.

Tema aplicaţiei este la alegere.

42 / 43
Pe săptămâna viitoare!

43 / 43

S-ar putea să vă placă și