読者です 読者をやめる 読者になる 読者になる

GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

Javaだから再利用ができちゃうのである

システム開発 java

嘘ではないが真実でもないこの言葉について、Javaがよく分からないヒトにこのように説明してみた。

再利用の2つの側面

Javaで再利用ができる」というのは、2つの側面があると思います。1つは、機能としての再利用です。

何かっていうと、

  1. java実行ファイル(classファイル)は、jarファイルというものに固めることができ、
  2. そのjarファイルに対してクラスパスを通せば、
  3. Javaアプリとして再利用ができますよ。

というお話。

でもこのレベルの再利用を「Javaだから再利用ができます」と売るベンダーはいないと。いやいや、私のイメージしている再利用ってのはそういうもんじゃないんだと思われるヒトが99%だと思います。なぜならば、本来目指している再利用は「Javaアプリケーションの再利用」だからです。

オブジェクト指向だからフゥー

これを考えると、大抵出てくるのは「オブジェクト指向だから部品化がなんたらかんたら」という話。

でも、再利用性とオブジェクト指向型言語って基本的に何の関係もない。何の関係もないというのは、「再利用性を構成する要素として必須なものに、オブジェクト指向型言語であることが含まれていない」ということ。つまり、オブジェクト指向型言語ゆえに再利用ができるとは言えないってことです。

それよりもメソッドの内部でメンバ変数に依存するようなコードを書かない、特定のAPIに依存しないといった、オブジェクト指向と関係がない話のほうが重要なんではないかと。

メソッドの内部でメンバ変数に依存するコードってのはこんなの。たまに見る。

private int total;

//ダメ
int getTax() {
 return total * 0.05;
}

//ナイス
int getTax(int total,int rate) {
  return total * rate;
}

税率を出すという計算が「総額×税率」ならば*1、その2つをちゃんと引数として与えてあげればみんなが使えますよね、ってことです。そういう細かい意識が大切ではないかと思います。他のプログラムから呼ばれても使えるようなインターフェイスを用意することが大切です。

*1:話の都合上、そう仮定させて下さいw