Come modellare manualmente un'attività UML Diagramma su JSON con Qt C ++?

0

Supponiamo di avere una sorta di diagramma di attività UML con forcelle e join 1- n . L'assegnazione dei singoli nodi l'uno rispetto all'altro è definita da una tabella di relazioni XML tramite UUID in cui ogni UUID di attributo source e target rappresenta tale nodo individuale.

Il seguente esempio evidenziato dovrebbe chiarire questo:

IlflussodeldiagrammaUMLiniziada

source="b1edbc32-a6f0-4a41-a836-0482d80db226" (nodo di connessione 1)

e termina con

target = "ef347ef9-3b53-45ab-918e-6f8b29a68dc0" (nodo di connessione 5)

Nel mezzo puoi vedere nel "flusso" da una (o più) fonti a uno (o più) bersagli. La forcella / giuntura esemplare è colorata in verde / azzurro.

Vorrei ora mappare questa struttura in un array JSON annidato, ad es.

"nodes": [
    {
        "name": "initNode",
        "uid": "b1edbc32-a6f0-4a41-a836-0482d80db226",
        "nodes": [
            {
                "name": "followUpNode",
                "uid": "9ea88f3e-4b80-473d-a86f-0ff16b790727",
                "nodes": [

                 // ...   

                ]    
            }
        ]
    }
]

Qual è l'approccio di programmazione più adatto per ottenere questo risultato con Qt5 C ++ che utilizza le QDom ... e QJson ... ? Ho solo bisogno di alcuni impulsi stimolanti.

Un qualche tipo di looping .... o ricorsione? Mentre JSON come formato dati per l'output è obbligatorio, il layout di esempio JSON mostrato non lo è. Se esiste un approccio migliore rispetto a quegli array di% co_de nidificati (come gestire il parallelismo multiplo di fork / join ?!), per favore fatemelo sapere.

Ogni esempio è apprezzato!

    
posta FlKo 07.11.2018 - 22:29
fonte

1 risposta

1

Il tuo file XML descrive un grafico diretto. Questo grafico è definito da un insieme di nodi univoci identificati da un uid (e forse alcuni più attributi) e da un insieme di spigoli diretti che collegano un nodo di origine a un nodo di destinazione.

Non è completamente chiaro ciò che vuoi rappresentare nel tuo JSON:

  • È il grafico completo? In questo caso, la struttura nidificata potrebbe rappresentare solo un grafico senza cicli (cioè un albero, secondo la definizione dell'albero nella teoria dei grafi). Non appena hai un ciclo:

    • lo stesso nodo potrebbe essere ridefinito più volte come appare nell'annidamento di diversi nodi;
    • questo potrebbe essere evitato solo usando l'algoritmo spanning tree per rimuovere i cicli, ma in questo caso si mancherebbero alcuni bordi.
  • Oppure è un percorso lungo il grafico ? In questo caso il nesting esprime solo una successione di nodi attraversati dal percorso e l'uid nel JSON non documenta una definizione dei nodi (da definire altrove). La conseguenza è questa:

  • nella raccolta radice, avresti tutto il possibile nodo iniziale

  • i nodi annidati contengono solo un singolo nodo annidato (vale a dire il nodo successivo da attraversare).

Per quest'ultimo, tutto ciò che devi fare è costruire il grafico in memoria e trovare i nodi iniziali (cioè nessun fronte in entrata). Quindi, per ogni nodo iniziale, potresti prendere in considerazione un approfondimento del primo attraversamento del grafo fino a quando non leggi un nodo finale (ovvero non esce nodo):

  • È un algoritmo che è implementato molto facilmente in modo ricorsivo. Sfortunatamente, la versione ricorsiva non semplifica la scrittura dall'inizio alla fine di ogni percorso trovato.
  • Un'implementazione più elaborata consiste nell'utilizzare una coda su cui si rimuove il primo percorso, estendere il suo ultimo nodo utilizzando tutti i bordi in uscita e quindi accodare tutti i percorsi estesi. Ciò semplifica la produzione di JSON poiché ogni percorso che raggiunge un nodo finale può quindi essere scritto nel file JSON
risposta data 08.11.2018 - 00:46
fonte

Leggi altre domande sui tag