From 4a96d7750a0fcaa80cf93fb052f82f6acdf21804 Mon Sep 17 00:00:00 2001 From: OlesiaSub Date: Wed, 26 Oct 2022 17:40:03 +0300 Subject: [PATCH] add graph desc --- .../org/objectionary/ddr/graph/doc/README.md | 35 ++++++++++++++++++ .../ddr/graph/doc/diag.drawio.png | Bin 0 -> 16612 bytes 2 files changed, 35 insertions(+) create mode 100644 src/main/kotlin/org/objectionary/ddr/graph/doc/README.md create mode 100644 src/main/kotlin/org/objectionary/ddr/graph/doc/diag.drawio.png diff --git a/src/main/kotlin/org/objectionary/ddr/graph/doc/README.md b/src/main/kotlin/org/objectionary/ddr/graph/doc/README.md new file mode 100644 index 00000000..60281f33 --- /dev/null +++ b/src/main/kotlin/org/objectionary/ddr/graph/doc/README.md @@ -0,0 +1,35 @@ +### Inheritance graph + +Graph module takes a collection of `org.w3c.dom.Document` objects and constructs an inheritance graph, connecting all of them. +With this graph you can access the list of all the attributes present in an object in constant time. + +#### Example: + +Consider the following EO program. + +``` +[] > animal + [] > live + [] > eat + stdout > @ + "Animal is eating" + stdout > @ + "Animal is alive" + [t] > talk + live > @ + +[] > mouse + animal > @ + [] > mouse_live + ^.live > @ + +[] > cat + animal > @ + [m] > meow + ^.talk "Meow" > @ +``` + +The resulting graph will look like below. Each node is represented with a rectangle. All the attributes +of the node are listed in the rectangle. + +![](diag.drawio.png) diff --git a/src/main/kotlin/org/objectionary/ddr/graph/doc/diag.drawio.png b/src/main/kotlin/org/objectionary/ddr/graph/doc/diag.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..ab57017c0e3a7af964ef335ce41056a2118e6d0b GIT binary patch literal 16612 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 literal 0 HcmV?d00001