オブジェクト指向言語

オブジェクト指向言語は、オブジェクトの概念を中心に展開するコンピュータプログラミング言語です。 オブジェクト指向言語は、以前の言語よりもソフトウェアの開発、デバッグ、再利用、および保守を容易にするために開発されました。 オブジェクトやオブジェクト指向言語を理解するには、コンピュータプログラミング言語やデータ構造の進化に関する知識が必要です。

コンピュータプログラミング言語の進化

コンピュータプログラミング言語は長年にわたって継続的に進化してきました。 この進化は、以下の例で詳述されています。

アセンブリ言語。

最初のコンピュータプログラムはアセンブリ言語で書かれていました。 これは、各文が単一の機械命令に対応する原始的なタイプの言語であり、可能な限り最も基本的なコンピュータ操作です。 有用な何かを達成するには、多くの機械命令が必要です。 アセンブリ言語は、特定のタイプのコンピュータに固有のものであり、プログラムを別のタイプのコンピュータに移動するには、まったく新しいプログ アセンブリ言語プログラムは、記述、デバッグ、および保守が困難です。 他の言語は現在、ほとんどのコンピュータアプリケーションに使用されていますが、アセンブリ言語は、新しいチップが開発されたときに第一言語とし

高次言語。

アセンブリ言語の後、高次言語が開発され、初期のものの中にはFORTRANとBASICがありました。 高次言語の一つの文は、英語の文に対応しています。 コンパイラと呼ばれるプログラムは、ソースファイルから文を読み取り、オブジェクトファイルと呼ばれる機械命令を含むファイルを生成します。 オブジェクトファイルは、コンピュータによってロードされ、実行することができます。 高次言語はアセンブリ言語プログラムよりも移植性が高く、適切なコンパイラが存在する限り、同じソースファイルを任意のコンピュータ用にコンパ

初期の高次言語では、整数、浮動小数点数、文字列(文字のシーケンス)などの単純なデータ型のみが許可されていました。 利用可能な唯一のデータ構造は配列でした。 配列は、数値のリストや文字列のリストなど、すべて同じデータ型の要素のリストです。 データベースは、配列のグループを使用して作成されました。 たとえば、製品データベースには、製品番号、製品説明、および製品価格という3つの配列が含まれている場合があります。 たとえば、各配列の3番目の要素が同じ製品に対応していることを確認します。

構造化言語。

コンピュータプログラミング言語の進化の次のステップは、CやPASCALのような構造化言語の開発とデータ構造の導入でした。 データ構造は、より単純なデータ型を単一のレコードにまとめたものです。 たとえば、製品データベースは、製品レコードの配列として構築でき、各レコードには製品番号、製品説明、および製品価格フィールドが含まれています。 これで、1つのレコードに1つのアイテムに関するすべての必要な情報が含まれるようになりました。 構造はまた、言語の手続き部分でより定義されるようになりました。 関数またはプロシージャは、レコードなどのデータ構造に対する基本的な操作を提供するために記述できる、より大きなプログラムの小さな部分です。

オブジェクト指向言語。

コンピュータプログラミング言語の進化の次のステップであるオブジェクト指向は、Smalltalk言語で導入されました。 オブジェクト指向は、構造化プログラミングの概念をさらに一歩進めます。 現在、データ構造と個別のプログラム構造の代わりに、データ要素とプログラム要素の両方がオブジェクトと呼ばれる1つの構造に結合されています。 オブジェクトデータ要素は属性と呼ばれ、オブジェクトプログラム要素はメソッドと呼ばれます。 属性とメソッドを総称して、オブジェクトのメンバーと呼びます。 通常、オブジェクトのメソッドは、オブジェクトの属性を操作できる唯一のプログラムです。

オブジェクトの向きでは、プログラムの表示方法に根本的な変化がありました。 以前の見解では、最終的な結果を達成するためにデータを何らかの方法で操作する必要があり、プログラムは操作を実行する連続的な手段と見なされていました。 オブジェクト指向の観点から見ると、プログラムは、ユーザー、他のプログラム、または他のオブジェクトからのメッセージに反応するオブジェクトのグ この見解は、イベント駆動型プログラミングのアイデアにつながった。 イベントAが発生すると、このオブジェクトはアクションBを実行します。

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

