Thinkers'Studio
JavaとC言語の自習ツール
クラス設計と継承やカプセル化

 今回はコーディングの前段階となる、クラス設計とそれに関連する Java の話題に触れたいと思います。

クラス設計のスタート

 クラスの設計は、解決したい課題にはどんな性質があり、どんな挙動をするかをモデル化するところから始まります。
 一度でバッチリのものができるわけではありません。クラスの役割が明確になるように考えて、調整を行います。

クラス設計で大切なこと

 クラス設計で大切なことは「しっくり来る」ということではないでしょうか。
 属性や動作をそのクラスに持たせるのが妥当かどうかをよく検討しないと、クラスがいびつになり、その後の作業全般がやりづらくなります。結局クラス設計に戻ってやり直しということになりかねません。 また、そのクラスだけ見ると問題がなくても、他のクラスとの関係性を見た時にしっくり来ないこともあります。それは機能が適切に整理、分担されていないということです。
 クラス設計は難しい作業ですが、検討が進むにつれて具体的になるので、全体を見渡して修正や追加をしながらクラスの形を決めていきます。

Java の使える機能を活用する

 Java の勉強を始めると、Java 特有の概念や機能の説明が出てきます。
 たいていは説明のための例題で、ちゃんと理解するところまでいかないことが多いように思います。 それでも、大体どんなことかという概要を知っておくと、実際にクラス設計で迷ったときに「そういえばあんな機能があったな」と思い出すことができます。

たとえば、こんなとき ・・・
  「ちょっとだけ違うクラスが複数個できることになるのが、気持ち悪いな〜。」
    → 元になるクラスと、それを引き継いで異なる部分を定義したクラスをつくって整理しよう。
       (これは、Java の機能のうち   (1)   を使えば実現できそうです -- 下でクイズとします)
  「この属性は他のクラスから操作する必要のないものだな。」
    → 念のため、勝手に書き換えられないようにしておこう。
       (これは、Java の機能のうち   (2)   を使えば実現できますね -- 下でクイズとします)

 目的に合ったものかどうかや、詳細を調べて活用します。

  (今回のクイズです)
   下線(1) と (2) に入るのは、それぞれ次のうちどれでしょう?
    ア. パッケージ  イ. カプセル化  ウ. オーバーロード  エ. 継承

   (答えは、次回の Java の Tips で ・・・)
前回のクイズの答え: (前回の問題を見る
    // int型 --> double型
    System.out.println( Integer.valueOf( 200 ).doubleValue() );
 doubleValue はインスタンスメソッドです。Intger.valueOf( 200 ) で 200 の値を持つ Integer クラスのオブジェクトを生成し、そのインスタンスについてメソッド doubleValue( ) を呼び出しています。
 実行すると 200.0 と表示されます。