プログラミングアプリケーションの多様化に伴い、様々な種類のプログラミング言語が誕生しました。この記事では、オブジェクト指向プログラミングとは何か、そしてどのような種類のオブジェクト指向プログラミング言語が存在するのかを探っていきます。ぜひ知識を広げてみてください!

オブジェクト指向プログラミング
一般的にプログラミングには、コンピュータに命令を伝えるための言語や、プログラムに変換されるアルゴリズムの知識が必要ですが、プログラミングとは何でしょうか?
プログラミングとは、作成された目的を達成できるコードを記述するための一連の作業のことである。ソースコードとは、プログラムまたはソフトウェアの内部表現であり、プログラムとは、コンピュータの動作を制御する一連の命令のことである。
基本的に、プログラムは XNUMX つの段階を経ます。適切な言語でのプログラムの編集、ソース コードのマシン用命令への変換、オブジェクト コードと関数ライブラリ間のリンクであり、最終的に実行可能コードと呼ばれるものが生成されます。
プログラムは、ユーザーが理解できるプログラミング言語で作成する必要があります。 これを実現するには、プログラマは既存の多くのプログラミング パラダイムの XNUMX つを採用する必要があります。パラダイムによってビジョンが決まり、したがってその構築に従う方法の選択が決まります。
プログラミングパラダイム
プログラミングとテクノロジーの進歩により、さまざまな方法論やプログラミング パラダイムが生まれました。 これらにより、さまざまなプログラミング スタイルや問題解決のさまざまな方法が生まれました。 次に、既存のパラダイム:
命令型パラダイム
これにより、プログラムは上から下への厳密な命令シーケンスであり、その命令のどこかにサブプログラムが含まれることによってのみ中断されることが確立されます。
構造化パラダイム
プロシージャと関数のブロックごとにグループ化されたコード構造を課します。 コードは、論理的な理由によって支配されるサイクルの形式で再現されます。
宣言的パラダイム
問題を解決するために必要な行動を実行する際に従うべき順序を確立するものではありません。 その中で、問題と解決策が関数として記述される機能パラダイムと、論理述語に基づく論理パラダイムの XNUMX つのタイプが区別されます。
イベントベースのプログラミング パラダイム
問題を検出し、それを解決する方法を確立するための無限の反復に基づいています。
並列、分散、同時のパラダイム
プログラムの実現には、いくつかの計算ユニットが必要です。 ルーチンは他のコンピューティング ユニットでは独立して実行されます。
オブジェクト指向パラダイム