オブジェクト指向プログラミングの主な特徴には、カプセル化とデータ隠蔽、継承、多態性が含ま

カプセル化とデータの非表示。

オブジェクト指向プログラミング(OOP)の中心的な考え方は、オブジェクト属性とその属性を操作するメソッドがオブジェクト内で一緒にバ オブジェクトのメソッドは、オブジェクトとプログラムの他の部分との間の唯一のインターフェイスを提供します。 これは、プログラムの任意の部分がいつでも任意のデータを操作できる以前の言語とは異なります。 これは制限的なようですが、制限により、よりモジュール化されたプログラムが開発されやすく、エラーが含まれる可能性が低くなります。 また、オブジェクトを別の環境に移動しても、オブジェクトが正しく機能する方が簡単であることを意味します。

ソフトウェアオブジェクトは、物理オブジェクトに多少似ています。 たとえば、エンジンを使用して自動車に電力を供給することができます。 属性に対応する内部コンポーネントがありますが、それらが何であるか、またはどのように機能するかに関係する必要はありません。 エンジンは、スロットル、燃料システム、トランスミッション、吸気、および排気マニホールドとインターフェイスする必要があります。 燃料は、燃料システムを経由して以外の任意の手段によってエンジンに入るだろうことは考えられません。 正しいインターフェイスが維持されている限り、エンジンは動作します。 だからそれはオブジェクトと一緒です。 オブジェクト属性は外部から隠されています。 オブジェクトは、そのメソッドを介してその環境と対話します。

継承。

オブジェクト指向プログラミングのもう一つの重要な概念は継承です。 オブジェクトクラスは階層内で定義されており、その祖先(階層内でその上位にあるオブジェクト)の動作を継承すると言われています。 たとえば、描画プログラムには、Shape、Rectangle、およびCircleの3つのオブジェクトクラスが含まれます。 RectangleとCircleが両方ともShapeの子孫になるように定義することができます。

Shapeには、描画サーフェス上の図形の位置など、任意の図形に共通する属性が含まれます。 Shapeには、これらの属性を操作するメソッドも用意されています。 たとえば、moveメソッドはシェイプの位置を変更します。 さらに、すべての図形が応答できる必要があるメソッドの定義、たとえば、図形を描画面に表示するdrawメソッドの定義を提供します。 この場合のdrawメソッドは抽象メソッドと呼ばれ、子孫クラスがそれを実装する必要があるという要件を作成する以外は何もしません。RectangleはShapeの子孫であるため、Shapeから属性(位置)とメソッド(移動)を継承します。 必要な追加の属性(幅と高さ)と、それらの属性を操作する新しいメソッド(setWidth、setHeight)を提供します。 Rectangleは、描画サーフェス上に四角形を描画するdrawメソッドも提供する必要があります。 同様に、Circleは新しい属性(radius)、それを操作するためのメソッド(setRadius)、および独自のdrawメソッドを提供します。

この種の配置では、描画マネージャプログラムは描画面に図形のリストを持つことになります。 オブジェクトを移動するには、オブジェクトのmoveメソッドを呼び出します。 オブジェクトを描画するには、マネージャはオブジェクトのdrawメソッドを呼び出します。 マネージャは、ジョブが完了する限り、オブジェクトがどのように移動したり描画したりするかを知らず、気にしません。 実際には、特定のオブジェクトが実際にどのような形であるかを知ることさえできないかもしれません。 これは、長方形、円、またはShapeから派生した他のオブジェクトである可能性があります。 Shapeから派生していることを知る必要があるだけなので、Shapeが受け取ることができるメッセージを送信できます。

オブジェクト指向言語の継承機能は、プログラミングに全く新しい次元を追加しました。 以前の高次言語を学ぶことは、主に言語構文(言語文がどのように構築されるか)の学習に関与していましたが、それほど難しいことではありません。 オブジェクト指向言語では、構文を学ぶことはまだ必要ですが、標準クラス階層に精通することは、何千ものクラスを含み、各クラスに独自のメソッ ただし、オブジェクトはその親の属性と動作を継承するため、価値があります。 プログラマは、必要なものの大部分を既に実行している既存のオブジェクトを見つけることによって、不要な作業を避けることができます。 その後、新しい機能を段階的に追加することができます。 その結果、低コストで高品質のソフトウェアが得られます。

