オブジェクト(コンピュータサイエンス)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータサイエンスオブジェクトをすることができる変数データ構造機能、又は方法、そのようなものとして、あるメモリによって参照識別子

オブジェクト指向のプログラミング・パラダイムオブジェクトは、変数、関数、およびデータ構造の組み合わせであってもよいです。特に、パラダイムのクラスベースのバリエーションでは、クラスの特定のインスタンス参照します

リレーショナルモデルデータベース管理、オブジェクトとすることができるテーブルまたは、又はデータ及び(例えば、特定の人に、人の年齢関連など)のデータベース・エンティティとの間の関連付け。[1]

オブジェクトベース言語

プログラミング言語の重要な違いは、オブジェクト指向言語とオブジェクトベース言語の違いです。言語にオブジェクトの基本機能(ID、プロパティ、属性)が含まれている場合、その言語は通常、オブジェクトベースと見なされます。言語がオブジェクトベースであり、ポリモーフィズム、継承、カプセル化、および場合によっては構成の機能も備えている場合、その言語はオブジェクト指向と見なされます。多形性とは、渡されるオブジェクトに基づいて、関数の名前を複数の動作でオーバーロードする機能を指します。従来のメッセージパッシングは、最初のオブジェクトのみを識別し、それがそのオブジェクトに「メッセージを送信している」と見なします。ただし、FlavoursCommon Lisp ObjectSystemなどの一部のOOP言語(CLOS)関数の最初のパラメーター以上の識別を有効にします。[2]継承とは、オブジェクトクラスをサブクラス化し、既存のクラスのサブクラスであり、その親のすべてのデータ制約と動作を継承するだけでなく、新しいクラスを追加したり、それらの1つ以上を変更したりする新しいクラスを作成する機能です。 。[3] [4]

オブジェクト指向プログラミング

オブジェクト指向プログラミングは、モジュール式の再利用可能なソフトウェアシステムを設計するためのアプローチです。オブジェクト指向アプローチは、コンピュータープログラミングの最初の段階にまでさかのぼる優れた設計手法の進化形です。オブジェクト指向は、構造化プログラミング抽象データ型などの古い手法を論理的に拡張したものです。オブジェクトは、ポリモーフィズム継承が追加された抽象データ型です。

プログラムをコードやデータとして構造化するのではなく、オブジェクト指向システムは「オブジェクト」の概念を使用して2つを統合します。オブジェクトには、状態(データ)と動作(コード)があります。オブジェクトは、現実の世界で見られるものに対応することができます。したがって、たとえば、グラフィックプログラムには、正方形メニューなどのオブジェクトがあります。オンラインショッピングシステムには、ショッピングカート、顧客、製品などのオブジェクトが含まれます。ショッピングシステムは注文支払い割引などの動作をサポートします。オブジェクトはクラス階層として設計されています。たとえば、ショッピングシステムでは、電子製品などの高レベルのクラスが存在する可能性があります。キッチン用品たとえば、電子製品CDプレーヤー、DVDプレーヤーなど)では、さらに改良が加えられる場合があります。これらのクラスとサブクラスは、数理論理学のセットとサブセット対応します[5] [6]

特殊なオブジェクト

オブジェクトの重要な概念はデザインパターンです。デザインパターンは、一般的な問題に対処するための再利用可能なテンプレートを提供します。次のオブジェクトの説明は、オブジェクトの最も一般的なデザインパターンの例です。[7]

  • 関数オブジェクト関数のように機能する(関数へのC / C ++ポインターのように)単一のメソッド(C ++では、このメソッドは関数演算子 "operator()")を持つオブジェクト。
  • 不変オブジェクト:作成時に固定状態で設定され、その後変更されないオブジェクト。
  • ファーストクラスオブジェクト:制限なしで使用できるオブジェクト。
  • コンテナオブジェクト:他のオブジェクトを含めることができるオブジェクト。
  • ファクトリオブジェクト:他のオブジェクトを作成することを目的としたオブジェクト。
  • メタオブジェクト:他のオブジェクトを作成できるオブジェクト(必ずしもオブジェクトではないクラスと比較してください)。
  • プロトタイプオブジェクト:コピーすることで他のオブジェクトを作成できる特殊なメタオブジェクト
  • 神オブジェクト:知っている、またはやりすぎのオブジェクト(これはアンチパターンの例です)。
  • シングルトンオブジェクト:プログラムの存続期間中にそのクラスの唯一のインスタンスであるオブジェクト。
  • フィルタオブジェクト:データのストリームを入力として受け取り、それをオブジェクトの出力に変換するオブジェクト。多くの場合、入力ストリームと出力ストリームは文字のストリームですが、これらは任意のオブジェクトのストリームである場合もあります。これらは、開発者側で必要な抽象化によって既存の実装を隠すため、一般的にラッパーで使用されます。

