- 重複したコード
- 長すぎるメソッド
- 巨大なクラス
- 長すぎるパラメータリスト
- 変更の偏り
- 変更の分散
- 特性の横恋慕:あるメソッドが、自分のクラスよりも他のクラスもつ場合
- データの群れ
- 基本データ型への執着
- スイッチ文
- パラレル継承:新たなサブクラスを定義するたびに、別の継承ツリーにもサブクラスを定義しなければならない状況
- 怠け者クラス:役に立たないクラスは取り除く
- 疑わしき一般化:YAGNI(You Ain’t Gonna Need It)
- 一時的属性:インスタンス変数の値が、特定の状況でしか設定されないオブジェクト
- メッセージの連鎖
- 仲買人:委譲のやりすぎ
- 不適切な関係:クラス同士の関係が密接過ぎる場合
- クラスのインタフェース不一致
- 未熟なクラスライブラリ
- データクラス:属性と get および set メソッド以外には何も持たないクラス
- 相続拒否:サブクラスが親の属性と操作を必要としない場合
- コメント:コメントは不吉な臭いの予兆
これらそれぞれの「不吉な臭い」に関して、それぞれに対処法が書いてあるのだけど、それぞれの対処法についての詳細はまだよく分かっていない(というかこの章の時点では説明されていない)。要再読。