私は、普遍的なアセンブリ言語の必要性について、Cの人気を常に非難する傾向がありました。マシンレベルでの特異性、標準化、および極度の移植性の組み合わせにより、Cは事実上のユニバーサルアセンブリ言語として機能します。そのため、その役割は無限に続くと思います。
プログラミングコースで、優れたプログラミングの唯一の可能なエンドポイントである一種の「最終モデル」としてOOPが提示されるとき、私はいつも少し驚いていることに言及する必要があります。プログラミングの他の多くの側面と同様に、OOPの価値は、人間の脳が情報を整理する方法、社会グループが長期にわたってソフトウェアをサポートする方法、オブジェクト指向プログラミングの場合はかなり深い側面など、多くの競合する要素間の妥協です宇宙自体の仕組みの
そして、その最後の点は少し打ち込む価値があります。特定のプログラミングスタイルが存在する理由、それらがどのように連携するのか、そしてこのような概念をさらに拡大するにつれて、将来世界がどこに向かっているのかについての物理レベルの調査に興味がある場合は、さらに読んでください...
物理学のオブジェクトは、時間の経過とともに認識可能な一貫性を維持するものです。その結果、私たちのような単純な生き物は、私たちの生存をひどく危険にさらすことなく、少数のビットのみを使用してオブジェクトを表現することで逃げることができます。しかし、大規模な物理学の観点から見ると、この種の単純化を簡単かつ一般的にするために正確に取得しなければならないものの数は非常に多くなります。人間として、私たちはそれほど率直に言って、それについてすべてを考えません。それが真実でなければ、私たちはここにいないでしょう。
あまりにも抽象的な音?そうではありません。たとえば、車の代わりに急速に振動するプラズマ場や、巨大な速度範囲で移動する物質の瞬間的な凝縮に遭遇した場合、友人の家への道をナビゲートしようとすることを想像してください。そのようなシナリオは、社会化の機会にかなり深く入り込むかもしれません。我々は、オブジェクトを必要としているオブジェクト、およびオブジェクトの存在は、私たちの周りの環境の簡素化の巨大かつ非常に重要なレベルを提供してくれます。
それでは、すべてをソフトウェアに戻しましょう。プログラミングの観点から、現実世界のオブジェクトはオブジェクトについて何と言っているのでしょうか?
まあ、一つには、ソフトウェアで「良い」オブジェクトを定義するのは、処理しているデータのタイプが、時間の経過とともに認識可能な永続性のアイデアを容易にサポートするかどうかであるということです。
定義により、OOPの最も簡単な形式は簡単に認識できます。これらは、すでに「添付」されているか、人、家、車などの現実世界の真に物理的なオブジェクトによって定義されているデータのみを使用することで、わずかに対処します。今日でも、これは人々がソフトウェアコースで取得するオブジェクトの唯一の定義であることが多すぎます。些細なオブジェクト指向プログラムでさえ、それよりも広い定義が必要だからです。
オブジェクトの2番目のはるかに興味深いカテゴリは、不滅の実世界のイベントと呼ぶもので構成されます。「不滅」とは、現実世界では明確に定義されたエンティティまたはコレクションとして少なくとも一時的に存在するものの、分散して物理的に意味のあるコレクションとして存在しなくなるものを意味します。シンポジウムは素晴らしい例です。シンポジウムは、しばらくの間、場所と人々のきちんと定義されたコレクションとして存在します。しかし悲しいかな、最高の会議でさえ終わらせなければならず、それらを構成した個々の部分は他の活動に移ります。
しかし、コンピュータとネットワークを使用することによって、私たちは、このような過渡的なシンポジウムを作ることができるように見えるソフトウェアオブジェクトとしてのメモリをキャプチャし、維持することによって、長期的なオブジェクトのように。私たちがコンピューターやデータベースで行うことの多くは、この種の一時的なイベントの不滅化に相当します。実際には、物理的には存在しない方法でそれをキャプチャして拡張することで、実際の宇宙をより豊かにしようとしています。たとえば、最近、本物のパンドラを見ましたか?このような実世界の作品のキャプチャと拡張は、私たち自身の生活、経済、選択肢を驚くほど豊かにし、拡張するのに役立ちます。私にとってこれは、オブジェクト指向プログラミングの中心地であり、最も顕著な影響を与えてきた場所であり続けています。
OOPの最後のカテゴリは、外部イベントへの密接な接続を持たないオブジェクトで構成されますが、代わりにインフラストラクチャです現実世界からの不滅のオブジェクトを使用して、現実の継続的な拡張をサポートする必要がありました。これは、コンピューターの(半)金属までずっと降りることができ、現実世界の化学要素のように、新しい内部世界を構築する興味深い方法で素早く結合できる永続的な現実の断片を作成します。モバイルコンピューティングは、この種の高度なリコンビナトリアルアプローチの成長を促進するのに役立ちました。このアプローチは、多くの点で物理世界のリコンビナトリアル機能を模倣しています。難しいことでもあります。良い選択のように思えるかもしれませんが、通常、サポートする代わりに多様性と拡大をブロックするため、予想外に悪いものであることが判明する可能性があります。
ただ、現実の世界と同じように、プログラムされた世界はまた、プロセスの必要があるので、この最後のカテゴリーはまた、プログラミングのためのただ一つのモデルを使用しての危険性を指摘しませんが比較的変化しないオブジェクトによく対応します。地球はオブジェクトでいっぱいですが、太陽は、エネルギーの低い地球でオブジェクトと活動を「駆動」するために最終的に必要とされる非常に動的なエネルギーの流れでいっぱいです。同様に、コンピューティングの世界を作成する際には、フローや変換、および急速に変化するコンテキストに対処する必要がある場合があります。 。カーネルレベルで行われるプログラミングの多くがオブジェクトのように目立たないことや、Cのようなより処理指向の言語に大きく依存する傾向があることは偶然ではありません。これらは、コンピューター生成の世界で私たちが見ている魅力的な多様性を補完するより深い領域です。
OOPがうまくいかないもう1つの領域は、古いオブジェクトの概念に焦点を合わせすぎています。
現実世界のオブジェクト、特に生きているオブジェクトは、複雑で微妙な方法で環境と対話する絶対的に驚くべきレベルの能力を持っています。お互いを見渡し、互換性と健全性のチェックを行い、おそらく相互作用するいくつかの新しい方法を見つけ出す構成可能なウィジェットは、単純なフレームワークと単純な継承スキームよりも、オブジェクトの現実世界の生物学的概念に非常に近いコードレベルで(通常は必要に応じて!)に集中する。これは、サイバー世界におけるオブジェクトの成長分野の1つであり、環境への反応性がプログラミング自体の中でも当たり前の「エージェントのような」アプローチです。
そして、OOPに対する私の「批評」はこれで終わりです。それでも、より豊かなサイバーワールドを作成することは、「1つだけ」で十分であると仮定するのではなく、プログラミングスタイルの多様性を網羅することを意味する理由を指摘したいと思います。私が感じているのは、私たちが今やっていることがどれほど平凡であるにせよ、本当に面白いものはまだ来ていないということです!