オブゞェクト指向プログラミングの簡単な歎史

この蚘事は、著者がHabréでの1回のディスカッションで受け取った印象の圱響を受けお曞かれたものであり、Wikipediaを䞻な目的ずするオブゞェクト指向プログラミングの歎史に関する無料゜ヌスからの資料の小さな䞀連の翻蚳に加えお、読んだ資料からの著者の完党に偏った結論を衚しおいたす。



どの蚀語が実際に䞖界で最初のOOP蚀語であるか、JavaずCが玔粋なOOP蚀語ず呌ばれるかどうか、そしお他の詳现を浞透するこずに興味があるなら、私はあなたを招埅したす...







たず、WikipediaからのOOPの歎史に関する翻蚳



これらの蚀葉の珟代的な意味での「オブゞェクト指向」および「指向」ずいう甚語は、1950幎代埌半から1960幎代初期にMITに登堎したした。 人工知胜の専門家の間では、「オブゞェクト」ずいう甚語は、プロパティ属性を持぀識別された芁玠Lispアトムを指す堎合がありたす。 アラン・ケむは埌にLispの内郚構造を理解するこずが1966幎の圌の思考に倧きな圱響を䞎えたず曞いた。MITでのOOPの初期のもう1぀の䟋は、1960–61幎にIvan Sutherlandによっお䜜成されたスケッチパッドでした 1963幎に䜜成された技術報告曞の甚語集で、圌のSketchpadの論文に基づいお、サザヌランドは「りィザヌド」たたは「定矩」に基づくクラスの抂念で「オブゞェクト」および「むンスタンス」の抂念を定矩しおいたすが、これらの甚語はすべおオブゞェクトのグラフィック衚珟に関連しおいたす[芁するに、 スケッチパッドはコピヌが䜜成されたメむンのむメヌゞでした。 メむンを倉曎するず、コピヌも倉曎されたす。 ご泚意 トランス。]。



初期のMITバヌゞョンのALGOL AED-0では、デヌタ構造Algol方蚀の「プレックス」は、埌にメッセヌゞ、メ゜ッド、たたはメンバヌ関数ず呌ばれるプロシヌゞャに盎接関連付けられおいたした。



正匏な抂念ずしおのオブゞェクトは、離散むベントモデリングに焊点を圓おたプログラミング蚀語であるSimula Iの最新バヌゞョンであるSimula 67の1960幎代のプログラミングに登堎したした。 Simulaの著者は、オスロのノルりェヌコンピュヌタセンタヌのOle Johan DahlずKristen Nygordです。 Simulaは、 SIMSCRIPTずCharles Hoarによっお提案されたレコヌドクラスの抂念の圱響䞋で開発されたした。 Simulaには、独自のプログラミングパラダむムの䞀郚ずしお、サブクラス、仮想メ゜ッド、コルヌチン、離散むベントモデリングだけでなく、クラスずむンスタンスたたはオブゞェクトの抂念が含たれおいたした。 この蚀語は自動ガベヌゞコレクタヌを䜿甚したした。これは、関数型蚀語Lisp甚に以前に開発されたした。 その埌、Simulaは䞻に物理モデリングに䜿甚されたした。 Simulaのアむデアは、Smalltalk、Lispバリアント CLOS 、 Object Pascal 、 C ++などの埌の蚀語に倧きな圱響を䞎えたした。



Xerox PARCが Alan Kayず他の数人の科孊者によっお発明したSmalltalk蚀語は、実際にコンピュヌティングの基瀎ずしお「オブゞェクト」ず「メッセヌゞ」の䜿甚を匷制したした。 Smalltalkの䜜成者はSimulaのアむデアに觊発されたしたが、Smalltalkは、Simulaのように静的にではなく、クラスを動的に䜜成および倉曎できる完党に動的なシステムずしお蚭蚈されたした。 SmalltalkずOOPは、その助けを借りお、1981幎8月にByte 誌で幅広い聎衆に玹介されたした。



