プログラミング応用b 第3回 『Javadoc、APIドキュメントの利用方法、アノテーション』


1. 【はじめに】

 Javaには「窓を開く」「通信する」「ファイルを読み書きする」といった高度な機能を
持つクラスとそれらをパッケージまとめたものが元から用意されてる。これはJava API
呼ばれる。
 実用的なソフトウェア・本格的なソフトウェアを作成するためには,このJava APIを知る
必要がある。今回は,
  ・Java API のマニュアルの見方,
  ・Javaのソースプログラムからマニュアルを自動生成する javadoc
  ・2004年にJavaに導入されたアノテーション
について解説する。


2. 【APIとJava API】

●API

  多少なりとも付加価値の高いソフトウェアを作成するためには,

  ・音を出す
  ・ウィンドウを表示する
  ・グラフィックデータを表示する
  ・データ通信をしたりする

といった,機能を利用する必要がある。一般に,このような機能はオペレーティングシステム
APIとして提供している。APIとは,Application Programming Interfaceの略で,簡単に言
えば,様々な機能を,プログラムから利用できる形にまとめたものである。
 一般的なプログラム言語では,Windows OS用のプログラムを作成しようとすれば,Windows
に用意されているAPIを利用することになるし,Macintosh用のプログラムを作成する場合は,
MacOSに用意されているAPIを利用することになる。
 プログラミング技術を実践的に身につけていく最初の一歩は,APIの積極的な利用であると言
える。


3. 【Java API】

 JavaはどのOSの上でも同じように動作する。これは,Java自体に非常に高機能なAPIが元から用意されており,
このAPIを使うだけで非常に高度なソフトウェアを作成できるからである。

  このJavaに元から用意されているAPIを,Java APIなどと呼ぶ(下図)。
Java API は多数のクラス・インタフェイスを集めた形になっており,いくつかのパッケージにまとめられている。


※Javaのソースプログラム(①)では,Java API (③)の様々な機能を利用(②)して動作するように記述する。
 こうして書かれたJavaのソースプログラム(①)をJavaコンパイラ(④)がコンパイル(⑤)することで,Java用の
実行可能プログラム(⑥)となる。
 もちろん, コンパイルしてできあがったJava用の実行可能プログラム(⑥)は,Java API の機能を呼び出し(⑦)
て動作することになる。

  Java用実行可能プログラム(⑥)は,Javaプラットフォーム(⑧)上で動作する。 Javaプラットフォームは, 
Java 仮想マシン(⑨)と呼ばれる仮想的なCPUと Java API の組からなる。
 Java 仮想マシン(⑨)は,実際にはソフトウェアであることがほとんどで,Java用実行可能プログラム(⑥)内の命令を
解釈・実行する(⑩)。
 Java 仮想マシン(⑨)自体は,そのコンピュータ環境で動作する。例えば,上図の Windows プラットフォーム (⑪)
などである。

  Windows プラットフォームは, Intel社のPentium系CPU(⑫)と,Windows オペレーティングシステムが用意する
Windows API (⑬)からなる。
 上図の場合,Java 仮想マシン(⑨)自体は, Pentium系CPU(⑫)によって解釈・実行される(⑭)。
 また,実は Java API (③)の機能の一部は,間接的に Windows API (⑬) の機能を呼び出す(⑮)ことによって実現
されている。


4. 【Java APIのドキュメント】

 Java APIの仕様書(Java APIドキュメント)の見方を解説する。まず,Java API ドキュメント
が何処で参照できるかを紹介する。なお,基本的にJava API ドキュメントは,htmlファイルで
提供されている。

●Javaの公式Webサイト

 Javaは米Sun microsystems社が作り上げたプログラミング言語であるため,現在Javaの権利を
持つオラクル社がJavaの 公式Webサイト https://java.com/ja/ を開設している。この公式サイト
にJavaプラットフォーム(動作環境)や開発環境(SDK, Software Development Kit),ドキュメン
トなどが公開されている。

●Javaの種類とバージョン

 ドキュメントを見る前に,Javaの種類について簡単に紹介する。Javaには,以下のような種類が
