見出し画像

📖 ノート第4回:メソッドの引数設計・責務分離・複数クラスの連携〜“誰が何を知るべきか”で設計が決まる〜

🎯 この回の目的

  • メソッドの引数設計を「責務」の観点から理解する

  • プロパティと引数の使い分けを明確にする

  • 複数クラスを連携させる設計方法を学ぶ

  • 実務に近い構成で、オブジェクト指向の設計力を高める

1. 🧱 メソッドの引数設計

🔍 大前提

プロパティを持つクラスのメソッドが、同じ情報を引数で受け取る必要はない。
これは自然な感覚です。
では、どんなときに引数を使い、どんなときにプロパティを使うのか?

🧭 判断基準は「責務(役割)」で決まる

■ Student クラス

  • 責務:データ保持

  • よって、メソッドは 自分のプロパティを使う

  • 同じ情報を引数で受け取る必要はない

■ ScoreCalculator クラス

  • 責務:計算処理

  • Student に依存しないほうが再利用性が高い

  • よって、メソッドは 必要な情報を引数で受け取る

📄 Student クラスの正しいメソッド例(プロパティを使う)

Public Function GetTotalScore() As Integer
    GetTotalScore = scoreKokugo_ + scoreMath_
End Function

Public Function GetAverageScore() As Double
    GetAverageScore = GetTotalScore() / 2
End Function

📄 ScoreCalculator クラスの正しいメソッド例(引数を使う)

Public Function GetTotal(scoreKokugo As Integer, scoreMath As Integer) As Integer
    GetTotal = scoreKokugo + scoreMath
End Function

Public Function GetAverage(scoreKokugo As Integer, scoreMath As Integer) As Double
    GetAverage = GetTotal(scoreKokugo, scoreMath) / 2
End Function

🧠 こう整理すると混乱しない

クラスメソッドが使う情報理由Student自分のプロパティデータ保持が責務だからScoreCalculator引数で受け取るStudent に依存しないため

2. 🧭 責務分離の考え方

責務分離とは、

「誰が何を担当するかを明確にする」
という設計思想です。

🎒 クラスの役割を分けるとこうなる

クラス名役割(責務)Student名前・得点などのデータ保持ScoreCalculator得点計算(合計・平均)ResultPresenter結果の表示(UI)

📌 責務分離のメリット

  • クラスが単純になる

  • 変更の影響範囲が小さくなる

  • 再利用性が高まる

  • テストしやすくなる

3. 🔗 複数クラスの連携

🧩 全体構成図

Main
 ├─ Student(データ保持)
 ├─ ScoreCalculator(計算処理)
 └─ ResultPresenter(表示処理)

📄 Mainプロシージャ例

Sub Main()
    Dim student As Student
    Set student = New Student
    student.Name = "佐藤"
    student.ScoreKokugo = 80
    student.ScoreMath = 70

    Dim calc As ScoreCalculator
    Set calc = New ScoreCalculator

    Dim presenter As ResultPresenter
    Set presenter = New ResultPresenter

    presenter.Show student, calc
End Sub

📄 ResultPresenter クラス例

Public Sub Show(student As Student, calc As ScoreCalculator)
    Dim avg As Double
    avg = calc.GetAverage(student.ScoreKokugo, student.ScoreMath)

    MsgBox student.Name & "さんの平均点:" & avg
End Sub

4. 🧠 設計のポイント(まとめ)

✔ プロパティと引数の使い分けは「責務」で決まる

  • Student → プロパティを使う

  • ScoreCalculator → 引数を使う

✔ 責務分離でクラスがシンプルになる

  • 変更に強い

  • 再利用しやすい

  • テストしやすい

✔ 複数クラスの連携で実務に近い構成が作れる

  • Main は「調整役」

  • 各クラスは「単一の責務」に集中

🔚 第4回まとめ

  • メソッドの引数設計は責務分離のための重要な技術

  • プロパティと引数の使い分けは「誰が何を知るべきか」で決まる

  • 複数クラスを連携させることで、VBAでもオブジェクト指向の設計が可能

  • 第1〜3回で学んだ文法が、ここで「設計」としてつながる

🔜 次回予告(第5回)

第5回では、
「コレクションとループで複数オブジェクトを扱う方法」
に進みます。

  • Student の一覧を Collection で管理

  • ScoreCalculator と連携して集計

  • ResultPresenter で一覧表示

といった、より実務的な構成を扱います。


いいなと思ったら応援しよう!