From bc37ef040ecaf883a75ba808cff0aca9b31b816f Mon Sep 17 00:00:00 2001 From: mfjkri Date: Mon, 22 Jul 2024 14:03:53 +0800 Subject: [PATCH 1/7] Add section for reference frame --- .../plantuml/ParentReferenceFrameDiagram.png | Bin 0 -> 12470 bytes .../images/plantuml/ReferenceFrameDiagram.png | Bin 0 -> 8081 bytes tutorials/plantUml.md | 48 ++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 tutorials/images/plantuml/ParentReferenceFrameDiagram.png create mode 100644 tutorials/images/plantuml/ReferenceFrameDiagram.png diff --git a/tutorials/images/plantuml/ParentReferenceFrameDiagram.png b/tutorials/images/plantuml/ParentReferenceFrameDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8185022c9ba19aabab5047b9cdbea039496cb811 GIT binary patch literal 12470 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 l;N + +### Using reference frames + + ++++ + + + + + + + + + + + + + + + + + + + + + +
SourceResult
+
+ref over MSLogic, TextUi : get minefield appearance
+
+
+ +
+
+group sd get minefield appearance
+    'Contents of reference frame
+    TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
+    activate MSLogic
+    MSLogic --> TextUi : cellAppearance
+    deactivate MSLogic
+end
+
+
+ +
\ No newline at end of file From 6203ddd63d681744b8dbad63a8ddfe54c3ed41ca Mon Sep 17 00:00:00 2001 From: mfjkri Date: Thu, 15 Aug 2024 16:43:28 +0800 Subject: [PATCH 2/7] Update table format to use markdown --- tutorials/plantUml.md | 49 +++++-------------------------------------- 1 file changed, 5 insertions(+), 44 deletions(-) diff --git a/tutorials/plantUml.md b/tutorials/plantUml.md index 394ef6a1..0d59f30c 100644 --- a/tutorials/plantUml.md +++ b/tutorials/plantUml.md @@ -281,48 +281,9 @@ Explicitly define all symbols to avoid any potential layout mishaps. ### Using reference frames - ---- +Reference frames in PlantUML sequence diagrams allow you to group and reuse sequences of interactions. They help improve diagram readability and reduce repetition in complex scenarios. Here's how to use them effectively: - - - - - - - - - - - - - - - - - - - - -
SourceResult
-
-ref over MSLogic, TextUi : get minefield appearance
-
-
- -
-
-group sd get minefield appearance
-    'Contents of reference frame
-    TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
-    activate MSLogic
-    MSLogic --> TextUi : cellAppearance
-    deactivate MSLogic
-end
-
-
- -
\ No newline at end of file +| Source | Result | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------| +|
ref over MSLogic, TextUi : get minefield appearance
| | +|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  activate MSLogic
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | From 782abd8172b50548d281ca02bb391172ba1c3da9 Mon Sep 17 00:00:00 2001 From: mfjkri Date: Thu, 15 Aug 2024 17:30:22 +0800 Subject: [PATCH 3/7] Use puml file for embedding sequence diagrams --- .../diagrams/ParentReferenceFrameDiagram.puml | 21 ++++++++++++++++++ tutorials/diagrams/ReferenceFrameDiagram.puml | 16 +++++++++++++ .../plantuml/ParentReferenceFrameDiagram.png | Bin 12470 -> 0 bytes .../images/plantuml/ReferenceFrameDiagram.png | Bin 8081 -> 0 bytes tutorials/plantUml.md | 8 +++---- 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 tutorials/diagrams/ParentReferenceFrameDiagram.puml create mode 100644 tutorials/diagrams/ReferenceFrameDiagram.puml delete mode 100644 tutorials/images/plantuml/ParentReferenceFrameDiagram.png delete mode 100644 tutorials/images/plantuml/ReferenceFrameDiagram.png diff --git a/tutorials/diagrams/ParentReferenceFrameDiagram.puml b/tutorials/diagrams/ParentReferenceFrameDiagram.puml new file mode 100644 index 00000000..f8600402 --- /dev/null +++ b/tutorials/diagrams/ParentReferenceFrameDiagram.puml @@ -0,0 +1,21 @@ +@startuml + +hide footbox +skinparam sequenceReferenceBackgroundColor #f7807c + +actor Player + +participant ":TextUi" as TextUi #EE82EE +participant ":MSLogic" as MSLogic #90EE90 + +Player -> TextUi : mark x y +TextUi -> MSLogic : markCellAt(x, y) +return + +ref over TextUi, MSLogic + get minefield appearance +end ref + +TextUi --> Player : Show updated minefield + +@enduml diff --git a/tutorials/diagrams/ReferenceFrameDiagram.puml b/tutorials/diagrams/ReferenceFrameDiagram.puml new file mode 100644 index 00000000..2cce5be9 --- /dev/null +++ b/tutorials/diagrams/ReferenceFrameDiagram.puml @@ -0,0 +1,16 @@ +@startuml + +hide footbox + +participant ":TextUi" as TextUi #EE82EE +participant ":MSLogic" as MSLogic #90EE90 + +group sd get minefield appearance + 'Contents of reference frame + TextUi -> MSLogic : getAppearanceOfCellAt(x, y) + activate MSLogic + MSLogic --> TextUi : cellAppearance + deactivate MSLogic +end + +@enduml diff --git a/tutorials/images/plantuml/ParentReferenceFrameDiagram.png b/tutorials/images/plantuml/ParentReferenceFrameDiagram.png deleted file mode 100644 index 8185022c9ba19aabab5047b9cdbea039496cb811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12470 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 l;Nref over MSLogic, TextUi : get minefield appearance | | -|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  activate MSLogic
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | +| Source | Result | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| +|
ref over MSLogic, TextUi : get minefield appearance
| | +|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  activate MSLogic
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | From 03bcc755c53db3bd2edb960e6f463185df162a0b Mon Sep 17 00:00:00 2001 From: mfjkri Date: Thu, 15 Aug 2024 17:31:41 +0800 Subject: [PATCH 4/7] Move puml diagrams into plantuml directory --- .../plantuml}/ParentReferenceFrameDiagram.puml | 0 .../{diagrams => images/plantuml}/ReferenceFrameDiagram.puml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tutorials/{diagrams => images/plantuml}/ParentReferenceFrameDiagram.puml (100%) rename tutorials/{diagrams => images/plantuml}/ReferenceFrameDiagram.puml (100%) diff --git a/tutorials/diagrams/ParentReferenceFrameDiagram.puml b/tutorials/images/plantuml/ParentReferenceFrameDiagram.puml similarity index 100% rename from tutorials/diagrams/ParentReferenceFrameDiagram.puml rename to tutorials/images/plantuml/ParentReferenceFrameDiagram.puml diff --git a/tutorials/diagrams/ReferenceFrameDiagram.puml b/tutorials/images/plantuml/ReferenceFrameDiagram.puml similarity index 100% rename from tutorials/diagrams/ReferenceFrameDiagram.puml rename to tutorials/images/plantuml/ReferenceFrameDiagram.puml From b706cd4d31deaa4a9741d07922c05d54b698d0d2 Mon Sep 17 00:00:00 2001 From: mfjkri Date: Thu, 15 Aug 2024 17:32:31 +0800 Subject: [PATCH 5/7] Update references to plantuml diagrams --- tutorials/plantUml.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/plantUml.md b/tutorials/plantUml.md index f5834e36..f725079a 100644 --- a/tutorials/plantUml.md +++ b/tutorials/plantUml.md @@ -283,7 +283,7 @@ Explicitly define all symbols to avoid any potential layout mishaps. Reference frames in PlantUML sequence diagrams allow you to group and reuse sequences of interactions. They help improve diagram readability and reduce repetition in complex scenarios. Here's how to use them effectively: -| Source | Result | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| -|
ref over MSLogic, TextUi : get minefield appearance
| | -|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  activate MSLogic
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | +| Source | Result | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| +|
ref over MSLogic, TextUi : get minefield appearance
| | +|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  activate MSLogic
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | From e90357f91d98e529363e877eebcc2b3a971f5fdf Mon Sep 17 00:00:00 2001 From: mfjkri Date: Tue, 20 Aug 2024 08:17:18 +0800 Subject: [PATCH 6/7] Add original reference diagram example --- .../plantuml/OriginalSequenceDiagram.puml | 24 +++++++++++++++++++ .../plantuml/ReferenceFrameDiagram.puml | 4 ++-- tutorials/plantUml.md | 15 ++++++++---- 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 tutorials/images/plantuml/OriginalSequenceDiagram.puml diff --git a/tutorials/images/plantuml/OriginalSequenceDiagram.puml b/tutorials/images/plantuml/OriginalSequenceDiagram.puml new file mode 100644 index 00000000..7ac55f20 --- /dev/null +++ b/tutorials/images/plantuml/OriginalSequenceDiagram.puml @@ -0,0 +1,24 @@ +@startuml + +hide footbox +skinparam sequenceReferenceBackgroundColor #f7807c + +actor Player + +participant ":TextUi" as TextUi #EE82EE +participant ":MSLogic" as MSLogic #90EE90 + +Player -> TextUi : mark x y +TextUi -> MSLogic : markCellAt(x, y) +return + +'This sequence can be abstracted into a reference frame for simplicity +TextUi -> MSLogic : getAppearanceOfCellAt(x, y) +MSLogic -> TextUi : getConfig() +TextUi --> MSLogic : config +MSLogic --> TextUi : cellAppearance +'--- + +TextUi --> Player : Show updated minefield + +@enduml diff --git a/tutorials/images/plantuml/ReferenceFrameDiagram.puml b/tutorials/images/plantuml/ReferenceFrameDiagram.puml index 2cce5be9..9d61d33d 100644 --- a/tutorials/images/plantuml/ReferenceFrameDiagram.puml +++ b/tutorials/images/plantuml/ReferenceFrameDiagram.puml @@ -8,9 +8,9 @@ participant ":MSLogic" as MSLogic #90EE90 group sd get minefield appearance 'Contents of reference frame TextUi -> MSLogic : getAppearanceOfCellAt(x, y) - activate MSLogic + MSLogic -> TextUi : getConfig() + TextUi --> MSLogic : config MSLogic --> TextUi : cellAppearance - deactivate MSLogic end @enduml diff --git a/tutorials/plantUml.md b/tutorials/plantUml.md index f725079a..3f01b2dd 100644 --- a/tutorials/plantUml.md +++ b/tutorials/plantUml.md @@ -281,9 +281,14 @@ Explicitly define all symbols to avoid any potential layout mishaps. ### Using reference frames -Reference frames in PlantUML sequence diagrams allow you to group and reuse sequences of interactions. They help improve diagram readability and reduce repetition in complex scenarios. Here's how to use them effectively: +Reference frames in PlantUML sequence diagrams allow you to **group and reuse sequences** of interactions, which helps improve readability and reduce repetition in complex scenarios. By encapsulating sequences into reference frames, you can also **reduce complexity**, making it easier to manage and understand the overall flow of interactions within your diagrams. -| Source | Result | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| -|
ref over MSLogic, TextUi : get minefield appearance
| | -|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  activate MSLogic
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | +Refer to the following example: + + +The sequence diagram illustrates two main actions: marking a cell and retrieving its appearance. We can simplify the diagram by moving the latter into a new reference frame. + +| Source | Result | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| +| **Replace**

TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
MSLogic -> TextUi : getConfig()
TextUi --> MSLogic : config
MSLogic --> TextUi : cellAppearance
**with**

ref over MSLogic, TextUi : get minefield appearance
| | +|
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  MSLogic -> TextUi : getConfig()
  TextUi --> MSLogic : config
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| | From 6bb9b1288b08440ccde3726898d097b6d34547c5 Mon Sep 17 00:00:00 2001 From: mfjkri Date: Tue, 20 Aug 2024 08:19:20 +0800 Subject: [PATCH 7/7] Update phrasing --- tutorials/plantUml.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/plantUml.md b/tutorials/plantUml.md index 3f01b2dd..f6e51fe1 100644 --- a/tutorials/plantUml.md +++ b/tutorials/plantUml.md @@ -290,5 +290,5 @@ The sequence diagram illustrates two main actions: marking a cell and retrieving | Source | Result | |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| -| **Replace**

TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
MSLogic -> TextUi : getConfig()
TextUi --> MSLogic : config
MSLogic --> TextUi : cellAppearance
**with**

ref over MSLogic, TextUi : get minefield appearance
| | +| **Replacing**

TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
MSLogic -> TextUi : getConfig()
TextUi --> MSLogic : config
MSLogic --> TextUi : cellAppearance
**with**

ref over MSLogic, TextUi : get minefield appearance
| | |
group sd get minefield appearance
  'Contents of reference frame
  TextUi -> MSLogic : getAppearanceOfCellAt(x, y)
  MSLogic -> TextUi : getConfig()
  TextUi --> MSLogic : config
  MSLogic --> TextUi : cellAppearance
  deactivate MSLogic
end
| |