グラフと図

Doxygenは、C++クラスの継承図を生成するための組み込みサポートを備えています。

Doxygenは、Graphvizの「dot」ツールを使用して、より高度な図やグラフを生成できます。Graphvizはオープンソースのクロスプラットフォームのグラフ描画ツールキットで、https://graphviz.dokyumento.jp/で見つけることができます。

パスに「dot」ツールがある場合、Doxygenがそれを使用できるように、設定ファイルでHAVE_DOTYESに設定できます。

Doxygenは、「dot」ツールを使用して以下のグラフを生成します。

  • クラス階層のグラフィカルな表現が、テキスト形式の表現とともに描画されます。現在、この機能はHTMLのみでサポートされています。
    警告: 多くのクラスが共通の基底クラスから派生している非常に大きなクラス階層がある場合、生成される画像が一部のブラウザでは処理しきれないほど大きくなることがあります。
  • 直接的および間接的な継承関係を示す継承グラフが、ドキュメント化された各クラスに対して生成されます。これにより、組み込みのクラス継承図の生成は無効になります。
  • 少なくとも1つの他のファイルを含む、ドキュメント化された各ファイルに対してインクルード依存関係グラフが生成されます。現在、この機能はHTMLとRTFのみでサポートされています。
  • 逆インクルード依存関係グラフも生成され、ある(ヘッダー)ファイルを他のどのファイルがインクルードしているかを示します。
  • ドキュメント化された各クラスと構造体に対して、以下の内容を示すグラフが描画されます。
    • 基底クラスとの継承関係。
    • 他の構造体およびクラスとの使用関係(例:クラスAがクラスB型のメンバ変数m_aを持つ場合、AからBへの矢印がm_aというラベル付きで表示されます)。
  • CALL_GRAPHがYESに設定されている場合、各関数に対してグラフィカルな呼び出しグラフが描画され、その関数が直接的または間接的に呼び出す関数が示されます(セクション\callgraphおよびセクション\hidecallgraphも参照してください)。
  • CALLER_GRAPHがYESに設定されている場合、各関数に対してグラフィカルな呼び出し元グラフが描画され、その関数が直接的または間接的に呼び出される関数が示されます(セクション\callergraphおよびセクション\hidecallergraphも参照してください)。
  • DIRECTORY_GRAPHYESに設定されている場合、Doxygenは各ディレクトリのディレクトリ依存関係を示すグラフを生成します。グラフではディレクトリがボックスとして表示されます。サブディレクトリは親ディレクトリのボックス内にネストして表示されます。グラフの深さはDIR_GRAPH_MAX_DEPTHで設定されます。ディレクトリ間のインクルード依存関係は矢印として表示されます。

レイアウトファイルを使用することで、実際に表示されるグラフを決定できます。

オプションのDOT_GRAPH_MAX_NODESMAX_DOT_GRAPH_DEPTHは、さまざまなグラフのサイズを制限するために使用できます。

HTMLおよびRTFのクラス図の要素は、以下の意味を持ちます。

  • 黄色のボックスはクラスを示します。ボックスの右下隅に小さなマーカーがある場合、そのクラスに隠された基底クラスが含まれていることを示します。クラス図の場合、現在の最大ツリー幅は8要素です。ツリーがこれより広い場合、一部のノードは非表示になります。ボックスが破線パターンで塗りつぶされている場合、継承関係は仮想です。
  • 白いボックスは、そのクラスのドキュメントが現在表示されていることを示します。
  • 灰色のボックスは、ドキュメント化されていないクラスを示します。
  • 実線の濃い青色の矢印は、public継承を示します。
  • 破線の濃い緑色の矢印は、protected継承を示します。
  • 点線の濃い緑色の矢印は、private継承を示します。

{\LaTeX}のクラス図の要素は、以下の意味を持ちます。

  • 白いボックスはクラスを示します。ボックスの右下隅にあるマーカーは、そのクラスに隠された基底クラスがあることを示します。ボックスが破線の境界を持つ場合、これは仮想継承を示します。
  • 実線の矢印は、public継承を示します。
  • 破線の矢印は、protected継承を示します。
  • 点線の矢印は、private継承を示します。

