エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

プログラミングにおける『依存』『密結合』とは【326日目】

こんなワード聞きませんか

『このクラスは、このクラスに依存しているね』
『このクラスとこのクラス、密結合になってるな・・・』

依存って何なんでしょう。
イメージとしては、
『○○さんがいないと、私生きていけない・・・』 みたいなものが思い浮かぶと思います。

だいたいあってます。

依存しているコードの例

【例はPHPですが、依存の話は別言語でも同様のお話です】

Child.php

class Child {
    private $name;

    public function __construct(Parent $parent)
    {
        $this->name = $parent->generate_name();
    }

    public function play_game(Friend $friend)
    {
        //
    }
}

これは、ChildはParentに依存しています。
play_game()もFriendに依存していますね。

Friendがいないと、遊ぶことが出来ない。
Parentに名前つけてもらわないと、生まれることすら出来ない。

こんなふうに、コンストラクタやメソッドの引数に、特定のクラスがあるなどして、
そのクラスが存在しないと生きられない!

それが依存です。

相互依存の『密結合』

依存というのは一方的なものです。

『〇〇さんがいないと、私生きていけない・・・』
は片方の人が言うセリフですね。

しかし、お互いがお互いに依存している場合もあります。
それが密結合と呼ばれます。

片方バグ起こると、共倒れしてしまうやーつです。

余談

普段はプログラミングでは『疎結合』にしようとか、
極力『密結合』を避けようとしますよね。

では、『密結合』でなければ何が嬉しいの?

『〇〇さんがいないと、私生きていけない・・・』
と言われても、その〇〇さんは普通に生きていけます。

他にもバグのチェックも楽だったりと良いことがあるのですが、
それはまた次の機会に書きます。