2009-08-24 39 views
5

Bạn có thể đọc this question nơi tôi hỏi về kiến ​​trúc tốt nhất cho một ứng dụng máy cho một câu chuyện nhỏ, mặc dù nó không hoàn toàn cần thiết để giúp tôi với câu hỏi này.Máy nhà nước hữu hạn có nên sử dụng máy hữu hạn "lồng nhau" không?

Sự hiểu biết của tôi (đặc biệt cho việc triển khai) của Máy hữu hạn của Tiểu bang là hơi trẻ và có thể thiếu một chút, nhưng tôi đang thực hiện ứng dụng này như một, và tôi có một nơi mà tôi cần phải có FSM lồng nhau. Về cơ bản, máy có một vài trạng thái mức cao (Cold [aka vừa mới bắt đầu], Homing In, Setup, Ready to Run, Running, Reporting, Reseting) nhưng khi máy chạy nó cần phải có FSM nhỏ cho riêng nó (Đang tải Lense, Định vị cạnh, Đo Wedge, Đo tròn, và Hoàn thành [có thể là một số chi tiết trong đó]).

Câu hỏi của tôi là: Tôi có nên xây dựng trong khả năng có "trạng thái lồng nhau" trong đó tiểu bang có thể có danh sách tiểu bang và hệ thống có thể nhập các tiểu bang đó và các tiểu bang đó có thể trở về trạng thái gốc không? Hay tôi chỉ nên đặt một triển khai FSM bên trong trạng thái Đang chạy và giữ chúng dưới dạng hai FSM riêng biệt? Hay bạn nghĩ tôi đang làm hay nghĩ gì đó câm và nên suy nghĩ lại?

Suy nghĩ, đề xuất, phê bình và tư vấn đều được hoan nghênh.

+0

trạng thái lồng nhau là tốt, IMO. Bạn có chắc chắn bạn có nghĩa là homing và không mài giũa? – Beth

+0

Có, homing. Giống như tìm vị trí nhà. –

Trả lời

6

Máy trạng thái lồng nhau là một khái niệm tiêu chuẩn trong UML, vì vậy điều này không nhất thiết phải câm. More details here.

3

Ngược lại. Có khả năng làm tổ FSM là một điều tốt.

Không được tổ chức FSM chỉ để làm tổ, nhưng đôi khi FSM nhận được khá lớn. Có một bản vẽ lớn như vậy làm suy yếu mục đích của một mô hình FSM vì nó không cung cấp cho bạn một cái nhìn tốt đẹp về làm việc bên trong. Nó trở thành một sơ đồ rất lớn với nhiều chi tiết.

Tôi nghĩ bạn có thể so sánh nó với các lớp học. Nếu bạn gắn bó mọi thứ vào một lớp (và thậm chí tệ hơn, hãy làm mọi thứ tĩnh), mục đích và lợi thế của việc có một lớp sẽ biến mất.

Các FSM tương tự cũng vậy.

Để cung cấp cho bạn một ví dụ, một đại học của tôi có mô hình khá "thực tế" hành vi của một con chó sử dụng FSM. Ông có một mô hình rất lớn và bằng cách có FSM lồng nhau tôi đã có thể hiểu được mô hình chỉ trong vài phút.

Vì vậy, nó chắc chắn là một điều tốt, nếu nó được sử dụng đúng cách.

3

Tôi chỉ muốn thêm các trạng thái lồng nhau (trong UML FSM) không giống như "đặt" một FSM riêng biệt bên trong trạng thái đang chạy.

Trong FSM phân cấp thực, sự kiện được đăng lần đầu tiên lên trạng thái lồng nhau hiện tại. Nếu trạng thái đó không xử lý chúng, chúng sẽ được đăng lên trạng thái gốc, v.v. Điều này cho phép một chuyển đổi trạng thái chung "tái cấu trúc" từ trạng thái lồng vào trạng thái gốc.

0

Tôi giải quyết vấn đề này bằng cách có enum đại diện cho các trạng thái của trạng thái. Ví dụ: Bunny có trạng thái Procreation.

ProcreationState có một enum

enum State 
{ 
    SettinNewSearchPosition, 
    SearchingForFriend, 
    MovingTowardsFriend, 
    EstablishingFriendship, 
    Mating 
} 

Trong các tiểu bang cập nhật phương thức i chỉ cần kiểm tra những gì nêu trong của nó và hành động acordingly. Tôi đoán điều này giới hạn khả năng tổng thể của hệ thống này. Im không phải như vậy có kinh nghiệm vì vậy im cố gắng này ra.Bất kỳ thông tin phản hồi về phương pháp này là apreciated.

Các vấn đề liên quan