data abstraction c
C ++での抽象化について知っておくべきことすべて。
このC ++シリーズのチュートリアルでは、OOPの4つの柱として知られているC ++でのオブジェクト指向プログラミングのすべての主要な概念を学習します。
- 抽象化
- カプセル化
- 継承
- ポリモーフィズム
このチュートリアルでは、C ++でのデータ抽象化についてすべて説明します。
挿入ソートC ++コード
=> 絶対C ++トレーニングシリーズについては、ここをクリックしてください。
学習内容:
抽象化とは何ですか?
抽象化は、オブジェクト指向プログラミングの手法であり、実装の詳細をユーザーから隠し、必要なインターフェイスのみを公開します。
エアコン(AC)の実際の例を取り上げることができます。スタート、ストップ、温度の上げ下げ、湿度のコントロールなど、さまざまなAC機能を制御するためのリモコンがあります。これらの機能はボタンの時計だけで制御できますが、内部には複雑なロジックがあります。これらの機能を実行するために実装されています。
ただし、エンドユーザーとして公開したのは、リモートインターフェイスのみであり、これらすべての機能の実装の詳細ではありません。
抽象化は、オブジェクト指向プログラミングの4つの柱の1つであり、ほとんどすべてのOOPソリューションは、抽象化の原則、つまり、プログラム内のインターフェイスと実装の詳細の分離に基づいています。
上の図では、オブジェクトとその内容を図で示しています。このオブジェクトの最内層は、そのコア機能とそれに続く実装の詳細であることがわかります。
OOPでは、これらの2つのレイヤー(ほとんどの場合、これは1つのレイヤーにすぎません)は外界に公開されません。最外層であるインターフェースは、オブジェクトの機能にアクセスするためにエンドユーザーに提供される層です。
その結果、オブジェクトの最内層に加えられた変更は、ユーザーが公開されているインターフェイスが同じである限り、エンドユーザーにはわかりません。
C ++での抽象化の実装
C ++は、非常に深い抽象化をサポートしています。 C ++では、使用するライブラリ関数でさえ、抽象化の例と見なすことができます。
C ++での抽象化の実装は次のように表すことができます。
上の図に示すように、C ++で抽象化を実装するには次の2つの方法があります。
#1)クラスとアクセス指定子の使用
アクセス指定子public、private、protectedを使用してC ++で実装されたクラスは、抽象化の実装と見なすことができます。
すでに知っているように、アクセス指定子を使用すると、クラスメンバーに与えられるアクセスを制御できます。一部のメンバーを非公開にして、クラス外でアクセスできないようにすることができます。一部のメンバーを保護して、派生クラスのみがアクセスできるようにすることができます。最後に、一部のメンバーを公開して、これらのメンバーがクラス外でアクセスできるようにすることができます。
この概念を使用すると、プライベートアクセス指定子を使用して実装の詳細を外部から隠し、パブリック指定子を使用してインターフェイスを外部に公開できるように、抽象化を実装できます。
したがって、クラスを使用してデータと関数を1つのユニットにバンドルし、アクセス指定子を使用してこれらのデータと関数へのアクセスを制御することで、C ++で抽象化を実装できます。
これを示すために、次の例を実装しましょう。
#include #include using namespace std; class sample { int num1,num2; void readNum(){ cout<>num1; cout<>num2; } public: void displaySum() { readNum(); cout<<'
Sum of the two numbers = '< 出力:
num1を入力してください:10
num2を入力してください:20
2つの数値の合計= 30
上記のプログラムには、num1とnum2の2つの整数変数を持つサンプルクラスがあります。また、readNumとdisplaySumの2つの関数もあります。データメンバーのnum1とnum2、および関数readNumは、クラス専用です。
関数displaySumはクラスに公開されています。 main関数では、クラスsampleのオブジェクトを作成し、2つの数値を読み取り、それらの合計を出力するdisplaySumを呼び出します。
これは抽象化の実装です。他のデータメンバーと関数をラップしたまま、1つの関数のみを公開します。これは抽象化を示すための単なる例ですが、実際の問題を実装する一方で、C ++ではさまざまなレベルの抽象化を行うことができます。
#2)ヘッダーファイルの実装を使用する
C ++プログラムのヘッダーファイルを使用して、事前定義された関数をインポートして使用します。このために、#includeディレクティブを使用して、プログラムにヘッダーファイルをインクルードします。
例えば、 上記のプログラムでは、関数cinとcoutを使用しました。これらの関数に関する限り、私たちはそれらの使用方法とそれらが取るパラメーターは何かしか知りません。
これらの関数が呼び出されたときにバックグラウンドで何が行われるのか、またはiostreamヘッダーファイルにどのように実装されるのかはわかりません。これは、C ++によって提供される別の抽象化方法です。
ヘッダーファイルからインポートするすべての関数の実装の詳細はわかりません。
これは、抽象化を示す別の例です。
#include #include using namespace std; class employee{ int empId; string name; double salary,basic,allowances; double calculateSalary(int empId){ salary = basic+allowances; return salary; } public: employee(int empId, string name,double basic,double allowances): empId(empId),name(name),basic(basic),allowances(allowances){ calculateSalary(empId); } void display(){ cout<<'EmpId = '< 出力:
EmpId = 1名前= Ved
従業員の給与= 18245.4

この例では、empId、name、basicやallowancesなどの給与の詳細などの個人情報を持つクラスemployeeを定義しました。また、基本給と手当を使用して給与を計算するプライベート関数「calculateSalary」を定義します。
特定の従業員オブジェクトのすべてのデータを初期化するコンストラクターがあります。また、コンストラクターから関数「calculateSalary」を呼び出して、現在の従業員の給与を計算します。
次に、empId、name、salaryを表示する「display」関数があります。 main関数では、クラスemployeeのオブジェクトを作成し、display関数を呼び出します。
このプログラムで提供した抽象化のレベルをはっきりと見ることができます。すべての従業員の詳細とcalculateSalary関数を非公開にすることで、ユーザーから非表示にしました。
従業員オブジェクトに関するすべての情報をユーザーに提供すると同時に、個人データや従業員の給与の計算方法などの詳細を非表示にする関数表示を1つだけユーザーに公開しました。
これにより、将来、詳細を追加したり、給与の計算方法を変更したりする場合に、表示機能を変更する必要がなくなります。ユーザーはこれらの変更に気付かないでしょう。
抽象化の利点
以下に、抽象化の利点のいくつかを示します。
- プログラマーは低レベルのコードを書く必要はありません。
- 抽象化は、内部実装を悪意のある使用やエラーから保護します。
- 抽象化はコードの重複を防ぐことができるため、プログラマーは同じタスクを何度も実行する必要があります。
- 抽象化はコードの再利用を促進し、クラスデータメンバーを適切に分類します。
- プログラマーは、エンドユーザーの知識がなくてもクラス実装の内部の詳細を変更できるため、外層の操作に影響を与えることはありません。
結論
抽象化はOOPの最も重要な概念の1つであり、C ++では非常に深く実装されています。抽象化を使用すると、プログラムの実装の詳細を覆い隠し、必要な詳細のみを外部に公開できます。
抽象化の概念を使用することで、プログラミングソリューションのスケルトンとして機能する抽象データ型とクラスを設計し、その上にソリューション全体を構築できます。 OOPトピックを進めていくと、これらのタイプとクラスについて詳しく知ることができます。
今後のチュートリアルでは、OOPのもう1つの柱であるカプセル化について学習します。また、そこで抽象化とカプセル化を一緒に検討します。
=> ここでC ++トレーニングシリーズ全体を探してください。
推奨読書