ある。

  ・スタンダード・エディション(Standard Edition, SE)
    標準的な構成のもの。
  ・エンタープライズ・エディション(Enterprise Edition, EE)
    ネットワーク対応の分散アプリケーションなどに用いられる
  ・マイクロ・エディション(Micro Edition, ME)
    携帯電話やPDAなどの組み込み系デバイスに搭載するため,コンパクトにまとめられたもの

本授業で対象とするのは,スタンダードエディション(SE)である。

 Javaは登場以来,幾度となく改良を加えられ,バージョンアップを繰り返してきた(下表)。1998年に
発表された 1.2 は,大きなバージョンアップであり,そのためか「Java 2」という名称を与えられた。
「Java 2」は厳密なバージョン名ではなく,ブランド名のようなもので,2004年発表のバージョン5.0
まで,この「Java 2」というブランド名がついていた。しかし,「Java 2」というブランド名とバージョンが
別に存在すると混乱を招くためか,2006年のバージョン6からは,「Java 6系」という具合に,バージョン
と合わせた呼び方をされるようになった。2017年10月の時点ではスタンダードエディションの
バージョンは, Java 9系(Java SE 9)である。

Javaのバージョン 発表年
1.0 Java 1系 1996
1.1 1997
1.2 Java 2系 1998
1.3 2000
1.4 2002
5.0 2004
6 Java 6系 2006
7 Java 7系 2011
8 Java 8系 2014
9 Java 9系 2017
10 Java 10系 2018/3
11 Java 11系 2018/9
12 Java 12系 2019/03
13 Java 13系 2019/09


 なお,配布されているJavaプラットフォーム・ソフトウェアにも種類が異なるものが2つある。

   ・JRE(Java Runtime Environment)
      Javaプラットフォームの純粋な実行環境部分だけを提供したもの。Javaのプログラムを動
     かすだけならJREだけでよい。

   ・JDK(Java Standard edition Development Kit)
     JREにコンパイラなどの開発ツールを追加した開発用キットをSDK(Software Development
     Kit)と呼ぶ。そして,Java SE用のSDK(Java Standard edition Development Kit)のことを
     JDKと言う。


●APIドキュメントの入手

ドキュメント類は,以下のページから参照・ダウンロードできる。
 ・Javaに関するドキュメントサイト 
  ※このページ上にあるリンクをたどっていくとJavaに関する様々な情報を見ることができる。

 Java API ドキュメントは上記サイトの以下のところにある。
 ・JDK6.0 日本語ドキュメントのページ
 ・JDK7.0 日本語ドキュメントのページ
 ・JDK8.0 日本語ドキュメントのページ
 ・JDK9.0 日本語ドキュメントのページ
 
JDK10.0 日本語ドキュメントのページ
  (一括ダウンロードはこちらから。ただし非常に大きいファイルなので,大学のデスクトップPCにダウンロードしないこと)


5. 【APIドキュメントの読み方】

 APIドキュメントを開くと,次のようなページが表示される(図では,大学のデスクトップPCにインストールされている
Java 1.5.0よりも少し古いバージョン1.4.0のものになっているが,概要はほぼ同じである)。実際にこのページを開いてみよ。
例として JDK8.0のページを開く


 このように,Java APIドキュメントのトップページは3つのパートに分かれている。
これらのパートを仮に
   右:メインフレーム
  左上:パッケージ一覧フレーム
  左下:クラス一覧フレーム
と呼ぶことにしよう。
 各フレームの概要について以下に紹介する。

●メインフレーム

 メインフレームは,パッケージやクラス,インタフェイスなどの情報を詳しく表示するためのフレームである。
メインフレームの上部には,現在何がメインフレームに表示されているかを示すナビゲーションバーがある。最初
は左端の「概要」の項が選択されている。Fig.2の画面のように,初期状態でメインフレームに表示されているのは,
Java 2 SE APIを構成するパッケージの説明付き一覧である。この初期画面こそが「概要」なのである。
 ナビゲーションバーには,「概要」の他に,「パッケージ」「クラス」「使用」「階層ツリー」「非推奨API」
