ちょうぜつソフトウェア設計入門 ――PHPで理解するオブジェクト指向の活用

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

お詫びと訂正(正誤表)

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2024年3月25日最終更新)

P.13

管理する方法をを
管理する方法を

P.18

おさえさえる
おさえさ

P.22

“Reuse-Release Equivalent Principle(REP)”
“Reuse-Release Equivalence Principle(REP)”

P.25

それ意外
それ以外

P.28

閉鎖性共通の原則(CCP)加えて
閉鎖性共通の原則(CCP)加えて

P.44

を持ちもます
を持ちます

P.53

そうした面をだけを
そうした面だけを

P.58

連想でない
連想でない

P.66

図4-1 WheelS
Wheels

P.70

していると
している

P.73

図4-7 articlePreseneter:ArticlePreseneter
articlePresenter:ArticlePresenter

P.74 図4-9

fe^tch
fetch

P.74 図4-9

visualised
visualized

P.80 図5-1

writer
Writer

P.80 図5-1

subscrbe()
subscribe()

※UML図の矢印の頭を取る

P.81

Subscrbe()
subscribe()

※UML図の矢印の頭を取る

P.83 図5-4

DatebasedriverInterface
DatebaseDriverInterface

P.84

“Open Close Principle(OCP)”
“Open Closed Principle(OCP)”

P.93

remains件
done

P.93 リスト5-12

remains
done

P.93 リスト5-13

remains
done

P.94 リスト5-14

remains
done

P.94 リスト5-14

super
parent

P.97

“Intereface Seperation Principle()”
“Intereface Segregation Principle()”

P.98 リスト5-17

Intereace
Interface

P.98 リスト5-17

DatabaseDiriverInterace
DatabaseDriverInterface

P.98 リスト5-17

DataOutputInteface
DataInputInterface

P.98 リスト5-17

DataInputInteface
DataInputInterface

P.98 リスト5-18

vendorDatabaseDiriver
DatabaseDriverInterface

P.98 リスト5-18

DatabaseDiriverInterface
DatabaseDriverInterface

P.99 リスト5-19

DatabaseDiriverInterface
DatabaseDriverInterface

P.99 リスト5-19

DatabaseInputInterace
DatabaseInputInterface

P.99 リスト5-19

DatabaseDiriverInterace
DatabaseDriverInterface

P.99 リスト5-19

DatabaseOutputInterace
DatabaseOutputInterface

P.119

単位のテスト
のテスト

P.125

TeatCaseクラス
TestCaseクラス

P.134

willretuen()
willreturn()

P.142

テストと実装はこうなります
テストとコードを書く手順は割愛しますが、この進め方でいくと実装はこうなります

P.155 リスト6-38

PassTroghRuleTest
PassThroghRuleTest

P.155 リスト6-39

PassTroghRule
PassThroghRule

P.160

実装コード見るまで
実装コード見るまで

P.171

役立つ
立つ

P.172

ピンと来きませんね。
ピンと来ませんね。

P.176

保証しいる
保証しいる

P.106

なせならそれは
ならそれは

P.199

リスト8-3 getIterationの省略
リスト8-3 getIterator()の省略

P.200

$itrerator
$iterator

P.202 リスト8-7

RequestHandlerInterafce
RequestHandlerInterface

P.203

RequestHandlerInterafce
RequestHandlerInterface<

P.203 リスト8-9

$userAccessCheker
$userAccessChecker

P.204 リスト8-9

userAccessCheker
$userAccessChecker

P.204 リスト8-9

$resourceCheker
$resourceChecker

P.207

PrizeItemInterafceとしましょう
PrizeItemInterfaceとしましょう

P.207 リスト8-10

PrizeItemInterafce
PrizeItemInterface

P.207 リスト8-11

PrizeItemInterafce
PrizeItemInterface

P.208 リスト8-11

PrizeItemInterafce
PrizeItemInterface

P.209 リスト8-12

PrizeItemInterafce
PrizeItemInterface

P.210 リスト8-13

PrizeItemInterafce
PrizeItemInterface

P.212

PrizeItemInterafce
PrizeItemInterface

P.220

createAnimal()メソッド
createPet()メソッド

P.231 リスト8-32

finishTheWrok()
finishTheWork()

P.232 リスト8-32

finishTheWrok()
finishTheWork()

P.232 リスト8-33

finishTheWrok()
finishTheWork()

P.233 リスト8-33

InterafceA
InterfaceA

P.233 リスト8-33

finishTheWrok()
finishTheWork()

P.234 リスト8-34

InterafceA
InterfaceA

P.234 リスト8-34

InterafceB
InterfaceB

P.234 リスト8-34

finishTheWrok()
finishTheWork()

P.235 リスト8-36

finishTheWrok()
finishTheWork()

P.237 リスト8-37

MailerInterafce
MailerInterface

P.237

MailerInterafce
MailerInterface

P.237 リスト8-38

MailerInterafce
MailerInterface

P.241 リスト8-41