このタイプのプログラミングは、データのカプセル化、オブジェクトの抽象化、クラスの階層に従った型の検証という XNUMX つの基本原則に基づいています。
プログラミング言語は通常、単一のパラダイムのみに従うのではなく、複数のパラダイムを組み合わせた結果である場合があることに注意してください。ただし、ここではオブジェクト指向プログラミングの定義と、存在するさまざまなオブジェクト指向プログラミング言語の概要について詳しく説明します。
品質
これは、合理的なコストで複雑さをより適切に管理できるため、現在最も普及しているパラダイムです。 これにより、パーツを組み込む可能性、つまりコンポーネントに基づいて作業を分割する可能性が高まり、その結果、堅牢で移植可能で再利用可能なアプリケーションが実現され、長期的なメリットがもたらされます。
他のタイプのプログラミングとは異なり、オブジェクト指向プログラミングは、問題解決そのものの中ではなく、問題ドメインから生じるエンティティ内の部品を探します。 主な要件は、各コンポーネントが期待どおりに動作すること、つまり実装方法によって開発が影響されないこと、および各コンポーネントが提供する条件とそれに接続する方法を事前に知ることができることです。
別の観点から見ると、オブジェクト指向プログラミングは知識理論に関連していると言えます。知識理論では、人間は、人間としての経験の産物である情報を、所定のスキームに従って保存すると述べています。 このように、このタイプのプログラミングでは、情報単位に保存されている事前の知識を利用して、個人の精神的なスキームを通じて、知識を発見的または理論的に表現することができます。
原産地
https://youtu.be/aESIbDclIzw?t=5
オブジェクト指向プログラミングは、複雑なプログラムの変更または修正が不可能であることによって生じた危機の結果として、1960 年代に開発された技術、スタイル、または方法論です。 この状況は、プログラムを維持する意欲のある専門人材の不足によってますます悪化しました。
この危機に対する当面の解決策は、プログラムを個別の手順に分割し、特定のタスクを個別に実行する構造化プログラミングの手にありました。 これには、関係するタスクの数が増えるほどプログラマの数も増えるため、プロジェクトに関与する多くの開発者の間で調整を行うことがいかに困難であるかが主な原因で、他の不便も生じました。
間違いなく、このタイプのプログラミングの主な欠点は、概念的にデータをコードから分離する必要があることでした。 プログラムの規模と複雑さに伴って状況はさらに悪化しました。
そこで、プログラムの複雑さを軽減するために、オブジェクト指向プログラミングが生まれました。 その主な利点は、より単純なオブジェクトを使用して複雑なプログラムを構築できることです。 これらのオブジェクトは、この方法論に基づいたソフトウェアのエンティティを構成します。 既存のアプリケーションからデータとコードの両方を継承できるため、プログラマーの生産性が向上します。 また、元のコードを大幅に変更することなく、他のアプリケーションでクラスを拡張して再利用することも簡単になります。
特長
オブジェクト指向プログラミングには複数の特徴があります。主な特徴は次のとおりです。
- オブジェクト指向プログラミングの基礎はアルゴリズムではなくクラスです。 これらは論理的な構成要素を形成します。
- 各オブジェクトはクラスのインスタンスです。
- プログラムは、オブジェクト間で反応する一連のオブジェクトを通じて、メッセージを送受信する手段として認識されます。
- 各オブジェクトは、受信した各メッセージに応答する最適な方法を模索する必要があります。
- 各オブジェクトはさまざまな方法でメッセージに応答する場合があります。
- コンポーネントは交換可能なため、ソフトウェアの変更が容易になります。
- 部分的および内部的な変更は、システムの残りの部分の動作には影響しません。
- オブジェクト指向プログラミングの基本原則に従えば、システムの構築コストは、各部分が相互依存している場合よりも少なくなります。
- 他のクラスから派生したクラスは、前任者の知識とスキルを継承する場合があります。 継承によってクラスは相互に関連付けられ、コードを書き直すことなくその動作方法が活用されます。
- クラス内のメソッドは、名前が同じであっても、異なることを実行できます。 つまり、ポリモーフィズムを通じて、プログラマは、実装が行われるクラスに応じて、同じメソッドのいくつかの形式を実装できます。 つまり、同じ名前またはアクセス手段で複数のメソッドにアクセスできるということです。
違い: 構造化プログラミングとオブジェクト指向プログラミング
すでに述べたように、オブジェクト指向プログラミングは構造化プログラミングの進化を表していますが、開発するシステムの種類に応じてそれぞれの有用性があるため、オブジェクト指向プログラミングが構造化プログラミングよりも優れているという意味ではありません。 XNUMX つの基本的な違いは次のとおりです。
構造化プログラミングはアルゴリズムの問題を解決し、いくつかのデータの導入から始まり、出力が生成されます。 オブジェクト指向プログラミングはオブジェクト モデリングに基づいており、Web アプリケーションの開発に非常に役立ちます。
XNUMX つ目はデータ構造を中心としたもので、XNUMX つ目はオブジェクトに基づいており、それぞれの状態と動作が異なります。
構造化プログラミング内の情報は、構造体と関数呼び出しを介して流れます。オブジェクト指向プログラミングでは、メッセージの送受信によるそれらの間の対話の結果です。
基本原則
オブジェクト指向プログラミングの概念の結果として、このパラダイムの XNUMX つの基本原則が現れます。 これらは:
データのカプセル化
すでに述べたように、オブジェクトは受信したメッセージにどのように応答し、特定の動作を示すかを知っていることが期待されます。 しかし、私たちが望んでいないのは、メッセージを送信する人がその方法を知っているということです。 この目標を達成することは、データのカプセル化として知られています。 言い換えれば、プログラムの各部分が興味のあるものだけを認識し、他のオブジェクトに関連する副作用を回避することが求められています。
つまり、データをカプセル化すると、オブジェクトのコンポーネントへのアクセスは不可能になります。つまり、オブジェクトのコンポーネントはそれぞれ、相互に独立させる設計仕様を持っているため、明確に定義された単一のプログラミング単位内に保持されます。
クライアント オブジェクトに実装形式を認識させないことが望ましい主な理由は、一般に、同じ操作に対して複数の代替手段が存在する可能性があるためです。 さらに、将来的には、お客様の知らないうちに、またはサービスの提供に影響を与えることなく、ある代替案から別の代替案への変更を決定する可能性があります。
オブジェクトの抽象化
オブジェクト指向プログラミングの重要な特徴は、問題を部分的に解決しようとすることです。 このようにして、最初にオブジェクトを見つけて、次にそれらがどのように対話するかを決定し、最後にその動作を実装します。 その結果、見つけたオブジェクトが問題の解決に役立つことがわかります。
抽象化には、精神的なスキーマを構成するデータまたは変数と、そのスキーマを他の所定のスキーマに関連付ける方法、関数、または手順という XNUMX つのタイプの知識が含まれます。 つまり、データ抽象化のおかげで、データのドメインと構造を定義し、それらにアクセスする方法を確立できます。 最後に、抽象化はプログラマによって定義された新しいデータ型となり、前者に適用される属性とメソッドで構成されます。
同じ問題に対して複数の精神的なスキームが存在するため、各プログラマーは、個人の認識に応じて、異なる方法でクラスを編成できます。 つまり、オブジェクトの抽象化は、プログラムの設計内でユーザー定義データを作成する機能です。
クラスの階層に応じた型のチェック
これは、型チェックを行う言語を選択するときです。 コンパイル時にそれを行うことを決定する言語もあれば、実行時に決定する言語もあります。 他の言語はコンパイルすらできないため、実行時まであらゆる種類のテストを行う機会がありません。
実行時にチェックが行われる場合、それは動的チェックと呼ばれます。 逆に、コンパイル時に実行される場合、それは静的チェックと呼ばれます。
静的チェックではエラーは実行時に到達することなく入力から発生するため、このタイプのチェックの方が安全であると言われることがよくあります。 ただし、動的チェックを使用すると、コードを再帰的に書き直す必要がなく、部分的な実装が可能になります。
それはどのように動作しますか?
このパラダイムの下で問題を解決するための最初のステップは、問題領域のオブジェクトまたはエンティティを見つけることです。 次に、問題を解決するためにこれらのエンティティがどのように相互作用し、オブジェクトが相互に送信するメッセージを確立し、どのような順序で、どのような条件で送信するかを見つける必要があります。 最後に、メッセージに対してオブジェクトが与える応答を参照して、オブジェクトの動作を実装する必要があります。
つまり、オブジェクト指向プログラミング パラダイムの下でプログラムが実行されると、次の XNUMX つのことが起こります。オブジェクトが必要に応じて作成され、プログラムによる情報処理と並行してメッセージが XNUMX つのオブジェクトから別のオブジェクトに流れます。また、オブジェクトが不要になるとオブジェクトは削除され、システム内のメモリを解放します。
重要な概念
オブジェクト指向プログラミングとは何かをよりよく理解するために、以下の基本的な概念について述べておく必要があります。
- オブジェクト: メッセージの受信者となることができるだけでなく、メッセージに応答して他のオブジェクトにメッセージを送信できるエンティティを指します。 それは振る舞いを持つ実体です。
- アイデンティティ: あるオブジェクトを別のオブジェクトから区別する側面です。
- メッセージ: これは、サービスを要求するエンティティとそれを提供するエンティティの間の対話の結果です。
- クライアント オブジェクト: メッセージの送信者です。
- 受信者オブジェクト: メッセージを受信するオブジェクトです。
- 委任: オブジェクトから他のオブジェクトへのメッセージの送信を指します。 オブジェクトがメッセージに応答できるようにするために他の人の協力が必要な場合。
- 動作: これらは、受信オブジェクトによって受信されたメッセージに対する応答です。
- ステータス: 各オブジェクトの現在の状況を指します。
- 責任: オブジェクトの状態と動作の間の相互作用です。
- メソッド: 受信したメッセージに対してオブジェクトによって与えられる応答の実装を指します。
- ポリモーフィズム: これは、いくつかのオブジェクトが同じメッセージに、いくつかの異なる方法で応答する能力です。
- クラス: これらは、同じように動作するオブジェクトのセットです。 これらはプログラマによって定義できます。 これらは、オブジェクトを抽象化し、オブジェクト間の関係付け方法を決定することを可能にする精神的なスキームです。
- 属性: 状態の一部を保存するために作成されたオブジェクトの内部変数を指します。
- 契約: 各コンポーネントが提供するものと、それに接続する方法に関する知識を指します。
オブジェクト指向プログラミングの問題解決
問題が特定され、考えられる解決策が提案されたら、それをプログラムを使用してコンピューターで実行できるようにプログラミング言語に書き写す必要があります。 オブジェクト指向プログラミング手法では、次の段階が定義されます。
- プログラムの定義: 問題をわかりやすく、明確に定義した方法で概略的に説明します。 これには、処理されるデータの出所と側面の特定、ならびに結果の説明とその表示方法が含まれます。
- オブジェクト指向の分析と設計: 問題領域内のオブジェクトの特定と説明を指します。 その後、特定のプログラミング言語で実装されるクラスを定義するために、従うべき属性、関係、およびメソッドが確立されます。
- プログラミング: 基本的には、問題を適切に解決するために、製品の品質を保証できる開発スタイルを使用して、プログラミング言語でコードを正しく記述することを含む、プログラムの転写を指します。 この段階には、アルゴリズムの構築、フローチャートの作成、最終的なプログラミング、デスクトップ テスト、コーディング、コンパイル、プログラムの実行が含まれます。
- ドキュメント: 問題を解決するために必要な一連の手順の説明が含まれています。 これは、混乱を招く可能性のあるコード行、特に識別子と宣言されたデータ構造、制御構造とメソッドとそのパラメータを参照するコード行の意味を明確にしたり説明したりするコメント行の組み込みを意味します。 この段階は、最終製品の成功には不可欠です。文書化に失敗すると、プログラムを読んだりデバッグしたりすることが難しくなり、さらにプログラムを変更したり保守したりすることがほとんど不可能になるためです。
別の順序で考えると、主に新しく多様な応用分野の出現により、プログラミング言語の機能が長年にわたって増加していると言えます。 確かに、最初はこれらの言語は基本的に大量のデータを処理し、特定の数値計算を実行するために使用されていました。
現在、プログラミング言語は、データベース管理、画像生成、さらには人工知能など、社会のほぼすべての分野で使用されています。
主に、新しいソフトウェア エンジニアリング テクノロジの誕生により、以下で説明するプログラミング言語が台頭しました。
オブジェクト指向プログラミング言語
これらは、データとサブプログラムをクラスに統合するために設計された言語です。 これらは他の変換されたコードからプロパティを継承し、新しい機能を生み出し、新しいプログラミング方法論にもつながります。
分類
後で説明するように、オブジェクト指向パラダイムに対応するプログラミング言語は複数あります。 実装方法に応じて、次のように分類されます。
- 動作を実装するとき: クラスとプロトタイプまたはサンプルに基づく言語をカバーします。
- オブジェクト作成の実装方法に応じて、ヒープ領域での実行時間またはスタックでのコンパイル時間に基づきます。
- タイプの検証による: コンパイル時の検証または実行時の検証を指します。
主なオブジェクト指向言語には次のものがあります。
スモールトーク
オブジェクト指向プログラミング パラダイムの下でのみプログラムできます。 これはクラスベースの言語であり、実行時に動的メモリ領域内のオブジェクトを設計します。 これは実行時にのみ型チェックを行います。つまり、動的チェック言語です。
Java
これは現在最も広く使用されている言語の XNUMX つであり、C や C++ に似た構文を備えた完全なオブジェクト指向です。 プラットフォームに依存しません。
Smalltalk と同様に、これはクラスベースの言語であり、実行時に動的メモリ領域にオブジェクトを作成しますが、型チェックは実行時ではなくコンパイル時に行います。違いは、プリコンパイルから中間の実行不可能なコードを作成することです。 これにより、静的チェック言語になります。
オブジェクト指向Javaプログラミングは、この種の言語に特化した仮想マシン上で動作します。この仮想マシンはコンピュータのように機能するため、コードを修正することなく実行できます。このようなマシンはインタプリタと呼ばれます。
JavaScriptを
Smalltalk や Java とは異なり、プロトタイピングやサンプルに基づいた言語です。 これは解釈され、型なしです。つまり、実行時またはコンパイル時に型チェックを実行しません。 実行時に動的メモリ領域にオブジェクトを作成します。 コンパイルがないため、動的にチェックされる言語になります。
これは、移植性と統合性、および標準的でシンプルなプログラミング技術のおかげで、強力な言語です。 言い換えれば、JavaScript は Web ページに埋め込まれるコードであり、その目的は、Web ページのダイナミズムを向上させることです。
C + +
これは、この言語の利点を吸収し、オブジェクトのサポートを組み込むことによって、従来の C 言語を強化したものです。 この本では、構造化プログラミング、汎用プログラミング、オブジェクト指向プログラミングといった XNUMX つの異なるプログラミング パラダイムを取り上げていますが、構造化プログラミングからオブジェクト指向パラダイムへの移行を主導したのは彼でした。
これは多用途の言語であり、Windows と GNU Linux の両方でアプリケーション プログラマの間で非常に頻繁に使用されています。 実行時に動的メモリにオブジェクトを作成します。 基本的にはパフォーマンス、移植性、抽象化に重点を置いています。 その主な欠点は、コンパイル時に、コンパイルが行われたプラットフォームでのみ有効なコードを持つ実行可能ファイルが生成されることです。 一方、実行可能言語であるため、プラットフォームに依存しません。
C#
これは実行時に実行されるプログラミング言語であり、.NET プラットフォームに組み込まれているため、ライブラリの共有と認識が可能になります。 完全にオブジェクト指向であり、あらゆる種類のアプリケーションを作成できます。
これは C 言語と C++ 言語の進化であり、後者はプリコンパイルが受け入れられることで使いやすくなり、操作中のエラーの範囲が減るため、後者の複雑さが解消されます。
Python
これはクロスプラットフォーム言語であり、主にオブジェクト指向ですが、命令型プログラミング、関数型プログラミング、アスペクト指向プログラミングなどの他のパラダイムも包含します。
自然言語に非常に近いクリーンな構文により、コードの読み取りが容易になります。 プログラミングの世界から始めることを強くお勧めします。
中間プログラム、つまりインタプリタを介して実行されます。 これは半通訳型言語であるため、柔軟性があり、移植可能です。 これは動的に型付けされます。つまり、データ型は実行時に決定されます。
パスカル
現在、プログラミングの教育において非常に優れた言語として使用されています。 シンプルな構文と高度に構造化された言語を備えているため、プログラムを読みやすく解釈することが簡単です。 そのコンパイルは、Pascal コンパイラーを備えた任意のマシンで実行できます。
構造化言語であるにもかかわらず、Turbo Pascal バージョンを通じてオブジェクト指向プログラミングが可能です。 統合環境があり、そこからプログラムを作成してテストすることができます。 つまり、Pascal は汎用言語です。
興味のあるトピックがプログラミングに関連している場合は、「プログラミングにおけるアルゴリズムとは何ですか?」をお読みになることをお勧めします。





