疎結合とは?Javaでインターフェースを使って実現する方法を解説
結合(Coupling)とは
結合とは、あるオブジェクト型が別のオブジェクト型に依存している度合いのことを指します。2つのオブジェクトが互いに完全に独立しており、片方へ加えた変更がもう片方に影響を与えない場合、それらは疎結合(loosely coupled)であると言われます。
逆に、一方の変更が他方に波及してしまう状態は「密結合」と呼ばれ、保守性や拡張性の低下につながるため避けるべき設計とされています。
Javaで疎結合を実現するには
Javaではインターフェースを利用することで疎結合を実現できます。具体的なクラスに直接依存するのではなく、インターフェース型を経由してオブジェクトを扱うことで、実装の差し替えが容易になり、クラス間の依存関係を最小限に抑えられます。
コード例
以下の例では、Animal インターフェースを定義し、Cat クラスと Dog クラスがそれぞれ実装しています。
interface Animal {
void child();
}
class Cat implements Animal {
public void child() {
System.out.println("kitten");
}
}
class Dog implements Animal {
public void child() {
System.out.println("puppy");
}
}
public class LooseCoupling {
public static void main(String args[]) {
Animal obj = new Cat();
obj.child();
}
}実行結果
kitten
このコードのポイント
main メソッド内では、変数 obj を Animal 型として宣言しています。ここで注目すべきは、new Cat() を new Dog() に書き換えるだけで、プログラムの他の部分を一切変更せずに動作を切り替えられる点です。
このように、呼び出し側が具象クラスではなくインターフェースに依存する構造にしておくことで、クラス同士が独立した存在となり、柔軟で保守しやすい疎結合な設計が実現します。
-
JavaとOpenCVで長方形を描画する方法|Imgproc.rectangle()の使い方を徹底解説
Java用OpenCVライブラリの org.opencv.imgproc パッケージには、Imgproc クラスが含まれています。画像に長方形を描画するには、このクラスが提供する rectangle() メソッドを使用します。 このメソッドは以下のパラメータを受け取ります。 Matオブジェクト:長方形を描画する対象となる画像を表します。 Pointオブジェクト(2つ):描画する長方形の対角となる2つの頂点座標を表します。 Scalarオブジェクト:長方形の色をBGR形式で指定します。 整数値:長方形の枠線の太さを指定します(デフォルト値は1)。 サンプルコード 以下は、白紙の画像に長方形を
-
JavaとOpenCVで線を描画する方法をわかりやすく解説
Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画