Nếu tôi hiểu, mô hình diễn viên giống như mô hình đối tượng, nhưng có một vài điểm khác biệt:
- MỌI đối tượng sinh ra chủ đề riêng của nó và nó không phải là vấn đề ngay cả khi bạn có hàng ngàn đối tượng.
- Các diễn viên không tương tác bằng cách gọi các chức năng và nhận các giá trị trả về mà thay vào đó bằng cách gửi và nhận tin nhắn.
- Nếu bạn không vi phạm mô hình đó, ứng dụng của bạn sẽ sử dụng đồng thời với toàn bộ sức mạnh của nó mà không có bất kỳ rủi ro nào về điều kiện chủng tộc.
- Mọi thứ bạn có thể làm trong OO bạn có thể làm bằng cách sử dụng các diễn viên nhưng tốt hơn, vấn đề là mọi thứ chúng ta mã hóa trong những năm qua đều dựa trên OO - nhưng một sự chuyển đổi sắp xảy ra.
Vì vậy, ví dụ, giả sử tôi phải xác định lớp / diễn viên vectơ 3d, tạo hai thể hiện và gọi một phép toán tổng trên chúng.
ĐỐI TƯỢNG ĐỊNH HƯỚNG:
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
MÔ HÌNH
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
}
Là nó? Hay tôi sai hoàn toàn?