「索引」「ヘルプ」
という項目がある。これらの項目をクリックすると,それぞれのページを呼び出すことができる。
ページによっては,使用できない項目もある。たとえば,Fig.2にように「概要」を表示している状態では,「パッ
ケージ」「クラス」「使用」の項目は使用できない。「概要」以外の各項目の内容については,後述するが,「ヘル
プ」の項目に簡潔に紹介されているので,一度目を通しておこう。

●パッケージ一覧フレームとクラス一覧フレーム

 次に,左側の上下2つのフレームを見てみよう。上部のパッケージ一覧フレームには,「すべてのクラス」という
項目とパッケージの一覧がアルファベット順に表示されている。「すべてのクラス」をクリックすると,Fig.2の画面
のように,クラス一覧フレームには,Java APIに含まれるすべてのクラスの一覧が表示される。
 パッケージ一覧フレームの個々のパッケージ名をクリックすると,その下のクラス一覧フレーム内に,クリックした
パッケージの名称そのパッケージに所属するインタフェイスやクラスなどの一覧がアルファベット順に表示される。
なお,インタフェイスはイタリック体で表示される。
 たとえば,下図Fig.3-①の java.applet パッケージ名をクリックすると,クラス一覧フレーム②には下図に示すよ
うにjava.appletパッケージの名称と,java.appletパッケージに所属するインタフェイスとクラスの一覧が表示される。


●パッケージ情報の表示

 クラス一覧フレーム内に表示されたパッケージの名称をクリックすると,メインフレームにそのパッ
ケージの仕様が表示される。下図(Fig.3)の例では,java.appletのパッケージ名称の部分③をクリック
し,メインフレームにjava.appletパッケージの説明が表示される(④)。
 こうしてパッケージ情報を表示した場合,メインフレームのナビゲーションバーは,「パッケージ」
の項目がアクティブになっている(⑤)。


 パッケージ情報を表示しているとき,ナビゲーションバーの「使用」「階層ツリー」「非推奨API」
をクリックすると,それぞれ次のような情報がメインフレームに表示される。

 ■「使用」

   そのパッケージを使用している他のパッケージや,どのクラスがどのパッケージに使用
  されているか,という情報

 ■「階層ツリー」

   この項目は,非常に重要である。「階層ツリー」項目をクリックすると,そのパッケージに
  所属するクラスのクラス階層(extendsによる継承関係とimplements による実装関係の階層)と,
  インタフェイス階層(インタフェイス間のextendsによる継承関係の階層)が表示される。
   たとえば,java.appletパッケージの階層構造を表示すると,クラス階層は,下図Fig.4-①の
  ように表示される(実際に自分で表示させてみよ)。これは,図にするとFig.4-(2)のような階層
  を表している。つまり,java.appletパッケージのクラス java.applet.Applet と,Appletクラス
  の内部で定義されている java.applet.Applet.Applet.AccessibleApplet クラスが,どのような
  クラス階層の中にあるかを示しているわけである。



  クラス階層やインタフェイス階層を把握することが,Javaをはじめとしたオブジェクト指向言語
  によるプログラミングでは非常に重要になる
。プログラミングでJava APIを使う場合,このクラス
  階層表示機能を使って,使用したいクラスの継承・実装関係を把握すると良い。

 ■「非推奨API」

   この項目は,Javaがバージョンアップする過程で,古くなったり,不都合が出たりしたために,
  「もう使用しない方が良い」とされるAPIを表示する。この項目を見て,非推奨のAPIはできるだけ
  使用しないように気をつけよ。


●クラス・インタフェイス情報の表示

  クラス一覧フレームの中のインタフェイス名,クラス名などをクリックすると,そのインタフェイス
やクラスの説明がメインフレームに表示される。
 たとえば,Fig.3の状態でクラス一覧フレームの一番下に表示されているAppletクラスの項目をクリック
