オープンクローズド

プログラムの凝集度(Cohesion)と結合度(Coupling)は、ソフトウェア設計における重要な概念です。これらは、コードの保守性、再利用性、理解しやすさに大きな影響を与えます。


凝集度(Cohesion)

凝集度とは、モジュール内の要素がどれだけ関連しているかを示します。高い凝集度は、モジュール内の要素が強く関連していることを意味し、モジュールが単一の機能を果たすことを示します。

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

user = User("yamada", "yamada@example.com")

# プロパティに直接アクセス
print(user.name)
print(user.email)

# 悪い点:
# 1. 直接プロパティにアクセスすることで、プロパティの変更が難しくなる。
# 2. プロパティの検証や変更が必要になった場合、クラス全体を修正する必要がある。


この例では、ユーザークラスのプロパティnameとemailに直接アクセスしています。これにより、プロパティに対する変更が必要になった場合、すべてのアクセス箇所を修正する必要があります。


良い例:関数を通じてプロパティにアクセス

次に、関数を通じてプロパティにアクセスする良い例を見てみましょう。

class User:
    def __init__(self, name, email):
        self._name = name
        self._email = email

    def get_name(self):
        return self._name

    def get_email(self):
        return self._email

    def set_name(self, name):
        # 必要ならば検証ロジックを追加
        self._name = name

    def set_email(self, email):
        # 必要ならば検証ロジックを追加
        self._email = email

user = User("yamada", "yamada@example.com")

# 関数を通じてプロパティにアクセス
print(user.get_name())
print(user.get_email())

# プロパティの変更も関数を通じて行う
user.set_name("Yuto")
user.set_email("yuto@example.com")

print(user.get_name())
print(user.get_email())

# 良い点:
# 1. 関数を通じてプロパティにアクセスすることで、プロパティの変更や検証が容易になる。
# 2. プロパティに対する変更が必要になった場合でも、関数の内部を変更するだけで済むため、他のコードに影響を与えない。
# 3. オープンクローズドの原則に従い、新しい機能の追加が容易になる。

この良い例では、プロパティに直接アクセスせず、get_nameやget_emailといった関数を通じてアクセスしています。これにより、プロパティの変更や検証ロジックを関数内に追加することが容易になり、他の部分に影響を与えずに変更できます。


結論

オープンクローズドの原則に従うことで、ソフトウェアの保守性と拡張性が向上します。プロパティに直接アクセスするのではなく、関数を通じてアクセスすることで、プロパティの変更や拡張が容易になり、コード全体の安定性と柔軟性が向上します。これにより、新しい機能を追加する際にも、既存のコードに影響を与えずに実装できるようになります。

この記事が気に入ったらサポートをしてみませんか?