この特性は、いくつかのオブジェクト指向言語に自動文書化機能を含めることにもつながりました。 以前の言語では、ドキュメントが生成されていれば、ほとんど付け足しとして別々に行われました。 これで、ドキュメント情報をオブジェクトのソースコードに含めることができ、インターネットブラウザで表示することができるクラス階層の上下にハイパー これにより、正確で最新のドキュメントを維持することがはるかに簡単になります。

多型。

オブジェクト指向言語の次の重要な特徴は多態性であり、子孫オブジェクトは祖先のようにメッセージに応答する必要がないことを意味します。 新しいオブジェクトは親のメソッドをオーバーライドすることができ、新しいオブジェクトはメッセージに異なる反応をします。 たとえば、ウィンドウシステムの一般的なクラスは、可視オブジェクトを表すコンポーネントです。 コンポーネントは、アイコン、ボタン、メニュー、スライドバー、チェックボックス、ラジオボタン、さらにはウィンドウなど、画面上に表示されるすべてのオブジ これらの子孫クラスはすべて、コンポーネントのメソッドの一部をオーバーライドして動作を変更します。 たとえば、Iconオブジェクトは、それ自体を小さな画像として表示する必要があります。 Iconはコンポーネントのdrawメソッドをオーバーライドして画像を表示します。

一般的なオブジェクト指向言語

一般的なオブジェクト指向言語には、Smalltalk、C、Java、およびBASICやPASCALなどの他の言語が含まれます。

Smalltalk.Smalltalkは1970年代初頭にXeroxによって開発されたオリジナルのオブジェクト指向言語である。 それ以来、いくつかのバリエーションが導入されています。 それはまだ使用されていますが、普遍的な標準の欠如によって広範な受け入れが妨げられています。

C++。C++は、OOP機能を提供するC言語の拡張です。 これはおそらく現在使用されている最も普及しているオブジェクト指向言語です。 Cは、標準Cプログラムをコンパイルするため、ハイブリッド言語です。 これにより、新しいソフトウェアにオブジェクト指向を使用しながら、既存のCソフトウェアを利用することができます。 CはANSI規格によって制御されます。

Java.Javaは最も広く受け入れられている純粋なオブジェクト指向言語です。 元々はSun Microsystemsが小型家電用の制御言語として開発したものである。 しかし、それはインターネットでの使用に理想的であることが証明されました。 Javaアプレットは、webページに埋め込むことができます。 ブラウザがwebページをロードすると、アプレットもロードされて表示されます。 Sunは依然として言語標準の厳格な管理を維持しています。

クロスプラットフォームの操作性(再コンパイルせずに完全に異なるコンピュータタイプで作業)を容易にするために、Javaは二つの部分で実装されてい コンパイラは、Java仮想マシン(JVM)でのみ実行できるオブジェクトファイルを生成します。 サポートされているオペレーティングシステム(Windows、Unix/Linux、またはSolaris)ごとに個別のJVMを使用できます。 これにより、Javaプログラムは再コンパイルせずにこれらのシステムのいずれかで実行できます。

他の言語。

今日一般的に使用されているほとんどの言語では、何らかの形のオブジェクト指向が可能です。 BASICはオブジェクト指向のVisual BASICに進化し、PASCALはオブジェクト指向のDELPHIに進化しました。 一般的に、これらはCのようなハイブリッド言語であり、オブジェクト指向を必要とせずにサポートします。

コンパイラ;マウス;手続き型言語も参照してください。

Donald M.McIver

参考文献

Deitel、Harvey M.、Paul J.Deitel。 Java:プログラムする方法、第2版。 1998年、東京農業大学農学部農学科博士課程修了。

ヴォス、グレッグ。 オブジェクト指向プログラミング、入門。 ニューヨーク:オズボーン-マグロー-ヒル、1991年。

Related Posts

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です