すると,メインフレームには,Appletクラスの説明が表示される(下図Fig.5-②)。このとき,メインフレーム
のナビゲーションバーは,「クラス」の項目がアクティブになっている(Fig.5-③)。

 メインフレームにクラスの情報を表示すると,クラスを表示した場合,メインフレームには,
 (a)そのクラスの継承階層
 (b)そのクラスが実装しているインタフェイス
 (c)サブクラス
 (d)クラスが導入されたときのJavaのバージョン
 (e)フィールドの概要
 (f)どのクラスからフィールドを継承したか
 (g)コンストラクタの概要
 (h)メソッドの概要
 (i)どのクラスからメソッドを継承したか
 (j)コンストラクタの詳細
 (k)メソッドの詳細
といった仕様が表示される。インタフェイスを表示した場合も,同様の情報が表示される。

 《授業内課題》
  ・java.applet.Appletクラスについて上記の点(a)〜(b)がどのように記述されているか確認せよ
  ・java.applet以外のパッケージについても,様々なクラスやインタフェイスの仕様を自分でいろいろと見てみよ。

 なお,「パッケージ」の項目をクリックすると,そのインタフェイスやクラスが所属しているパッケージ
の説明がメインフレームに表示される。

 以上のように,Java APIのドキュメントは,APIの概要から,詳細な仕様までWebブラウザで効率よく見る
ことができるようになっているので,Javaプログラミングを行うときは,随時参照するとよい。また,プロ
グラミングをしていないときでも,興味のあるところから眺めているだけで,知識がつくし,新たな発見も
あるだろう。

コラム:
 Java11発表時より,公式ドキュメントではフレームが廃止されている。これはHTML5に対応するためで,
2020年現在,公式サイトでは,Java 9 以降のAPIドキュメントはフレーム無しバージョンが掲載されている。
しかし,次節で紹介する javadoc コマンドへの指定の仕方によって,フレームありバージョンもいまだに
作成可能である。


6. 【javadocでドキュメント作成】

 このように便利なAPIドキュメントだが,実はJava SDKに付属している javadoc というプログラムを使用
して,Javaのソースプログラムから自動的に作成することができる。Java APIドキュメントも,Javaのソース
プログラムから自動生成されたものなのである。
 このような便利な機能を使わない手は無い。そこで,javadocの簡単な使い方をご紹介していこう。

●javadocとは

  javadocは,javaコンパイラの力を借りてソースプログラムを解析し,クラス名・インタフェイス名・フィ
ールド名・メソッド名などを自動的に抽出してくれる。また,説明文をドキュメンテーションコメントと呼ば
れる特別な形式のコメントとして書いておけば,javadocはその内容を処理して,ドキュメントに説明文を挿
入してくれる。

●javadocの使用例

 javadocでドキュメント化する例として,List 1を使用する。List 1はクラスMySampleを宣言しているだけで
ある。MySampleは,1つのフィールド,1つのコンストラクタ,1つのメソッドを持っているだけの,非常に単純
なクラスである。

 List 1 MySample.java


 
では,実際にjavadocを使ってList 1からドキュメントを生成してみよう。

Eclipseの場合

新規にJavaプロジェクを作り,上記の,List 1のMySample.javaをプロジェクトに追加する。そして,次の様に操作する。

【手順1】 ソースファイルの文字コードを確認する

ソースコードの文字コードが Eclipse のデフォルト文字コードと違う場合,ドキュメント生成がうまくいかない場合がある。
その場合は, まず,ソースファイルの文字コードを確認しよう。下図-①のようにソースコードをEclipseのテキストエディタ
で開き,右下に表示されている文字コード( MS932 または UTF-8 など)をメモして置こう。



【手順2】 javadoc生成のダイアログを開く

対象象となるプロジェクトを選んだ状態で,『プロジェクト』メニュー→『Javadocの生成』を選択する。



表示されるウィンドウで以下の設定を行う。
下図②:「Javadocコマンド」欄で javadoc コマンドの絶対パス(場所) を指定する。
     ※2023年度大学推奨ノートPCの場合,今年度のEclipseのインストールガイドに従ってEclipseをインストールしていれば
      「C:\pleiades\2023-12\java\21\bin\javadoc.exe」に指定されているはずである。
      もし異なっていたりした場合は指定し直そう。指定に関しては『構成』ボタンで行うと楽に指定できる。
      『Javadocコマンド』欄の設定は一度設定すれば Eclipse が憶えていてくれる。