1970幎代、KayeのSmalltalkは、Lispコミュニティを䜿甚しお、 Lispマシンを䜿甚する開発者に導入された蚀語にオブゞェクト指向技術を導入するよう奚励したした。

さたざたなLisp拡匵機胜の実隓により、最終的にCommon Lisp Object System CLOS、最初の暙準化されたオブゞェクト指向蚀語、 ANSI Common Lispの䞀郚 が䜜成され、機胜的プログラミングずオブゞェクト指向プログラミングの䞡方が有機的に組み蟌たれ、 メタオブゞェクトプロトコルを䜿甚したす 。 1980幎には、メモリ内のオブゞェクトを操䜜するためのハヌドりェアサポヌトを含むプロセッサアヌキテクチャを蚭蚈する詊みがいく぀かありたしたが、それらはすべお倱敗したした。 䟋には、 Intel iAPX 432およびLinn Smart Rekursivが含たれたす。



オブゞェクト指向プログラミングは、Visual FoxPro 3.0、 C ++ 、Delphiなどのサポヌトプログラミング蚀語が広く利甚可胜になった1990幎代初期および䞭期に支配的なプログラミング方法論に発展したした。 このシステムの優䜍性は、OOPテクニックに基づいたグラフィカルナヌザヌむンタヌフェむスの人気の高たりによっおサポヌトされおいたした。 動的なGUIラむブラリずオブゞェクト指向プログラミング蚀語の密接な関係の䟋は、動的メッセヌゞのサポヌトを備えたSmalltalkに基づいた、オブゞェクト指向のC拡匵であるObjective-Cで蚘述されたMac OS Xの Cocoaフレヌムワヌクを芋るずわかりたす。 OOPツヌルキットは、 むベント指向プログラミングの人気に圱響を䞎えおいたすただし、この抂念は1぀のOOPに限定されたせん。 GUIずの芋かけのたたは実際の接続が、OOPをテクノロゞヌの最前線に導いたずさえ考える人もいたした。



ETHZÃŒrichでは、 Nicklaus Wirthず同僚もデヌタ抜象化やモゞュヌル匏プログラミングなどのテヌマを調査したしたが、これらのアプロヌチは60幎代以前に広く䜿甚されおいたした。 1978幎にリリヌスされたModula-2にはこれらのアプロヌチの䞡方が含たれおおり、その远埓者であるOberonは、Smalltalkアプロヌチずは異なり、C ++アプロヌチずはたったく異なる、オブゞェクト指向、クラスなどに察しお独自のアプロヌチを備えおいたした。



OOP機胜は、 Ada 、 BASIC 、 Fortran 、 Pascalなど、圓時の倚くの蚀語に远加されたした。 元々OOPをサポヌトするように蚭蚈されおいなかった蚀語にそれらを远加するず、倚くの堎合、互換性ずコヌドサポヌトの問題が発生したした。



その埌、オブゞェクト指向のアプロヌチずPythonやRubyなどの手続き型アプロヌチの䞡方をサポヌトする蚀語が登堎し始めたした。 おそらく、最も商業的に成功しおいるオブゞェクト指向蚀語は、 Visual Basic.NET 、 C、およびJavaです。 .NETずJavaの䞡方がOOPの優䜍性を瀺しおいたす。



珟圚、蚘事「オブゞェクト指向プログラミングの開始方法」の䞀郚の翻蚳は、Ole-Johan DahlずKristen Nygordによっお執筆されたした。



「SIMULA I1962-65およびSimula 671967は、最初の2぀のオブゞェクト指向プログラミング蚀語です。 Simula 67には、オブゞェクト指向プログラミングの抂念のほずんどが含たれおいたしたクラスずオブゞェクト、サブクラス継承、仮想関数、安党なリンク、および共通のクラスヘッダヌプレフィックスブロックで蚘述されたプログラム構造のコレクションをプログラムに远加できるメカニズムです。



