Làm cách nào để biểu diễn các hành động lồng nhau trong sơ đồ hoạt động UML?


16

Câu hỏi này rất giống với câu hỏi này , nhưng câu trả lời không phù hợp với nhu cầu của tôi. Nó tập trung vào một công cụ UML cụ thể (Paccorus) trong khi câu hỏi của tôi nói chung hơn về UML.

Tôi muốn thể hiện một hành động lồng nhau trong sơ đồ hoạt động , nhưng tôi không biết cách phổ biến để làm điều đó là gì. Ý tưởng là có một hành động có cùng phạm vi so với các hành động khác, nhưng phức tạp hơn trong việc thực hiện nó. Tôi muốn hiển thị thêm chi tiết về việc thực hiện nó trong khi vẫn có thể hiển thị hành động này ở cùng cấp độ so với các hành động khác.

Trong ví dụ dưới đây, là sơ đồ hoạt động hiển thị một số loại hoạt động " trở về nhà ", các hành động lồng nhau nằm trong Pet the cathành động. Lưu ý rằng có một lỗi tiềm ẩn khác trong sơ đồ này, hãy xem errata ở cuối câu hỏi.

Cuối cùng trở về nhà

Tôi đã sử dụng nút có cấu trúc, nhưng tôi không chắc đó là cách chính xác, do đó, câu hỏi. Trong một statechart, tương đương sẽ là một trạng thái tổng hợp, nhưng tôi không thể tìm thấy bất cứ điều gì về một hành động tổng hợp. Liên quan đến nút có cấu trúc, sau khi đọc một vài tài liệu về nó, tôi vẫn không thực sự hiểu nó được sử dụng như thế nào, vì vậy tôi có thể hoàn toàn sai với sơ đồ này.

Tôi cũng biết rằng có khả năng đề cập đến một hoạt động phụ khác với biểu tượng cây đinh ba, như trong hình bên dưới, nhưng nó không phù hợp với nhu cầu của tôi vì tôi muốn toàn bộ thông tin trên cùng một sơ đồ (vì vậy tôi có thể in nó mà không mất thông tin nào):

Hoạt động phụ đinh ba

Vì vậy, cách tiêu chuẩn để đại diện cho một hành động lồng nhau như vậy là gì? Theo tiêu chuẩn, ý tôi là UML hợp lệ, thường thấy và nếu có thể thực hiện được trên hầu hết các công cụ thiết kế UML.

Lỗi không liên quan: Một điều khác là sai trong sơ đồ của tôi, các mũi tên đi đến cùng một hành động ( Scratch behind the ears) nên đi đến một nút hợp nhất trước khi vào hành động. Xem các bình luận dưới đây, bao gồm cả trích dẫn này của JOT .


Bạn đã không hỏi về điều này, nhưng tôi muốn chỉ ra rằng hành động "Cào sau tai" không bao giờ có thể thực hiện được. Có ai biết tại sao điều này là đúng?
Jim L.

Chà tôi không biết nhưng tôi hy vọng đó chỉ là sự nóng nảy của con mèo, bởi vì sơ đồ cuối cùng tôi đưa cho ông chủ của tôi trông giống như thế này: /
Tim

Lý do là một mã thông báo từ cả hai đường dẫn phải được cung cấp cho hành động để nó bắt đầu, điều này là không thể, vì một mã đến từ một thứ khác sẽ không bao giờ xảy ra.
Jim L.

@ JimL. Bạn có nghĩa là cả hai điều kiện phải đúng để vào trạng thái này? Sau đó, những gì sẽ là cách để thể hiện những gì tôi dự định thể hiện? Một nút kim cương hợp nhất trước khi vào nhà nước?
Tim

Chúng ta đang nói về một hành động, không phải là một nhà nước; nhưng có, một sự hợp nhất là cần thiết để khắc phục vấn đề này.
Jim L.

Câu trả lời:


23

Cả hai đều là "tiêu chuẩn". Hình ảnh đầu tiên theo thông số kỹ thuật của UML là

Các nút hoạt động có cấu trúc

StructuredActivityNode là một Hành động cũng là một Activitygroup (xem mệnh đề phụ 15.6) và có hành vi được chỉ định bởi ActivityNodes và ActivityEdges mà nó chứa. Không giống như các loại Activitygroup khác, StructuredActivityNode sở hữu ActivityNodes và ActivityEdges mà nó chứa, và do đó, một nút hoặc cạnh chỉ có thể được chứa trực tiếp trong một StructuredActivityNode. StructuredActivityNode có thể được lồng nhau (dưới dạng StructuredActivityNode, dưới dạng Action, cũng là ActivityNode), do đó, một cạnh hoặc nút có thể được chứa gián tiếp trong một số StructuredActivityNodes.

Nhóm hoạt động

ActivityGoups là một cấu trúc nhóm cho ActivityNodes và ActivityEdges. Các nút và cạnh có thể thuộc về nhiều hơn một nhóm. Mệnh đề phụ này mô tả hai loại cụ thể của Activitygroup, ActivityPartitions và InterruptibleActivityRegions. StructuredActivityNodes là một loại Activitygroup thứ ba, nhưng chúng cũng là Hành động và được thảo luận trong điều khoản phụ 16.11 của Khoản 16 về Hành động.

Bức tranh thứ 2 là

Hành động gọi

InvocationAction là một Hành động dẫn đến kết quả trực tiếp hoặc gián tiếp trong việc gọi Hành vi (xem điều khoản phụ 13.2). InvocationActions bao gồm CallActions để gọi các hoạt động hoặc hành vi và để bắt đầu các hành vi đã được khởi tạo trước đó. Các loại InvocationActions bổ sung cho phép gửi tín hiệu mục tiêu và các đối tượng khác và khả năng truyền tín hiệu đến các máy thu có sẵn.

Sự khác biệt chính giữa cả hai trường hợp là sử dụng lại. Trong khi ở nơi đầu tiên bạn chỉ có một số phức tạp tại một nơi duy nhất (của bạn Pet the cat) thì lần thứ hai là khi bạn (lại) sử dụng một hành động nhất định tại nhiều địa điểm. Tuy nhiên, tôi có xu hướng sử dụng biến thể gọi ngay cả khi nó chỉ sử dụng cho một lần sử dụng. Ở đây tôi thêm một sơ đồ tổng hợp (trong EA mở ra trên dbl-click) để hiển thị chi tiết của hành động theo. Luồng chính chỉ hiển thị tổng quan và nếu cần chi tiết, chúng chỉ là một cú nhấn chuột.

Bây giờ, việc tạo một sơ đồ tổng hợp trong EA là (một lần nữa) khác nhau. Bạn cần tạo một AD ở cấp độ gói và sau đó kéo nó vào phần tử gọi. Bây giờ, khi bạn nhấp chuột vào đó, sơ đồ nhúng sẽ mở ra.


Cảm ơn về câu trả lời của bạn. Bạn có thể cho biết thêm chi tiết về khi bạn sử dụng khả năng này? Tôi thấy thông số UML khá khó đọc, phía người dùng.
Tim

Đây không phải là bài giảng vào giờ đi ngủ :-) Tôi sẽ cố gắng thêm một số lời giải thích.
qwerty_so

Tôi đã thực hiện một bản cập nhật với một nhận xét về một EAUI khác.
qwerty_so
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.