次: , 前: Typed Variables, 上: Def Cmds in Detail


15.4.5 オブジェクト指向プログラミング

オブジェクト指向プログラミングで使用するような,抽象的なオブジェクトに関 する記述を書式化するためのコマンドには以下のものがあります.クラスは抽象 的なオブジェクトの定義された型です.クラスのインスタンスはクラスの型を持 つ特定のオブジェクトです.インスタンス変数はクラスに属するがそれぞれのイ ンスタンスが独自の値を持つ変数です.

定義では,クラス名はクラスに対するプログラミングシステムで本当に定義され た名前の場合,@codeをその周りに書くべきです.そうしない場合,通 常のテキストフォントで印刷されます.

@defcv category class name
@defcvコマンドは,オブジェクト指向プログラミングで,クラスに関連 する変数に対する一般的な定義コマンドです.@defcvコマンドは三つの 引数をとります.定義している事柄のカテゴリ名,属するクラス,そしてその名 前です.このようにします.
          @defcv {Class Option} Window border-pattern
          ...
          @end defcv
     

これは,Windowクラスのborder-patternクラスオプションの定義 の最初の行の書き方を説明しています.

テンプレートは以下の通りです.

          @defcv category class name
          ...
          @end defcv
     

@defcvは変数索引に項目を作成します.


@defivar class name
@defivarコマンドは,オブジェクト指向プログラミングのインスタンス 変数に対する定義コマンドです.@defivarは`@defcv {Instance Variable} ...'と同じです.

テンプレートは以下の通りです.

          @defivar class instance-variable-name
          body-of-definition
          @end defivar
     

@defivarは変数索引に項目を作成します.


@deftypeivar class data-type name
@deftypeivarコマンドは,オブジェクト指向プログラミングの型を付け られたインスタンス変数に対する定義コマンドです.それは,@defivar に,インスタンス変数の型を指定するためのdata-typeパラメータが付い たものに似ています.@deftypeivarは変数索引に項目を作成します.


@defop category class name arguments...
@defopコマンドは,オブジェクト指向プログラミングのメソッドに似た 構成要素に対する定義コマンドです.これらの構成要素は関数のように引数を取 りますが,オブジェクトの特定のクラスに関連付けされています.

例えば,メソッドとしてクラスに関連付けされているラッパー(wrappers) と呼ばれる概念を持つシステムもありますが,それは関数というよりマクロのよ うに動作します.@defop Wrapperをこれらの一つとしての記述に使用す ることが可能です.

メソッドとオペレーション(operations)を分けた方が便利なときもありま す.オペレーションをメソッドの詳述と考えることができます.このため,ウィ ンドウシステムは全てのウィンドウクラスがexposeと言う名前のメソッ ドを持つことを指定できます.我々は,このウィンドウシステムが一般的なウィ ンドウ上にexposeオペレーションを定義していると言っているのです. 特に,オペレーションは名前を持ち,引数のパターンも指定されています.全て のオペレーションを実装したメソッドは,オペレーションで使用されるアプリケー ションが実装したメソッドを知ることなくそれを行うので.同じ引数を受け入れ るようにする必要があります.

メソッドよりオペレーションを説明した方がより意味があることもよくあります. 例えば,ウィンドウアプリケーション開発者は,exposeオペレーション を知っている必要がありますが,与えられたウィンドウのクラスが,このオペレー ションを実装した独自のメソッドを持つかどうかを考慮する必要はありません. このオペレーションを記述するため以下のように書きます.

          @defop Operation windows expose
     

@defopコマンドは,行の最初に書かれ,同じ行にオペレーションのカテ ゴリの全体的な名前,オペレーションクラスの名前,オペレーションの名前,そ して,存在する場合その引数を続けます.

テンプレートは以下の通りです.

          @defop category class name arguments...
          body-of-definition
          @end defop
     

@defopは`expose on windows'のような項目を,関数索 引に作成します.


@deftypeop category class data-type name arguments...
@deftypeopコマンドは,オブジェクト指向プログラミングの型付のオペ レーションに対する定義コマンドです.それは@defopに,メソッドの戻 り値を指定するdata-typeパラメータを加えたものに似ています. @deftypeopは関数索引に項目を作成します.
@defmethod class name arguments...
@defmethodコマンドは,オブジェクト指向プログラミングのメソッドに 対する定義コマンドです.メソッドは特定のオブジェクトのクラスとそのサブク ラスのためのオペレーションを実装する関数のようなものです.

@defmethodは`@defop Method ...'と同じです.コマンドは 行の最初に書かれ,メソッドのクラス名,メソッド名,そして存在する場合はそ の引数が続きます.

例えば,以下のようにします.

          @defmethod bar-class bar-method argument
          ...
          @end defmethod
     

これは,クラスbar-classbar-methodと呼ばれるメソッドに対 する定義を説明しています.メソッドは引数を取ります.

テンプレートは以下の通りです.

          @defmethod class method-name arguments...
          body-of-definition
          @end defmethod
     

@defmethodは,関数索引に`bar-method on bar-class' のような項目を作成します.

@deftypemethod class data-type name arguments...
@deftypemethodコマンドは,C++やJavaのようなオブジェクト指向の型 のある言語のメソッドのに対する定義コマンドです.それは, @defmethodコマンドにメソッドの戻り値を指定するための data-typeパラメータを追加したものに似ています.