dotツールによって生成されたグラフの要素は、以下の意味を持ちます。

  • 白いボックスは、クラス、構造体、またはファイルを示します。
  • 赤い境界線を持つボックスは、表示されているよりも多くの矢印を持つノードを示します!言い換えれば、このノードに関してグラフは切り詰められています。グラフが時々切り詰められる理由は、画像が大きくなりすぎるのを防ぐためです。dotで生成されたグラフの場合、Doxygenは結果画像の幅を1024ピクセルに制限しようとします。
  • 黒いボックスは、そのクラスのドキュメントが現在表示されていることを示します。
  • 濃い青色の矢印は、インクルード関係(インクルード依存関係グラフの場合)またはpublic継承(他のグラフの場合)を示します。
  • 濃い緑色の矢印は、protected継承を示します。
  • 濃い赤色の矢印は、private継承を示します。
  • 紫色の破線の矢印は「使用」関係を示し、矢印のエッジにはその関係の原因となる変数にラベルが付けられます。クラスAがクラスBを使用するのは、クラスAがC型のメンバ変数mを持ち、BがCのサブタイプである場合です(例:CBB*T<B>*のいずれかである可能性があります)。

ディレクトリ依存関係グラフの要素は、以下の意味を持ちます。

  • 太字の境界線を持つボックスは、ディレクトリ依存関係グラフが生成されたディレクトリを示します。
  • 赤の実線の境界線を持つボックスは、サブディレクトリがグラフに表示されていないディレクトリ(「切り詰められた」)を示します。グラフに表示されるサブディレクトリの深さを設定するには、DIR_GRAPH_MAX_DEPTHを参照してください。
  • 赤の破線の境界線を持つボックスは、親ディレクトリもグラフに表示されていない切り詰められたディレクトリを示します。
  • 赤以外の破線の境界線を持つボックスは、すべてのサブディレクトリが表示されているわけではないが、少なくとも1つのサブディレクトリが表示されていることを示します。
  • 薄い灰色の境界線を持つボックスは、以下の2つの属性を両方持つディレクトリを示します。
    • その親ディレクトリは表示されません。
    • 少なくとも1つのサブディレクトリが表示されます。
  • 背景色がないボックスは、表示されている元の親ディレクトリのサブディレクトリではないディレクトリを示します。元とは、ディレクトリ依存関係グラフが表示されているディレクトリのことです。
  • 2つのボックス間の矢印は、2つのディレクトリ間のインクルード依存関係を示します。インクルード依存関係は、あるディレクトリのファイルが別のディレクトリのファイルをインクルードしている場合に存在します。インクルード依存関係に関与しているディレクトリがグラフに表示されない場合、矢印は表示されている最初の親ディレクトリに接続されます。この親ディレクトリは切り詰められたものとして表示されます(上記参照)。

以下は、Doxygenが生成できるさまざまな図を示す一対のヘッダーファイルです。

diagrams_a.h

#ifndef DIAGRAMS_A_H
#define DIAGRAMS_A_H
class A { public: A *m_self; };
#endif

diagrams_b.h

#ifndef DIAGRAMS_B_H
#define DIAGRAMS_B_H
class A;
class B { public: A *m_a; };
#endif

diagrams_c.h

#ifndef DIAGRAMS_C_H
#define DIAGRAMS_C_H
#include "diagrams_c.h"
class D;
class C : public A { public: D *m_d; };
#endif

diagrams_d.h

#ifndef DIAGRAM_D_H
#define DIAGRAM_D_H
#include "diagrams_a.h"
#include "diagrams_b.h"
class C;
class D : virtual protected A, private B { public: C m_c; };
#endif

diagrams_e.h

#ifndef DIAGRAM_E_H
#define DIAGRAM_E_H
#include "diagrams_d.h"
class E : public D {};
#endif

Doxygenによって生成された対応するHTMLドキュメントについては、こちらをクリックしてください。図を生成するにはEXTRACT_ALL = YESが使用されていることに注意してください。

次のセクションに進むか、インデックスに戻ります。