下図③:ドキュメントを作成するプロジェクトにチェックを入れる
下図④:「次の可視性を持つメンバーの javadoc を作成」欄で,ドキュメントを作成するメンバーの範囲を決める。ここでは,例として protectded を選択する。
下図⑤:「次へ」を押す。


下図⑥:表示されたウィンドウで,更に「次へ」を押す。




【手順3】 ソースファイルの文字コード,生成するHTMLドキュメントファイルの文字コードを指定する。

下図⑦のように,表示された「追加のJavadoc オプション」の欄に次の2行を追加する。「-encoding」の後ろはソースファイルの文字コード,
「-charset」の後ろは作成されるドキュメントの文字コードを意味する。青文字の部分は,手順1で確認・メモしたソースファイルの文字コード
に合わせること
。 2023年度大学推奨ノートPCの場合は,両方とも UTF-8 で良い。

-encoding UTF-8
-charset UTF-8
最後に,『完了』ボタンを押す(下図⑧)。すると,プロジェクトフォルダ内にdocフォルダが生成され,その中にプロジェクト内のソースコードのJavadoc
ドキュメントファイルが生成される(下図⑨)。


docフォルダの中の index.html ファイル上で右クリックして「プロパティ」を表示し,下図⑩のボタンをクリックすると
Windowsのエクスプローラで index.html が入っているフォルダが表示される。

Windowsのエクスプローラ上で index.html ファイルをダブルクリックするとWebブラウザで生成したドキュメントが表示されるはずである。

Windows/UNIX(Linux)などのコンソールの場合

 まず,List 1のMySample.javaをHTMLファイルの入っていないフォルダに保存する
これは,javadocがhtml形式のファイルを生成するためで,もし生成されるファイルと
同じ名前のファイルがすでにList 1と同じフォルダにある場合は,それらを上書きして
しまう可能性があるからである。
 ここで,MySample.javaを一度コンパイルし,ちゃんとエラー無しにコンパイルできることを確認しておくこと。
確認が出来たら,次のようにコマンドを入力して,MySample.javaに関するドキュメントを生成する。
コマンドプロンプト(ターミナル)で

> cd MySample.javaを入れたフォルダのパス
> javadoc MySample.java


と入力する。


すると,下図に示すファイルなどが生成されるはずである。これらが,ドキュメントを構成するファイルである。
青色で示した MySample.html はクラスMySampleのドキュメントなので,クラス名と同じファイル名となっている。



 では,Webブラウザで生成されたindex.htmlを開いてみよう。(作成されたHTMLファイルはFireFoxと相性が悪い
こともあるようなので,Google Chromeで開いてみよ。) 下図Fig.6のように表示されるはずである。左側のフ
レームにはクラスの一覧,右のメインフレームには上下にナビゲーションバーと各項目へのリンクがあり(Fig.6-①,
⑰),その間に,クラスMySampleの情報が記載されている。

 クラスの情報をよく見ると,いろいろと説明が書かれているのが分かる。たとえば,Fig.6-②は,クラス名と継承
関係が表示されている。Fig.6-③は,クラスMySampleが,どのクラスを継承しているか(インタフェイスを実装して
いたら,その実装しているインタフェイスも)が書かれている。その他,Fig.6-⑦〜⑯に何が書かれているか,Fig.6
を見て確認せよ。



 Fig.6-④〜⑥には,それぞれクラスMySampleの説明,MySampleがどのバージョンから導入されたのか,そして
関連項目が書かれてるわけだが,こういった付加情報は,前述したように,ソースプログラム内にドキュメンテーショ
ンコメントとしてプログラマ自身が記述しておく。
 では,このドキュメンテーションコメントの書き方を簡単に紹介しよう。


