私は長年の開発者です(49歳)が、オブジェクト指向開発は初めてです。私はBertrand Meyer's Eiffel以来オブジェクト指向について読んでいますが、オブジェクト指向プログラミングはほとんどしていません。
ポイントは、オブジェクト指向設計に関するすべての本は、ボート、車、または私たちが頻繁に使用する一般的なオブジェクトの例から始まり、属性とメソッドを追加し、オブジェクトの状態をモデル化する方法と何ができるかを説明し始めることですそれ。
そのため、通常、「モデルが優れているほど、アプリケーション内のオブジェクトをより適切に表し、すべてがより優れている」というようなものになります。
これまでのところ非常に良いですが、一方で、「クラスは単一のページに収まる必要があります」などのレシピを提供する複数の著者を見つけました(「どのモニターサイズで?」コードを印刷します!)。
たとえば、PurchaseOrder
動作を制御する有限状態マシンとのコレクションを持つクラスを考えてみましょう。PurchaseOrderItem
ここでの作業の引数の1つは、PurchaseOrder
いくつかのメソッド(データクラス以上)を持つ単純なクラスを使用することです。PurchaseOrderFSM
「エキスパートクラス」のためのハンドル有限状態マシンというPurchaseOrder
。
これは、コーディング・ホラーに関するJeff AtwoodのCode Smells投稿の「Feature Envy」または「Inappropriate Intimacy」分類に該当すると言えます。私はそれを常識と呼んでいます。実際の注文書を発行、承認、またはキャンセルできる場合、PurchaseOrder
クラスにはissuePO
、approvePO
およびcancelPO
メソッドが必要です。
それは、私がオブジェクト指向の基礎として理解している「凝集を最大化する」と「結合を最小化する」という古くからの原則とは関係ないのでしょうか?
それに、それはクラスの保守性に役立ちませんか?
PurchaseOrder
、あなたは自分のメソッドに名前を付けることができissue
、approve
とcancel
。PO
サフィックスは負の値を追加します。