Ansicht
Dokumentation

CL_TCL_GRAPH - Klasse zur Darstellung von Graphen

CL_TCL_GRAPH - Klasse zur Darstellung von Graphen

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Die Klasse CL_TCL_GRAPHdient zur Darstellung eine gerichteten Graphen. Sie basiert auf die Klasse CL_TCL_AGGREGATE und implementiert das Interface IF_TCL_GRAPH. Ein Graph besteht aus eine Objekt-Liste von Knoten (engl. verticies). Diese Knoten werden über die Klasse CL_TCL_VERTEX dargestellt. Die Knoten können über Kanten (engl. edges) in Beziehung gesetzt werden. Die Klasse CL_TCL_EDGE dient in unserem Fall zur Darstellung dieser Kante.

Eine allgemeine Einführung in Graphen-Algorithmen würde den Rahmen dieser Dokumentation sprengen. Wir empfehlen daher einschlägige Dokumentationen.

Beziehungen

Die Klasse CL_TCL_GRAPHbasiert auf der Klasse CL_TCL_AGGREGATE. Daher gibt es eine enge Beziehung zur Klasse CL_TCL_ITERATOR. Für die Iteration über den Graphen wurden mehrere Spezialisierungen der Klasse CL_TCL_ITERATORimplementiert, wie zum Beispieldie Klassen CL_TCL_GRAPH_DEPTH_FIRST_IT und CL_TCL_GRAPH_BREADTH_FIRST_IT.

Ausnahmen

  • CX_TCL_UNKNOWN_VERTEX wird ausgelöst, wenn der über den ParameterSOURCE oder DESTINATION angegebene Knoten im Graphen nicht bekannt ist.
  • CX_TCL_EDGE_ALREADY_EXISTS wird ausgelöst, wenn die Kannte bereits vorhanden ist.

Beispiel

  data my_graph type ref to cl_TCL_graph.

  data my_vertex type ref to cl_TCL_vertex.

  data my_graph_iterator type ref to cl_TCL_graph_iterator.

  create object my_graph.

  my_graph->add_vertex( 'choose clothes' ).

  my_graph->add_vertex( 'dress' ).

  my_graph->add_vertex( 'eat breakfast' ).

  my_graph->add_vertex( 'leave' ).

  my_graph->add_vertex( 'make coffee' ).

  my_graph->add_vertex( 'make toast' ).

  my_graph->add_vertex( 'pour juice' ).

  my_graph->add_vertex( 'shower' ).

  my_graph->add_vertex( 'wake up' ).

  create object my_graph->iterator type cl_TCL_graph_iterator

    exporting reference = my_graph.

  my_graph->add_edge( source = 'wake up' destination = 'choose clothes' ).

  my_graph->add_edge( source = 'wake up' destination = 'make coffee' ).

  my_graph->add_edge( source = 'wake up' destination = 'make toast' ).

  my_graph->add_edge( source = 'wake up' destination = 'pour juice' ).

  my_graph->add_edge( source = 'wake up' destination = 'shower' ).

  my_graph->add_edge( source = 'choose clothes' destination = 'dress' ).

  my_graph->add_edge( source = 'eat breakfast' destination = 'leave' ).

  my_graph->add_edge( source = 'make coffee' destination = 'eat breakfast' ).

  my_graph->add_edge( source = 'make toast' destination = 'eat breakfast' ).

  my_graph->add_edge( source = 'pour juice' destination = 'eat breakfast' ).

  my_graph->add_edge( source = 'shower' destination = 'dress' ).

* starting point is 'wake up'

  my_vertex ?= my_graph->find_vertex( 'wake up' ).

  create object my_graph->iterator type cl_TCL_graph_breadth_first_it

        exporting reference = my_graph

                  start     = my_vertex.

  while my_graph->iterator->next_entry( ) = cl_TCL=>rc_ok.

    write: /  my_graph_iterator->vertex->name.

  endwhile.

Ein ausführliches Beispiel finden sie im Programm TCL_GRAPH_EXAMPLE.

Hinweise

Sollte sich ihr Graph aus vielen Knoten zusammensetzen, die nur eine kurze Lebensdauer haben, dann ist die Verwendung von Events zur Synchronisation der Iteratoren zu vermeiden. Jeder registrierte Event-Handler stellt eine Referenz auf das Iterator-Objekt dar, welches ein automatisches Abräumen verhindert. Sollten sie Event-Handler benötigen, dann vergessen sie bitte nicht, die Registrierung mit dem Löschen des Objektes zu entfernen.

Weiterführende Informationen

Wer sich intensiver mit dem Thema Graphen beschäftigen möchte, dem können wir folgende Fachbücher empfehlen:

  • Algorithemen und Datenstrukturen / K.H. Böhling, U. Kulisch, H. Maurer
  • An Introduction to the Analysis of Algorithms / Robert Sedgewick





TXBHW - Original Tax Base Amount in Local Currency   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6103 Date: 20240328 Time: 205606     sap01-206 ( 69 ms )