Javaプログラミングで、少ないメソッドを再利用しやすい、メンバ変数のメソッドを呼び出す方法
Javaプログラミングにおいて、2つのクラスの「結び付き」が弱い場合、メソッドの再利用をどうしたら良いですか?
Javaプログラミングで作成したクラス内で保持するメンバ変数から、メソッドを呼び出す方法があります。
メンバ変数のメソッドを呼び出すことで、再利用したいメソッドを限定できます。
Javaプログラミングで、メンバ変数のメソッドを呼び出して、メソッドを再利用する方法
Javaプログラミングにおいてメソッドを再利用する方法に、
クラス内で保持するメンバ変数のメソッドを呼び出す方法が、あります。
次のような場合に「メンバ変数のメソッド」を呼び出して、メソッドを再利用します。
あるクラスAから、別のクラスBの49%以下のメソッドを再利用する場合。
クラスAから再利用するクラスBのメソッド数が、
クラスBの全メソッド数の49%以下である。
この条件が成り立つなら、クラスAとクラスBの「結び付きは弱い」と判断します。
そして「メンバ変数のメソッドを呼び出す」という方法で、メソッドを再利用します。
「メンバ変数のメソッドを呼び出して、メソッドを再利用する方法」の例
以下に、「メンバ変数のメソッドを呼び出して、メソッドを再利用する方法」の例を、書きます。
プログラムの詳細を理解する必要は、ありません。
NoteListクラスが、ArrayListクラスのメソッドを再利用している例。
public class NoteList{
private List noteList = new ArrayList();
public void add(int index, Note note){
this.noteList.add(index, note);
}
public Note get(int index){
return (Note)this.noteList.get(index);
}
public int size(){
return this.noteList.size();
}
public void setOctave(int octave){
for (int i = 0; i < this.noteList.size(); i++){
Note note = (Note)this.noteList.get(i);
note.setOctave(octave);
}
}
中略
}
NoteListクラスは、Noteクラスの変数を複数個、管理するためのクラスです。
Noteクラスの変数を複数個、管理するために、NoteListクラスは、ArrayListクラスのメソッドを再利用します。
以下のようにnoteListメンバ変数のメソッドを呼び出すことで、NoteListクラスは、ArrayListクラスのメソッドを再利用しています。
this.noteList.add(index, note);
this.noteList.get(index);
this.noteList.size();
NoteListクラスが再利用しているArrayListクラスのメソッドは、以下の3個のメソッドです。
ArrayListクラスのadd()メソッド
ArrayListクラスのget()メソッド
ArrayListクラスのsize()メソッド
ちなみにArrayListクラスのpublicなメソッドは、40個以上あります。
40個以上のメソッドにおいて、今回再利用するメソッドは3個です。
よって、ArrayListクラスのメソッドにおいて、
NoteListクラスは、49%以下のメソッドを再利用している、と判断しました。
なので、NoteListクラスとArrayListクラスの「結び付きは弱い」と判断しました。
以上の事より「noteListメンバ変数のメソッドを呼び出す」という方法で、メソッドを再利用します。
public class NoteList{
//noteListメンバ変数(ArrayListクラス)
private List noteList = new ArrayList();
public void add(int index, Note note){
//NoteListクラスから、ArrayListクラスのadd()メソッドを再利用する。
this.noteList.add(index, note);
}
public Note get(int index){
//NoteListクラスから、ArrayListクラスのget()メソッドを再利用する。
return (Note)this.noteList.get(index);
}
public int size(){
//NoteListクラスから、ArrayListクラスのsize()メソッドを再利用する。
return this.noteList.size();
}
以下省略
NoteListクラスがArrayListクラスを継承して、多くのメソッドを再利用することを、やめました
先ほど言ったように、NoteListクラスとArrayListクラスの「結び付きは弱い」と判断しました。
なので以下のように、クラスを継承して、多くのメソッドを再利用することをやめました。
NoteListクラスがArrayListクラスを継承する例。
public class NoteList extends ArrayList {
……
}
上記のソースコードでは、NoteListクラスは、ArrayListクラスの多くのメソッドを再利用しています。
NoteListクラスは、ArrayListクラスのpublic, protectedなメソッド全てを、再利用しています。
※関連記事:Javaプログラミングで、多くのメソッドを再利用しやすいクラス継承という方法。
※ここまでの記事は、2004年7月当時の記事になります。
クラス内でメソッドを再利用する方法、メンバ変数のメソッドを呼び出すこと
クラス内でメソッドを再利用する方法として、
クラスのメンバ変数が持つメソッドを、クラス独自のメソッド内から呼び出す方法があります。
これを行う方法の例を、以下に示します。
public class MyClass {
private MyOtherClass myOtherClass = new MyOtherClass();
public void myMethod() {
// MyClass独自の処理を、ここで付け足すことができます。
// myOtherClassメンバ変数のmyMethod()メソッドが行う処理を、再利用します。
myOtherClass.myMethod();
// MyClass独自の処理を、ここで付け足すことができます。
}
}
public class MyOtherClass {
public void myMethod() {
// MyOtherClass独自の処理を、ここで行います。
}
}
上記のソースコードでは、
MyClassクラスのmyMethod()メソッド内で、
myOtherClassメンバ変数のmyMethod()メソッドが行う処理を、再利用しています。
そのまま再利用することもできますが、MyClass独自の処理を付け足して再利用することもできます。
MyClass独自の処理を付け足す場合は、MyClassクラスのmyMethod()メソッド内の任意の場所に、付け足す処理のプログラムコードを記述します。
このように、myOtherClassメンバ変数のmyMethod()メソッドを呼び出して再利用することは、以下の利点があります。
- プログラムコードの重複を防ぐこと。
- ソースコードの可読性や保守性を向上させること。