7. 【ドキュメンテーションコメントの書き方】

 ドキュメンテーションコメントは,クラス・インタフェイス・フィールド・メソッドなどについての説明を記述するも
ので,説明したいクラス・インタフェイス・フィールド・メソッドなどの宣言の直前に書かなくてはならない。ドキュメ
ンテーションコメントはコメントの一種である。しかし,通常のコメントは /* から始まり */ で終了するが,ドキュメン
テーションコメントは,
    /**
で始まり,
    */
で終了する。つまり,コメントの開始時にアスタリスクが2個連続している。下図Fig.7-(1)にあるように,1行でもかま
わないし,複数行に渡って書いてもかまわない。

 上図のように複数行でドキュメンテーションコメントを書く場合には,

  /**
  
* 説明文1。
  
* 説明文2。
  
*/

という形式になるわけだが,このとき,先頭行の /** と最終行の */ で挟まれた中間行の先頭にある*は,javadocには無視
される。そのため,上記の例の場合,説明文は間の *(と改行)は取り去られ,
  説明文1。 説明文2
となる。
 たとえば,List 1-①〜④は,直後に宣言されているクラスMySampleのドキュメンテーションコメントであるが,
List 1-②には,2行にわたってクラスMySampleの説明が書かれている。この説明文が,Fig.6-④に表示されているわけ
である。List 1-②の2行の行頭にある*が省略されて,2行にわたる説明文が結合され,Fig.6-④では1行にまとめられて
いるのがわかる。
 ただし,List 1-②のように日本語で複数行のコメントを書くと,1行にまとめられるときに,間に半角スペースが入ってしまう。
List 1-②は
  * MySample 〜 定義された
  * クラスです。〜 立ちません。
となっているが,Fig.6-④では,2行の結合部分が
  定義された<半角スペース>クラスです。
というように,間に半角スペースが入っている。これは,複数行の結合の仕方が英語をベースに考えられているためである。


●javadocタグ

 List 1-②の説明文の後で,@から始まる英単語と,それに続くコメントがある(List 1-③)。この@から始まる英単語は,
javadocタグと呼ばれるもので,特定の情報を記述するのに使用する(Fig.7-(2))。また,ドキュメンテーションコメントは,
前半の説明文部分であるコメントセクションと,後半の1個以上のjavadocタグからなるタグセクションに分かれている(Fig.7-(3))。
なお,タグセクションの後に説明文を書くことはできないので注意が必要である。

javadocタグは,形式的には,
  @tag名 タグ用のコメント
という形になる。javadocタグは,ドキュメンテーションコメントの中の行頭(要するに,*の直後)に書かなくてはならない
また,1行に書けるタグは1つだけだが,タグ用コメントは
  * @tag名 複数行にわたるタグ用の
  * コメントです。
というように複数行にわたって書くことが可能である(ただし,タグによっては,改行位置に制限がある場合もあるので注意)。

●タグの例:@sinceタグ

 List 1-③の@sinceタグは,
  @since バージョンナンバ
という形式で,そのクラスやインタフェイスが,そのライブラリのいつのバージョンから導入されたかを記述するものである。
List 1-③では,
  @since 1.0.0
と書かれていて,これはFig.6-⑤のように表示される。

●タグの例:@seeタグ

 また,List 1-③の@seeは,ハイパーリンクつきの参照先を記述するタグで,
  @see クラス名など
とすると,該当するクラス名などを説明したドキュメントファイルへのハイパーリンクを張ってくれる。また,HTMLの<A>
タグを使って,
  @see <A href="URL">文字列</a>
とすれば,指定したURLへのハイパーリンクを張ってくれる。List 1-③では雑誌CマガジンのWebサイトにハイパーリンク
を張ってあるので,Fig.6-⑥のC Magagineという文字列をクリックすると,CマガジンのWebサイトに移動する。
 このように,ドキュメンテーションコメントの中では,一部のHTMLタグを使用することも可能である。例えば,

●Eclipse での ドキュメンテーションコメントのひな形生成

 Eclipse では,対象となるクラス,フィールド,メソッドにカーソルを置いて,
 ・右クリック→『ソース』→『要素コメントの生成』
 で,ドキュメンテーションコメントのひな形を自動生成できる。

