
062
SRPの定義における「クラスを変更する理由」は、クラスが利用され
るユースケースやアクターの観点で考えるとすっきりします。
OCP:オープン・クローズドの原則
ソフトウェアの構成要素(クラス、モジュール、関数など)は拡張
に 対 し て 開 い て( オ ー プ ン : Open)いて、修正に対して閉じて(ク
ローズド:Closed)いなければならない。
※7
OCPは拡張性に関する原則です。既存のコードを修正することなく
(クローズド)、新たな振る舞いを追加して拡張することが可能(オープ
ン)な設計を意味します。
リ ス ト2.3.3 の具体例を見てみましょう。残業代計算を行う
OvertimePayCalculator
クラスの
calcOvertimePay
メソッドでは、
switch
を使った条件分岐ロジックが記述されています。一般職の場合、
休日は2割増しで残業代を計算し、管理職は残業代が支払われないとい
う仕様になっています。
リスト2.3.3
OCP適用前のコード
// src/main/java/sample/chap02/ocp/before/OvertimePayCalculator.java
// 残業代計算クラス
public class OvertimePayCalculator {
// 残業代計算
public int calcOvertimePay(WorkRecord workRecord, Grade grade) {
return switch (grade) {
case ...