部品となるクラス

複雑なクラスを、より基本的な部品のクラスに分けて設計するとプログラムが 見やすくなります。また、そうした部品を再利用することで開発の効率を 大幅に上げることが可能です。
今まで紹介してきたアプレットは、比較的単純な機能を持つものばかりでした。 そのためソース・ファイルに含まれるクラスの定義は、 アプレット自身の1つしか存在しません。 しかしアプレットが複雑になってくると、 ソース・プログラム自身も長くなり全体が見えにくくなります。 そのような場合は、 複雑になったアプレットの機能をいくつかの部品に分けて考えると便利です。 そうした部品自体を独立したクラスとして用意しておき、 それらの部品を「組み立てる」ことでより複雑な構造を持つクラスを 実現していきます。 複雑な機能を持つアプレットでも、必ずいくつかの単純な機能の要素に分解できます。 また、うまく機能を分離して設計ができれば、そうしたクラスは 別のアプレットでも再利用できるようになります。 これが「部品」の概念です。
 たとえば表計算を行うアプレットを作るとします。 この場合、数値や計算式を入力するための「升目」が必要になります。 そこで升目を扱うためのクラスを部品として設計しておき、 それを必要な個数だけ配置してアプレットを設計することができます。 あるいはオセロや将棋のようなボードゲームのアプレットも、 やはり升目を単位として設計できます。 升目クラスを利用して、ボードゲームのコマを進めるルールなど、 必要な処理を追加していけばいいわけです。
 部品となるクラスを設計することで、 プログラム開発と保守の手間を大幅に省くことが可能です。 また部品の信頼性を高め、プログラムのバグを防ぐこともできます。

部品になるクラスもクラス定義の記述の形式は同じです。 たとえば、上で述べた「升目」の役割をするクラス Cell を設計してみましょう。 このクラスのオブジェクトが持つ性質として必要と考えられるのは、 サイズ、色などの情報でしょう。また、それらの情報を取り出したり設定したり、 セルの表示を行うためのメソッドも必要になるでしょう。 さらに、コンストラクタも定義しておく必要があります。 コンストラクタは複数用意しておき、 初期値の設定の方法を複数提供します。


import java.awt.Graphics;
import java.awt.Color;
 
/** 色付きの升目の領域 Cell クラス */
 
public class Cell {
 
     /** セルの色 */

       protected Color color;
 
     /** セルのサイズ */
 
       protected int width, height;
 
    /** コンストラクタ(クラスの新しいデータの生成を行う)*/
 
       Cell( int width, int height ) {
 
              this.width = width;
              this.height = height;
              this.color = Color.black;  // 省略された指定にデフォルト値を設定
       } 
       Cell( int width, int height, Color color ) {
 
              this.width = width;
              this.height = height;
              this.color = color;
       } 
 
    /** セル内部に描画を行うメソッド */
 
       public void paint( Graphics g ){
 
              g.setColor( color );
              g.fill3DRect( 1, 1, width-2, height-2, true );
       } 
 
   /** セルに色を再設定するメソッド */
 
       public void setColor( Color color ){
 
              this.color = color;
       } 
                     :
                     :
}
このクラスを別のクラス Board の中で利用するとしましょう。 利用の方法は、 今まで利用していた JDKのクラスライブラリの扱いと変わりはありません。


public class Board {
 
     /** セルのデータ */

       public Cell cells[];