●MySampleの例 

 では,List 1のクラスMySampleの宣言の中身を見ていこう。ここで,List 1を再掲する。
 List 1 MySample.java

 List 1-⑤,⑥,⑦は,それぞれフィールド,コンストラクタ,メソッドの宣言を行っている。javadocが生成したドキュ
メントでは,フィールド,コンストラクタ,メソッドの概要が,Fig.6-⑦,⑧,⑨のようにあり,その後で,それぞれの詳細情報
が記載されている(Fig.6-⑪〜⑯)。なお,概要欄と詳細欄の間には,そのクラスが継承したメソッドが,継承元ごと
にまとめられて表示されている(Fig.6-⑩)。
 List 1-⑤はフィールドaのドキュメンテーションコメントと宣言である。ここで注意して欲しいのは,Fig.6-⑦の「フィー
ルドの概要」のaの欄の説明(Fig.6-⑦)では,ドキュメンテーションコメントの第1番目の文「フィールドaは,テスト用フィー
ルドです。」の部分だけが記載されていることである。このように,概要欄には,説明文の第1文が記載される。そのため,説明
文の第1文は,その文だけで概要が分かるような文にしなくてはならない。これは,コンストラクタやメソッドの説明文について
も同様である。

●タグの例:@paramタグ

 List 1-⑥は,コンストラクタのドキュメンテーションコメントと宣言である。ここで登場するタグ@paramは,仮引数を説明
するもので,
  @param 仮引数名 説明文
という形になっている。List 1-⑥の@paramタグの記述は,ドキュメントでは,Fig.6-⑬のように表示される。

●タグの例:@returnタグ

 List 1-⑦は,メソッドfoo()のドキュメンテーションコメントと宣言である。新しいタグとして,@returnが登場している。こ
のタグはメソッドの返り値(戻り値)を説明するタグで,
  @return 返り値の説明
という形で使用する。List 1-⑦の記述例は,Fig.6-⑯のように表示される。

●アクセス指定とドキュメント化

 なお,javadocコマンドを直接使用した場合,ドキュメント化されるメンバは, publicクラス と public/protectedメンバー だけである。
つまり, ,public指定されていないクラスや,privateなメンバなどはドキュメント化されまない。
(Eclipse では,特に指定しなければ public なクラスの publicメンバーだけをドキュメント化する。)
 これは,利用者用マニュアルとしてのドキュメントを作成するのがjavadoc本来の目的だからである。つまり,利用者に隠すべき所
(=利用者が知らなくてもよい所)はドキュメント化しない,ということである。

 しかし,開発者が,publicでないクラスやprivateなメンバも掲載された自分用のマニュアルを必要とする場合もある。そういった場合は,
以下の様に指定する。

Eclipse Windows/UNIX(Linux)などのコンソール

対象となるプロジェクトを選んだ状態で,
『プロジェクト』メニュー→『Javadocの生成』
を選択したて表示されるウィンドウで

●『次の可視性を持つメンバーのjavadocを生成』の指定で,private を指定する。


Javadocコメントにオプション指定をつけて実行する。

たとえば
-private というオプションを付けて
> javadoc -private ソースファイル名
 とすれば,publicでないクラスやprivateなメンバもドキュメント化される。

●Javadocに関するより詳細な情報

 その他,javadocの詳しい使い方は,Javaのドキュメントをダウンロードすればその中に含まれているし,Javaの公式Webサイトでも公開
されている(こちら(JDK6用), こちら(JDK7用), こちら(JDK8用))ので,それを参照する ように。


8. 【アノテーション】

 ここで,Javaが2004年のJava 2 Standard Edition 5.0 (J2SE 5.0)で取り入れたアノテーション(annotation)にも触れておく。

  一般的な英単語の annotation の意味は,「註釈」である。では,Javaに元々用意されている「コメント機能」とはどこが違うのだろうか。

 実は,アノテーションは,メタデータとも呼ばれ,プログラムに付加情報をつけるためのものである。この付加情報はプログラムの本質的な
