2010-09-20 11 views
5

Tôi đang tìm một khung công tác cung cấp các máy trạng thái phân cấp (HSM).Các khung thực thi của Máy Nhà nước nào cho C++ thực hiện ngữ nghĩa UML?

Đây là những yêu cầu về khung:

  • Tuân thủ UML ngữ nghĩa máy nhà nước (càng nhiều càng tốt)
  • Hỗ trợ ít nhất ngữ nghĩa
    • run-to-hoàn
    • trạng thái phân cấp
    • hành động nhập cảnh và thoát
    • tra hành động nsition
    • lính gác
    • sự kiện với thông số tùy chỉnh
  • là hướng đối tượng hay không ít nhất là không cấm OO thiết kế

Nền tảng mục tiêu là một trung vào hệ thống nhúng cỡ lớn với một hệ điều hành.

Bạn có biết một khuôn khổ đáp ứng các yêu cầu trên không? Những ưu và nhược điểm của khung công tác của bạn là gì?

Trả lời

4

Khám phá Quantum Platform.

Tôi đã sử dụng nó trên một số dự án nhúng (từ rất nhỏ đến rất lớn), và nó hỗ trợ tất cả các mục bullet bạn yêu cầu và hơn thế nữa.

Trang web cho QP thực hiện công việc giải thích tốt hơn nhiều so với tôi có thể làm ở đây. Hãy chú ý, QP không thực hiện 100% chức năng được chỉ định trong đặc tả UML, nhưng các khởi hành được giải thích rõ ràng, và trong tất cả kinh nghiệm của tôi với QP, không có vấn đề gì trong số đó là vấn đề cho dự án.

Ngoài ra còn có 2 gói nâng cấp statechart mà bạn dường như biết.

+0

Cảm ơn, điều đó có vẻ thú vị. Tôi chắc chắn sẽ xem xét kỹ hơn về QP. – theDmi

4

Bạn nên truy cập và xem Boost MSM, đây là phiên bản mới cho Boost 1.44 nhưng có vẻ khá hoàn chỉnh. Tôi vẫn chưa thử nó nhưng có vẻ khá hứa hẹn.

+0

Cảm ơn mẹo. Tôi đã biết nó trước đây, và nó có vẻ là một trong những giải pháp hứa hẹn hơn. – theDmi

+0

trên các máy trạng thái bán lớn nó trở nên không thể sử dụng do thời gian biên dịch rất chậm. – asaenko

1

Nếu bạn đang tìm một khung công tác hỗ trợ các máy trạng thái phân cấp và đồng thời với ngữ nghĩa UML (nhập/thoát, chuyển tiếp, bảo vệ, sự kiện có tham số, không đồng bộ/đồng bộ), hãy xem state machine code and diagram generator của tôi. Thay vì thực hiện máy trạng thái "bằng tay", mô tả máy trạng thái trong mô tả xml dễ đọc và dễ đọc của con người và để máy phát điện trạng thái viết mã nguồn trong C++, C# hoặc java.

Thực tế, đối với phiên bản C++, mã được tạo có thể dễ dàng được biên dịch chéo cho hệ thống nhúng kích thước trung bình/lớn. Nó đã được thực hiện rồi.

1

Bạn có thể xem xét khuôn khổ lớp mẫu C++ STTCL được định nghĩa để cung cấp ánh xạ ký hiệu sơ đồ trạng thái UML 2.2 cho các lớp thực hiện.Cách tiếp cận STTCL là sự tinh chỉnh của mẫu trạng thái GoF và cố gắng lấp đầy (các) khoảng trống đến ký pháp biểu đồ trạng thái UML.

Triển khai khuôn khổ có thể định cấu hình liên quan đến các phụ thuộc hệ điều hành vì đây là những điều cần thiết (chỉ dành cho các mô hình thực hiện không đồng bộ).

Có một số PDF document sẵn có giải thích khái niệm chi tiết hơn.

+0

Xin chào, có vẻ như mã của bạn phụ thuộc vào Boost. Gần đây tôi đã đánh giá các khung máy trạng thái, và nếu Boost là phụ thuộc thì tại sao nên chọn STTCL trên Boost StateCharts và Boost MSM? Đặc biệt Boost :: StateCharts cũng là một sự tinh tế của mẫu trạng thái GoF. – krapht

3

Tính đến hôm nay, có C++ (hỗ trợ tùy chọn thay thế C++ 11 và C++ 03 mới). Nó được gọi là yasmine (và tôi là kiến ​​trúc sư). Nó đáp ứng tất cả các yêu cầu trên.

Một số ưu và nhược điểm (trích dẫn từ trang web Yasmine):

Ưu điểm của việc sử dụng Yasmine

  • Cô cung cấp một thực hiện đầy đủ của UML ngữ nghĩa máy nhà nước.
  • yasmine là triển khai C++ hiện đại sử dụng C++ 11 (hỗ trợ C++ 03).
  • Bởi vì nó là C++ (và không phải C) mã tích hợp độc đáo vào mã OO.
  • Cô ấy có tài liệu tốt [...]
  • Vì cô ấy là nguồn mở, bạn có thể kiểm tra việc triển khai của mình. Điều này cũng đảm bảo khả năng sử dụng lâu dài và tính khả dụng.
  • Thư viện cho phép bạn tạo các máy trạng thái khi chạy.
  • [...]

Yasmine gì không

là Cô ấy không phải là một thư viện in chân tối thiểu mà ưu tiên trên chạy trên mọi hệ thống dù ít tài nguyên có sẵn. yasmine không phải là tài nguyên đói, nhưng cô ấy không thể (và không muốn) cạnh tranh với thư viện không có trừu tượng dựa trên trường hợp chuyển đổi dựa trên trường hợp.

Note

Tôi biết đây là một câu hỏi cũ, nhưng đó là của Google # 1 cho "C++ uml máy nhà nước" mà làm cho nó rất có liên quan.