$bottoRight
$bottomRight

P.242

よくありあす
よくあり

P.247 図8-18

node1
leaf1

P.247 図8-18

node2
leaf2

P.247 図8-18

node3
leaf3

P.249 リスト8-46

RunableInterafce
RunableInterface

P.262 リスト8-55

CommandInterafce
CommandInterface

P.263 リスト8-55

CommandInterafce
CommandInterface

P.273

方法考える
方法考える

P.297

意味でしなかい
意味でしかな

P.307

Clear Craftmanship
Clean Craftsmanship

(以下2023年1月5日更新)

P.xxiv

パッケージ原則を支えるためのに
パッケージ原則を支えるために

「の」が不要です。

P.9

依存の実動作に違いが起きていることもあるれば
依存の実動作に違いが起きていることもあれば

「る」が不要です。

P.49 ▼リスト3-7 多態性を活用したロギングのオンオフ コメント文

Do nothiong
Do nothing

「o」が不要です。

P.138

▼リスト6-13 src/core/NumberConverter.php
▼リスト6-13 src/Core/NumberConverter.php
▼リスト6-14 tests/core/NumberConverterTest.php
▼リスト6-14 tests/Core/NumberConverterTest.php

P.147

▼リスト6-27 src/core/ReplaceRuleInterface.php(初案)
▼リスト6-27 src/Core/ReplaceRuleInterface.php(初案)

P.161

▼リスト6-44 src/core/ReplaceRuleInterface.php(第2案)
▼リスト6-44 src/Core/ReplaceRuleInterface.php(第2案)

P.190

▼リスト7-19 config/services/yaml(最適化版)
▼リスト7-19 config/services.yaml(最適化版)

P.234 ▼リスト8-36 Mediatorのコードのミスページ

public function notifyActivity()
public function notifyActivityDone()

P.253 ▼リスト8-50 Strategy パターンによる実現方法

interface CalcurationStrategyInterface
{
	public function validate(array $vars): bool;
	public function calcurate(array $vars): float;
}
class Expression implements ExpressionInterface
{
	protected ?array $vars = null;
	protected ?CalcurationStrategyInterface $calcurationStrategy = null;
	public function setCalcurationStrategy(
		CalcurationStrategyInterface $strategy
	): void {
		$this->calcurationStrategy = $strategy;
	}

	public function setVariables(array $vars): void {
		if ($this->calcurationStrategy->validate($vars)) {
			throw new InvalidArgumentException();
		}
		$this->vars = $vars;
}
	public function evaluate(): float
	{
		if ($this->vars === null || $this->calcalcurationStrategy === null) {
			throw new LogicException();
		}
		return $this->calcurationStrategy->calcurate($this->vars);
	}
}
class PlusCalcurationStrategy implements CalcurationStrategyInterface
{
	public function validate(array $vars): bool
	{
		return count($vars) === 2;
	}

	public function calcurate(array $vars): float
	{
		return $vars[0] + $vars[1];
	}
}
//他にminusCulculationStrategyもある
$expression = new Expression();
$expression->setCalcurationStrategy(new PlusCalcurationStrategy());
// ExpressionInterfaceとして使う
$expression->setVariables([1.1, 2.2]);
echo $expression->evaluate(); // 3.3
interface CalculationStrategyInterface
{
	public function validate(array $vars): bool;
	public function calculate(array $vars): float;
}
class Expression implements ExpressionInterface
{
	protected ?array $vars = null;
	protected ?CalculationStrategyInterface $CalculationStrategy = null;
	public function setCalculationStrategy(
		CalculationStrategyInterface $strategy
	): void {
		$this->CalculationStrategy = $strategy;
	}

	public function setVariables(array $vars): void {
		if ($this->CalculationStrategy->validate($vars)) {
			throw new InvalidArgumentException();
		}
		$this->vars = $vars;
}
	public function evaluate(): float
	{
		if ($this->vars === null || $this->calCalculationStrategy === null) {
			throw new LogicException();
		}
		return $this->CalculationStrategy->calculate($this->vars);
	}
}
class PlusCalculationStrategy implements CalculationStrategyInterface
{
	public function validate(array $vars): bool
	{
		return count($vars) === 2;
	}

	public function calculate(array $vars): float
	{
		return $vars[0] + $vars[1];
	}
}
//他にminusCulculationStrategyもある
$expression = new Expression();
$expression->setCalculationStrategy(new PlusCalculationStrategy());
// ExpressionInterfaceとして使う
$expression->setVariables([1.1, 2.2]);
echo $expression->evaluate(); // 3.3

P.254 ▼図8-20 Strategyパターンによる式 図の中にある文字の修正

CalcurationStrategyInterface
CalculationStrategyInterface
PlusCalcurationStrategy
PlusCalculationStrategy
MinusCalcurationStrategy
MinusCalculationStrategy

P.255 9行目

calcurate()
calculate()

P.284

モデル駆動設計(MDD:Make Driven Design)
モデル駆動設計(MDD:Model Driven Design)