📖 ノート第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 で一覧表示
といった、より実務的な構成を扱います。