分散オブジェクト

オブジェクト指向のアプローチは、単なるプログラミングモデルではありません。分散システムのインターフェース定義言語としても同様に使用できます。分散コンピューティングモデルのオブジェクトは、プログラミングオブジェクトよりも粒度が大きく、長持ちし、サービス指向である傾向があります。

分散オブジェクトをパッケージ化する標準的な方法は、インターフェイス定義言語(IDL)を使用する方法です。 IDLは、分散サーバーオブジェクトのすべての詳細をクライアントから保護します。オブジェクトが存在するコンピューター、オブジェクトが使用するプログラミング言語オペレーティングシステム、その他のプラットフォーム固有の問題などの詳細。 IDLは通常、トランザクションや永続性などのサービスをすべてのオブジェクトに均一に提供する分散環境の一部でもあります。分散オブジェクトの最も一般的な標準の2つは、Object ManagementGroupCORBA標準とMicrosoftのDCOMです。[8]

分散オブジェクトに加えて、オブジェクトの基本概念に対する他の多くの拡張機能が、分散コンピューティングを可能にするために提案されています。

  • プロトコルオブジェクト、オブジェクト指向インターフェイス内のネットワーク通信を囲むプロトコルスタックのコンポーネントです
  • レプリケートされたオブジェクト、分散マルチパーティプロトコルを実行して内部状態間の高い整合性を実現し、調整された方法で要求に応答する分散オブジェクト(レプリカと呼ばれる)のグループです例には、フォールトトレラントなCORBAオブジェクトが含まれます。
  • ライブ分散オブジェクト(または単にライブオブジェクト [9]は、複製されたオブジェクトの概念を、分散プロトコルを内部的に使用する可能性のあるレプリカのグループに一般化します

分散オブジェクトプロトコルオブジェクトなど、これらの拡張機能の一部は、特定のコンテキスト(リモートメソッド呼び出しプロトコル構成など)で使用される特殊なタイプの「通常の」オブジェクトのドメイン固有の用語です複製されたオブジェクトライブ分散オブジェクトなどの他のオブジェクトは、オブジェクトが一度に1つの場所に存在するという通常のケースを放棄し、その概念をエンティティ(レプリカ)のグループに適用するという点で、より非標準的です。複数の場所にまたがって、状態の一貫性が弱く、メンバーシップが動的に変化する可能性があります。

セマンティックWeb

セマンティック・ウェブは、本質的に分散オブジェクトフレームワークです。セマンティックWebの2つの主要なテクノロジーは、Webオントロジー言語(OWL)とリソース記述フレームワーク(RDF)です。 RDFは、インターネット経由でアクセス可能な基本オブジェクト(名前、プロパティ、属性、関係)を定義する機能を提供します。 OWLは、集合論に基づいて、多重継承などの追加のモデリング機能を提供する、より豊富なオブジェクトモデルを追加します

OWLオブジェクトは、インターフェイス定義言語を介してアクセスされる標準の大まかな分散オブジェクトとは異なります。インターネットは絶えず進化しており、1セットのインターフェイスでの標準化を実現するのは難しいため、このようなアプローチはインターネットには適していません。OWLオブジェクトは、JavaやC ++などのプログラミング言語でアプリケーションドメインモデルを定義するために使用されるオブジェクトの種類に似ている傾向があります

ただし、OWLオブジェクトと従来のオブジェクト指向プログラミングオブジェクトには重要な違いがあります。従来のオブジェクトは通常、単一の継承で静的階層にコンパイルされますが、OWLオブジェクトは動的です。OWLオブジェクトは、実行時にその構造を変更でき、新しいクラスまたは異なるクラスのインスタンスになることができます。

もう1つの重要な違いは、現在システムにない情報をモデルが処理する方法です。プログラミングオブジェクトとほとんどのデータベースシステムは、「閉世界仮説」を使用します。事実がシステムに知られていない場合、その事実は偽であると見なされます。セマンティックWebオブジェクトは、オープンワールドの仮定を使用します。ステートメントは、偽であるという実際の関連情報がある場合にのみ偽と見なされます。それ以外の場合は、真でも偽でもない不明であると見なされます。

OWLオブジェクトは、実際にKL-ONEやLoomなどの人工知能フレーム言語のオブジェクトに最もよく似ています

次の表は、JavaやC ++などのオブジェクト指向プログラミング言語の従来のオブジェクトとセマンティックWebオブジェクトを対比したものです。[10] [11]

OOPオブジェクト セマンティックWebオブジェクト
クラスはインスタンスの型と見なされます。 クラスは個人のセットと見なされます。
インスタンスは実行時にタイプを変更できません。 クラスメンバーシップは実行時に変更される場合があります。
クラスのリストはコンパイル時に完全に認識されており、それ以降は変更できません。 クラスは実行時に作成および変更できます。
コンパイラはビルド時に使用されます。コンパイル時エラーは問題を示します。 Reasonerは、実行時またはビルド時の分類と整合性チェックに使用できます。
クラスは、命令型の関数とメソッドを介して、その意味と動作の多くをエンコードします。 クラスは、OWLステートメントの観点からその意味を明確にします。命令型コードを添付することはできません。
インスタンスは、実行中のプログラムの外部から簡単にアドレス指定できない限り、匿名です。 すべての名前付きRDFおよびOWLリソースには、それらを参照できる一意のURIがあります。
閉じた世界:ステートメントが真であることを証明するのに十分な情報がない場合、それは偽であると見なされます。 オープンワールド:ステートメントが真であることを証明するのに十分な情報がない場合、それは真または偽である可能性があります。[12]

も参照してください

参考文献

  1. ^ Oppel、Andy(2005)。SQLの謎を解き明かします。マグロウヒル。p。7. ISBN 0-07-226224-9
  2. ^ ガブリエル、リチャード; Linda G. DeMichie(1987)。「CommonLispObject System:概要」(PDF)LucidInc。テクニカルレポートコンピュータサイエンスの講義ノート。276:151 Bibcode1987LNCS..276..151D土井10.1007 / 3-540-47891-4_15ISBN  978-3-540-18353-2
  3. ^ ウェグナー、ピーター(1987年12月)。 Meyrowitz、Norman(ed。) 「オブジェクトベースの言語設計の次元」。OOPSLA'87会議議事録22(12):168–182。土井10.1145 /38807.38823
  4. ^ Barbey、S; M.ケンペ; A. Strohmeier(1993)。「Ada9Xを使用したオブジェクト指向プログラミング」テクニカルレポートのドラフトローザンヌソフトウェアエンジニアリング研究所のスイス連邦工科大学取得した15年12月2013Ada 83自体は、通常、オブジェクト指向とは見なされません。むしろ、Wegner [Weg 87]の用語によれば、それは制限された形式の継承のみを提供し、ポリモーフィズムを欠いているため、オブジェクトベースであると言われています。
  5. ^ Jacobsen、Ivar; マグナス・クリスターソン; パトリック・ジョンソン; ガンナーオーバーガード(1992)。オブジェクト指向ソフトウェア工学アディソン-ウェズリーACMプレス。ISBN 0-201-54435-0
  6. ^ 「オブジェクトとは何ですか?」oracle.comOracleCorporation 取得した13年12月2013
  7. ^ マーティン、ロバートC. 「設計原則と設計パターン」(PDF)2015年9月6日にオリジナル(PDF)からアーカイブされまし2017年4月28日取得
  8. ^ Orfali、Robert(1996)。Essential Client / Server SurvivalGuideニューヨーク:Wiley ComputerPublishing。頁 399から403までISBN 0-471-15325-7
  9. ^ Ostrowski、K.、Birman、K.、Dolev、D。、およびAhnn、J。(2008)。 「ライブ分散オブジェクトを使用したプログラミング」、オブジェクト指向プログラミングに関する第22回欧州会議の議事録、パフォス、キプロス、2008年7月7〜11日、J。Vitek編、コンピュータサイエンスのレクチャーノート、vol。 5142、Springer-Verlag、ベルリン、ハイデルベルク、463-489、 http: //portal.acm.org/citation.cfm?id = 1428508.1428536
  10. ^ Berners-Lee、Tim; ジェームズヘンドラー; オーララッシーラ(2001年5月17日)。「セマンティックWebコンピューターにとって意味のある新しい形式のWebコンテンツは、新しい可能性の革命を解き放ちます」サイエンティフィックアメリカン284:34–43。土井10.1038 / scientificamerican0501-342013年4月24日にオリジナルからアーカイブされまし
  11. ^ Knublauch、Holger; Oberle、Daniel; テトロー、フィル; ウォレス、エヴァン(2006-03-09)。「オブジェクト指向ソフトウェア開発者のためのセマンティックWeb入門書」W3C 2008年7月30日取得
  12. ^次の 表から抜粋した表: http //www.w3.org/2001/sw/BestPractices/SE/ODSD/

外部リンク