Wenn ich verstanden habe, ist das Darstellermodell genau wie das Objektmodell, aber mit ein paar Unterschieden:
- JEDES Objekt erzeugt einen eigenen separaten Thread und es ist kein Problem, auch wenn Sie Tausende von Objekten haben.
- Akteure interagieren nicht durch Aufrufen von Funktionen und Abrufen von Rückgabewerten, sondern durch Senden und Empfangen von Nachrichten.
- Wenn Sie nicht gegen dieses Modell verstoßen, nutzt Ihre App die Parallelität ohne das Risiko von Rennbedingungen.
- Alles, was Sie in OO tun können, können Sie mit Schauspielern tun, aber besser. Das Problem ist, dass alles, was wir in den letzten Jahren codiert haben, OO-basiert war - aber ein Übergang steht bevor.
Nehmen wir zum Beispiel an, ich muss eine 3D-Vektorklasse / einen 3D-Akteur definieren, zwei Instanzen erstellen und eine Summenoperation für sie aufrufen.
OBJEKTORIENTIERTEN:
class V3d {
constructor V3d(x,y,z) //bla
float x,y,z;
function sum(V3d b)
{
return V3d(x+b.x,y+b.y,z+b.z);
}
}
//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result
SCHAUSPIELER-MODELL:
actor V3d
{
constructor V3d(x,y,z) //bla
float x,y,z;
loop
{
receive 'sum',b:V3d :
send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
}
}
//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one
loop
{
receive 'sumResult',result:
drawPoint(result) //receives result and draws it
}
Ist es das? Oder liege ich völlig falsch?