動作には影響せず,コンパイラなどに制作者(プログラマ)の意図を伝える等の目的で使用される。言ってみれば,
    アノテーションは,『コメント以上・プログラム未満』の存在
なのである。

 アノテーションはプログラマが独自のものを作成することもでき,標準のアノテーションも用意されている。ここでは,アノテーションの使い方
の説明もかねて,代表的かつ実用的な標準アノテーションである @Overrideアノテーションを紹介する。

●一般的なアノテーション利用の書法

 一般的なアノテーションを利用する場合の書法を下図に示す。


●@Override アノテーション

  前期の『プログラミング応用a』第11回「継承の基礎1」-3.メソッドオーバライドで,オーバライドに関するよくある間違いを採り上げた。
ここで,復習がてら下図を再掲する。

下図を,要約すると,オーバライドとオーバロードは異なり,オーバライドするつもりで書いたサブクラスのメソッドが,引数構成の違いで,
オーバライドに失敗し,オーバロードになってしまう,というトラブルがあるので注意せよ,ということえある。


上図のトラブル例では,サブクラスでオーバライドするつもりで書いたメソッドの引数構成が間違っていて,オーバロードになってしまっているわけだが,
もちろん,サブクラスでメソッド名を間違えても,もちろんオーバライドに失敗する。たとえば,以下の例では,スーパークラス Fig2D の display( )メソッド
をサブクラスの Triangle でオーバライドしようとしているが,スペルミスで,オーバライドになっていない。

abstract class Fig2D {
    void display( ) { }
}

class Triangle extends Fig2D {
	
	void dsplay( ) { // 本当は void display( ) をオーバライドしたつもりがスペルミスでオーバライドに失敗している。
    	System.out.println( "△" );
    }
}

このように,オーバライドに失敗しているとき,すぐに気づければ修正可能だが,気づくのが遅れるとバグの元になる。そこで標準アノテーションとして
導入されたのが,@Overrideアノテーションである。

使い方は簡単で,サブクラスでオーバライドしたつもりで定義したメソッドの直前に @Override と書く。すると,コンパイラに「このメソッドはスーパー
クラスのメソッドをオーバライドしたものだ」という情報を伝えることができる。そして,もしスペルミスや引数構成の不一致などが原因でオーバライド
に失敗している場合は,コンパイル時に警告を表示してくれるのである。

使用例を以下に示す。

abstract class Fig2D {
    void display( ) { }
}

class Triangle extends Fig2D {
	@Override // この@Overrideアノテーションのおかげでおーばライド失敗の警告が出る。
	void dsplay( ) { // 本当は void display( ) をオーバライドしたつもりがスペルミスでオーバライドに失敗している。
    	System.out.println( "△" );
    }
}


上記の例の場合,Eclipseではコンパイルの必要も無く,テキストエディタ上で不具合を示す下赤波線が dsplay メソッドの部分に表示され,マウス
カーソルを下赤波線部分に合わせると,以下の様な警告が表示される。


このように,オーバライドとして定義したメソッドの直前に@Overrideアノテーションを書いておくと,オーバライドの失敗が早期に検出できるので,
常に使用することを推奨する。(なお,本授業のサンプルプログラムでは,サンプルソースプログラムが複雑になる事を防ぐために,使用していない。)


9. 【まとめ】

 以上のように,javaでは,ソースプログラムから効率の良いブラウジングが可能なドキュメントを,自動的に生成する機能が備
わっている。参考書や雑誌記事のサンプルプログラムなどでは,スペースの都合上,ドキュメンテーションコメントは省略されて
いることが多いが,実際のソースプログラムでは,ちゃんとドキュメンテーションコメントをつけているのが普通である。自分で
プログラムを作成する場合は,積極的にjavadocを活用して,javaプログラミングを効率よく行えるようにしてみるとよい。
 また,アノテーションという機能があることも憶えておこう。特に標準アノテーション @Override はメソッドのオーバライドを行う
ときには積極的に利用していこう。