正しく抽象化し概念化する
- 抽象化 : 複数の物事から共通点を抜き出すこと
- ex. 「WordPress も Joomla も、ブログを作ったりページを作ったりできるヤツという意味では同じだよなぁ」
- 概念化 : 抽象化したモノを1つの言葉で表現すること
- ex. 「WordPress や Joomla みたいなシステムは CMS という概念で表せる」
会話においても、システムの業務要件をまとめるにしても、様々な事柄から共通点を抜き出し (= 抽象化し)、適切な名前を付ける (概念化する) と、それが「一番伝えたいこと」「一番明らかにしたいこと」になる。「抽象」「概念」と「具象」「具体」を適切に紐付け、辞書を作ってチームメンバ間で同じ定義を認識しておくこと。
概念化することで「名前」が付くと、そうでない他の物と区別もできるようになる。
抽象化の観点を間違えると、適切に業務整理 (= 複数の事柄・概念の整理) ができないので、集合図を描けるかどうかでチェックしよう。
- 参考 : プログラミングにおける過度な抽象化についての、若干のメモ
- 「人間」クラスと「馬」クラスを作った時点で「Animal」クラスを親クラスにするのは「早すぎる抽象化」かもしれない。「対象物がどれだけの荷物を運べるか調べる」という業務に沿って考え直すと、「Animal」ではなく「運搬者 (Carrier)」という概念でまとめるのが適切
- 小さなクラスを1つずつ作っていき、後からそれらを継承関係にできないか (= 共通点を見出して抽象化できないか) というやり方で対処する
- 参考 : BugbearR's Wiki - 複数の概念をごちゃ混ぜに扱わない
- 「在職状態」カラムで「在職」「出向中」「退職」という3つの概念を管理しょうとすると、「在職かつ出向中」の時に正しく振り分けできなくなる。「在職状況」の中に「出向状況」というカスケードされた構造がある = 概念として同一ではないことを見極める
「結局、この一連の処理でやりたいことは何か」「つまり一言で言うと何なのか」と概念的に考えると、クラス名やメソッド名も適切なモノが見えてくる。
- 関連ブログ記事 : 2016-12-13 エンジニア必須スキル : 物事を抽象化・概念化する