私が作成するいくつかのオブジェクトは実世界のオブジェクトをモデリングしていますが、OOP前のコードは同じことをしませんか?
OOPとpre-OOPコードの最大の違いは、前者は、相互に対話する個別のエンティティのグループとして現実世界の状況をモデル化することです。独自のアクションを持つ外部イベント。後者は、それ自体では何もしない大きなデータの塊としてすべてをモデル化しますが、計算は「発生するもの」を表し、それらの一部またはすべてに影響を与える可能性があります。
現実の世界をより良くモデル化するかどうかにかかわらず、それはあなたがモデル化する世界のどの側面に依存します。たとえば、火が周囲のオブジェクトに与える影響を説明する物理シミュレーションは、光と熱の両方が適切であるため、「従来の」アプローチでより適切に表されます。他のオブジェクトの外部状態と内部状態の両方に影響し、特定の各オブジェクトの動作に応じて変化せず、プロパティのみの影響を受ける定義済みプロセス。
一方、相互作用して目的の動作を生成するさまざまなコンポーネントをモデリングしている場合、それらを受動的なものではなくエージェントとして扱うと、何も見落とさずに正しく実行できます。テレビの電源を入れたい場合は、ボタンを押すだけTV.turnOn
です。電源コードが抜かれている場合は、確認してくれます。そのため、コグ自体(正しくプログラムされている場合)がプライマリインタラクションの結果として発生するセカンダリインタラクションを処理するため、コグをオンにして、タッチしている他のコグをオンにすることを忘れるリスクはありません。
しかし、オブジェクト指向は本当に物事をモデル化する方法に関するものであり、そのモデル化の方法は私にとって現実の世界に触発されていないようです。
世界が実際にどのようにあるかということよりも、私たちが世界を知覚する方法に関係していると思います。すべては単なる原子の束(またはエネルギー、波など)であると主張することはできますが、それは私たちが直面している問題に対処し、周囲の環境を理解し、将来のイベントを予測するというタスクを処理するのに役立ちません(または過去のものを記述する)。したがって、私たちは世界の「メンタルモデル」を作成し、それらのメンタルモデルは、データ+プロセス1よりもオブジェクト指向とのより良い対応を見つけることがよくあります。
また、ほとんどの人がOOPを「古典的なOOP」の同義語と考えていることにも注目してください。これは、分類と物のサブセットを分類的に作成し、オブジェクトを非常に特定のセットに明確に入れます。これは、再利用可能な新しいタイプを作成するのに非常に便利ですが、モデリングしているエンティティがほとんど自己完結型であり、他のオブジェクトとのやり取りを開始する間、やり取りの対象となることはめったにありません。さらに悪いことに、そのエンティティのインスタンスがほとんどない場合(1つだけである場合)、またはインスタンスの構成、動作、またはその両方が大きく異なる場合。
ただし、「プロトタイプOOP」もあります。この場合、オブジェクトは類似したオブジェクトを選択し、それらが異なる部分を列挙することで記述されます。このエッセイは、思考プロセスの技術的ではない良い説明としてお勧めします(Steve Yeggeの標準であっても、投稿全体が大きすぎるので、関連するセクションを指します:P)。繰り返しますが、これは既知のインスタンスと比較して未知のインスタンスを想像するときのメンタルモデルに適していますが、実際の世界の「動作」には必ずしも関係ありません...多くの点で「似ている」として)