オブジェクト指向の思考プロセスとは何ですか?[閉まっている]


9

私は過去数ヶ月間、ZendのMVC実装と組み合わせてOOPを研究してきました。私は一般的に、プログラミングにはかなり新しいですが、私は物事に必ず私が理解することを意味私のための「正しい」方法で、学ぶべきだと強く感じ、なぜ物事は彼らが道をやっているし。つまり、何かを行う方法(何かを言う、音楽など)を学ぶ上で、何かを行う方法を学ぶ最善の方法は、そもそもなぜそのように行われるのかを知ることであることがわかりました。

とにかく、私は自分のビジネスモデル(つまりMVCのM)を開発する方法を理解するのに非常に苦労してきました。OOPを一般的に理解していないからではないと判断しました。数ヶ月、私は概念を理解することは非常に難しいとは思いません。私が研究した例は、実際には非常に直感的です。私の問題は、私自身の問題をオブジェクト指向のソリューションに変換するプロセスにあると思います。本の例(私がこれまでに読んだもの)は明白すぎるため、問題をオブジェクトに変換するプロセスはそれほど難しくありません。私が見落としているのは、高レベルの抽象化されたプロセスです。すべてのオブジェクト指向ソリューションが最高レベルで回答する必要があるステップまたは質問のある種のリスト。

このようなプロセスを5ステップ以内で説明する必要がある場合、それらはどのようなもので、その理由は何ですか。問題をオブジェクト指向のソリューションに変換する最も効果的なプロセスは何ですか?


1
OOPは常にそのすべてを意味しません...
ジョブ

OOPの学習で、デザインパターンについて何か読んだことがありますか?
Zoredache

1
モデルの作成が難しい場合は、ドメイン駆動設計に関するEric Evanの本を読むことをお勧めします。@Simon Stellingsの回答も参照してください。本はこのプロセスをかなり詳しくカバーしています。
ファルコン

@Zoredacheデザインパターンの概念と、シングルトン、ファクトリー、MVC自体(Zendの実装ではフロントコントローラーでもある)などのいくつかの例を見つけました。しかし、いわばそれが私の次の行動でした。エンタープライズパターンに関するMartin Fowlerの本を手に取りましたが、これまでの紹介の一部しか読んでいません。あなたがお勧めする明確で読みやすい紹介はありますか?

@Falcon私は先日、SOのphp / MySQLと日付のフォーマットについて質問しました。私はあなたの答えを選びましたが、それは価値があるため、コメントにすぎませんでした。

回答:


10

適切なモデルを見つけることは必ずしも簡単ではありません。これは、明白な知識よりも多くの経験を必要とするものの1つです。ただし、次の簡単なレシピは、最初のメンタルブロックを乗り越えるのに役立つ場合があります。

これはもともとこの文書でアボットによって記述され、「アボットのテキスト分析」と呼ばれることがよくあります。

  1. プレーンテキストの仕様を記述します。
  2. クラスの特定:名詞は良い候補です。
  3. 属性を見つける:形容詞/副詞は良い候補です。
  4. 操作を見つける:動詞は良い候補です。
  5. クラス間の関連を見つけます。
  6. リファイン。

例:

名詞動詞adjectivesマークされています。

ライブラリが 含まれている 図書雑誌を。特定の本のコピーが複数ある場合があります。一部の本は ためのものであるローンだけ。他のすべてのは、図書館員であれば3週間借りることができます 。 図書館のメンバーは通常、一度に最大6個のアイテムを借りることができます が、スタッフのメンバーは一度に 最大12 個のアイテム借りることができます。唯一のスタッフのメンバーが あり借りジャーナルをshort-term

最初の分析を繰り返すと、次のようになります。

クラス:

  • 図書館
  • 本、ジャーナル
  • コピーする
  • ローン
  • 図書館員
  • 項目
  • スタッフメンバー

ここからは、動作を実装するためにどのクラスにどの属性とメソッドが必要かを考え、そのモデルをさらに改良していくことができます。


1
いい答えです。アボットの論文に加えて、ドメインドリブンデザインに関するエリックエヴァンの本をお勧めします。プロジェクトのユビキタス言語を作成する方法と、それから強力なモデルを抽出する方法を教えます。
ファルコン

言語学を少し勉強したので、この答えに惹かれました。あまり努力しなくても直感的に理解できますが、同じ理由で、あまりにも類似しすぎて迷うことがあるので心配です。 。

@Falcon +1は、Kandinskyカバーアートを含む本を推薦します。

@ tbj1982:その通りです。これは単純なヒューリスティックであり、結果はそれを念頭に置いて処理する必要があります。それは黄金の弾ではありませんが、役に立つスターターかもしれません。
blubb

4

私の意見では、TDDアプローチは自然で効率的です。

  1. 特定の要件を書き留めます(与えられた、いつ、それから)
  2. 各要件(最も重要なものを最初に)を単体テストに変換します。
  3. #2で記述されたテストに合格するために、最小限のコードを記述します。
  4. テストに合格したら、SOLIDD設計原則に従ってコードをリファクタリングします。
  5. #4の後、作成したすべてのテストにコードがまだ合格することを確認してください。
  6. 2〜5を繰り返します。

このプロセスにより、サウンドデザインを備えたテスト可能なコードを段階的に作成できます。最初はテストを書く必要はないと思うかもしれませんが、そのアクティビティは実際にサウンドアーキテクチャの構築に役立ちます。


3

私がc ++コードで使用する手順は次のとおりです。

  1. クラス名を決める
  2. コンストラクターのパラメーターとデータメンバーを決定します。
  3. メンバー関数名とプロトタイプを決定する
  4. 他のクラスから独立させる
  5. 設計は完了し、他のすべては単なる実装です。

(1)の理由は、クラスに属する機能のスコープを定義するためです。(2)の理由は、クラスが外部の世界と通信する方法を定義するためです。(3)の理由は、各状況で必要なクラスの機能を選択する方法を定義するためです。(4)の理由は、クラスをさまざまな状況で使用できるようにするためです。(5)の理由は、設計と実装の境界を定義するためです。


命名のための+1。名前を追加するだけで思考プロセスを体系化できるのは驚くべきことです。なぜなら、「現実の世界」のすべての知識を暗黙のうちに取り入れているからです。
Mark Brackett 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.