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();
    }

以下省略
Javaプログラミング
Javaプログラミング・イメージ画像

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()メソッドを呼び出して再利用することは、以下の利点があります。

  • プログラムコードの重複を防ぐこと。
  • ソースコードの可読性や保守性を向上させること。

【まとめ記事】へのリンク

【まとめ記事】Javaアプリの品質を保つため、Javaソースコードを書くための工夫

Javaソースコードを正しく書くための、ちょっとした工夫について、ご紹介しています。 変数の寿命を限定する書き方。 肯定的な条件を優先して条件分岐する書き方。 クラス…