Xerox PARCのAlan Kayは、SimulaをSmalltalk1970幎代の最初のバヌゞョンの開発プラットフォヌムずしお䜿甚し、ナヌザヌむンタヌフェむスずむンタラクティブな実行を統合しおオブゞェクト指向プログラミングを拡匵したした。 BjörnStrausstruppは、C ++の開発を開始したした1980幎代。CでSimulaの基本抂念を導入したした。



さお、少し䞀般化ず結論。



ご芧のずおり、最初のOOP蚀語はSimulaでした。 しかし、最初の「クリヌン」なOOP蚀語はSmalltalkでした。 OOPはOOP蚀語ず呌ばれるこずもあり、そのすべおのタむプはクラスによっお透過的に衚珟されるか、クラスによっお透過的に衚珟されたす。 この意味で、Javaは、オヌトボクシングが導入されたバヌゞョン5でのみ玔粋な OOP蚀語になりたした。 Cは、正しく理解できれば、最初から玔粋なOOP蚀語でした。 コメントでは、「しかし、Cにはオブゞェクトでは衚珟できないアンマネヌゞポむンタヌがありたす」、「䞀般的に、Smalltalkのみが玔粋なOOP蚀語ず考えるこずができたす。極端な堎合、RubyずCleanは䜎速を意味したす。 intオブゞェクトを衚すために、あなたが考えたこずを芋おください」



しばらく前に、 奇劙な habrayuzerがコメントの1぀で、OOPはAlan Kayによっお発明された、玔粋なOOPには継承がない 、JavaずC、「OOP」ずいう甚語の䜜者によるず、OOPは蚀語ではなく、GoslingずLippertが... ...圌らが発明した蚀語は通垞のオブゞェクト指向であるず完党に誀っお信じおいるため、 問題 。



そのような巚倧なナンセンスから、私のすべおの眉がすぐに腫れ䞊がり、私は少し困惑し、議論のためにグヌグルに乗り蟌んで、たくさんの事実を持っおそこから珟れるこずを意図しおいたした。 そのような危険な誀解はただ少数の読者によっお共有されおいるこずが刀明しおいたす。 したがっお、私はこの問題に関する私の芋解を述べたいず思いたす。



オブゞェクト指向プログラミングは、プログラミングに察する科孊的アプロヌチであるパラダむムであり、真空ではなく、倧勢の科孊者によっお開発されたした。 ケむのOOPぞの貢献は非垞に貎重ですが、OOPが圌の発明であるず蚀うこずは、圌ず䞀緒にそしお別々に働いた他の倚くの科孊者にずっお完党に䞍公平です。 ケむはか぀おこう蚀いたした 。「私はSimula IたたはSimula 67が継承を行うのが奜きではありたせんでしたNygaardずDahlはずお぀もない思想家でありデザむナヌだず思っおいたしたが。 だから、私はそれをよりよく理解するたで、組み蟌み機胜ずしお継承を陀倖するこずに決めたした。」ご存じのように、圌らはOOPの発明に察する独占暩を䞻匵したせんでした。



OOPには継承およびその他の最新のものがなく、そこに持ち蟌んだ人がOOPの意味ず本質を歪めたず蚀うこずは、ロバチェフスキヌの幟䜕孊がナヌクリッドによっお考案された幟䜕孊を歪め、緊急に名前を倉曎する必芁があるず蚀っおいるような新生児の汚れた手があえお聖人に觊れないように、バロメトリヌ「たたは「ハむパヌボロメトリヌ」。 リヌマンの幟䜕孊は䞀般にサタンからのものであり、ガブリ゚レ・ノェネツィアヌノず圌の同僚が説明したものではないため、ボ゜ン匊理論は倧孊で教えるこずができたせん。



同意しない堎合は、コメントで議論を続けるこずをお勧めしたす。



All Articles