Doxygen latest release v1.8.11 - last update Mon Oct 25 2021

グラフと図

Doxygen は、組み込み機能として、C++ クラスの継承図の生成をサポートしています。

Doxygen は、graphviz の "dot" ツールを利用して、より高度な図(ダイアグラム)とグラフを生成することができます。 Graphviz は、「オープンソース」かつクロスプラットフォームなグラフ描画ツールキットで、 http://www.graphviz.org/ にあります。

コマンドパスに "dot"ツールを指定していれば、設定ファイルで HAVE_DOTYES にしてください。doxygenはそれを使います。

Doxygen は "dot" ツールを利用して以下のようなグラフを生成します。

  • クラス階層を示すグラフが描画され、テキストでの説明も出力されます。 現在、この機能は HTML でのみサポートされています。
    警告: 1つの基底クラスから多くのクラスが派生しているような 巨大なクラス階層では、生成される画像が大きくなりすぎていくつかの ブラウザでは扱うことができなくなる可能性があります。
  • ドキュメント付けされた各クラスについて、直接および間接的な継承関係を 示すグラフが生成されます。これは、ビルトインのクラス継承図生成機能を無効にします。
  • ドキュメント付けされ、少なくとも他の1つのファイルをインクルードしているファイルについて、インクルード依存関係のグラフが生成されます。 この機能は現在、HTML、RTFだけサポートしています。
  • (ヘッダー)ファイルについて、どのファイルにインクルードされているかを示す被インクルード依存グラフが生成されます。
  • ドキュメント付けされたクラスや構造体について、以下のことを示すグラフが描画されます。
    • 基底クラスとの継承関係。
    • 他の構造体やクラスとの利用関係 (たとえば、クラス A にクラス B 型のメンバー変数 m_a があれば、A には、m_a というラベルの付いた、B に向かう矢印がつく)。
  • CALL_GRAPH が YES であれば、各関数が直接・間接に呼び出す関数を示す、呼び出し関係図が描画されます。(セクション\callgraph と セクション\hidecallgraph を参照ください)
  • CALLER_GRAPH が YES であれば、各関数について、直接・間接に呼び出しを受ける関数を示す、被呼び出し関係図が描画されます。(セクション\callergraph とセクション \hidecallergraph を参照ください)

出力のカスタマイズを使って、どのグラフを表示するかを決められます。

DOT_GRAPH_MAX_NODESMAX_DOT_GRAPH_DEPTH を使って、さまざまなグラフのサイズを制限できます。

HTML と RTF では、クラス図における要素には以下のような意味があります。

  • 黄色のボックスはクラスを示します。ボックスの右下角には、 そのクラスが隠れた基底クラスを持っていることを示す小さなマーカーが 付くことがあります。 クラス図において、木の最大幅は、現在、8 要素です。 木の幅がそれより大きくなると、いくつかのノードが隠れてしまいます。 ボックスが破線で埋められている場合は、継承関係はvirtualです。
  • 白いボックスは、クラスのドキュメントが現在表示されていることを示します。
  • 灰色のボックスは、ドキュメント付けされていないクラスを示します。
  • 暗青色の実線矢印は公開 (public) 継承を示します。
  • 暗緑色の破線矢印は限定公開 (protected) 継承を示します。
  • 暗緑色の点線矢印は非公開 (private) 継承を示します。

では、クラス図における要素には以下のような意味があります。

  • 白いボックスは、クラスを示します。 ボックスの右下角のマーカーは、 クラスが隠れた基底クラスを持っていることを示します。 ボックスの枠が破線になっている場合は、仮想継承であることを示します。
  • 実線矢印は、公開 (public) 継承を示します。
  • 破線矢印は、限定公開 (protected) 継承を示します。
  • 点線矢印は、非公開 (private) 継承を示します。

dot ツールによって生成されるクラスにおける要素には以下のような意味があります。

  • 白いボックスは、クラス、構造体またはファイルを示します。
  • 枠の赤いボックスは、描かれているよりも 多くの矢印を持つノードであることを示します。 言いかえれば: このノードについては、グラフが切りつめられています。 グラフが時々切りつめられるのは、画像があまりにも大きくなりすぎるのを防ぐためです。 dot によって生成されるグラフについて、Doxygen は、生成される画像の幅を1024 ピクセルまでに制限しようとします。
  • 黒いボックスは、現在、クラスのドキュメントが表示されていることを示します。
  • 暗青色の矢印は、インクルード関係 (インクルード依存グラフの場合) または公開継承 (その他のグラフの場合) を示します。
  • 暗緑色の矢印は、限定公開 (protected) 継承を示します。
  • 暗赤色の矢印は、非公開 (private) 継承を示します。
  • 紫色の破線の矢印は、"利用" 関係を示します。 その矢印の先は、関係を示す変数でラベル付けされています。 クラス B が クラス C のサブタイプであって、 クラス AC の型のメンバー変数 m を持つなら、 クラス A はクラス B を利用していることになります (たとえば、CBB*T\<B\>* など)。

以下のヘッダーファイルは、一つにまとまって、 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 が設定されています)。



のセクションに行く / インデックス に戻る


This page was last modified on Mon Oct 25 2021.
© 1997-2021 Dimitri van Heesch, first release 27 oct 1997.
© 2001 OKA Toshiyuki (Japanese translation).
© 2006-2021 TSUJI Takahiro (Japanese translation).
© 2006-2014 TAKAGI Nobuhisa (Japanese translation).