データ抽象化とカプセル化の主な違いは、データ抽象化が実装の詳細を隠してユーザーに機能のみを示し、コードの複雑さを軽減するのに対し、カプセル化はデータとメソッドを1つのユニットに結合またはラップしてデータ保護のために詳細を隠すことである。
オブジェクト指向プログラミング(OOP)は、実世界のシナリオをソフトウェアにモデル化するのに役立つ。
クラスとオブジェクトを使用してプログラムを設計するためのパラダイムまたは方法論です。
クラスは、オブジェクトを作成するための設計図です。
言い換えれば、オブジェクトを作成するための構造体です。
クラスは、属性とメソッドから構成されます。
属性はプロパティやデータを記述し、メソッドは操作や振る舞いを記述する。
クラスがなければオブジェクトを作ることはできない。
したがって、オブジェクトはクラスのインスタンスです。
データの抽象化とカプセル化は、OOPの2つの概念です。
データ抽象化とは
データの抽象化とは、内部の詳細を隠して機能だけを見せることです。
言い換えれば、実装の詳細を隠して、機能だけを外部に見せることです。
実際の例としては、テレビがあります。
ユーザーは、内部の電子回路や機能を知らなくても、テレビを見ることができる。
もう一つの例は、携帯電話を使うことです。
ユーザーは、内部処理を知る必要はない。
電話をかける、メッセージを送る、インターネットを見るなど、主な機能さえ知っていればいいのです。
データの抽象化は、ソフトウェア開発における利点を提供します。
最も重要なことは、コードの複雑さを軽減できることです。
さらに、詳細を隠して本質的な機能を公開することができる。
OOPをサポートする言語は、抽象クラスとインターフェースを使って、データの抽象化を実現するのに役立ちます。
カプセル化とは
カプセル化とは、データとメソッドを1つの単位にまとめることです。
カプセル化の主な目的は、データの安全性を確保することです。
これは、医療用カプセルに似ています。
カプセルの中に薬があり、それを覆って外界から保護する。
図01:カプセル化
カプセル化を実現する方法は、「private」や「public」といったアクセス修飾を用いることである。
privateやpublicは、データやメソッドの可視性を変更するものです。
privateはそのクラス内でのみアクセス可能であり、publicはそのクラス内だけでなく他のクラスからもアクセス可能である。
OOP言語では、データのメンバーやプロパティをプライベートにして、ゲッターやセッターなどのパブリックメソッドでアクセスすることで、カプセル化を実現することができる。
同様に、カプセル化はデータとメソッドを1つの単位にコンパクト化します。
さらに、データを保護することもできます。
データ抽象化とカプセル化の違い
定義
データの抽象化とは、実装の詳細を隠して機能のみをユーザーに見せるOOPの概念です。
カプセル化とは、データとメソッドを結合またはラップして1つのユニットとするOOPの概念です。
主な使用方法
データ抽象化は実装の詳細を隠してコードの複雑さを軽減するのに対し、カプセル化はデータ保護を目的としてデータを隠します。
これが、データ抽象化とカプセル化の使い分けに関する主な違いです。
達成方法
OOP言語では、抽象クラスやインターフェースを用いて、Data Abstractionを実現する。
これに対して、OOP言語では、データメンバをプライベートにして、パブリックメソッドでアクセスすることで、Encapsulationを実現することができる。
結論
データの抽象化とカプセル化は、オブジェクト指向プログラミング(OOP)の2つの概念です。
データの抽象化とカプセル化の違いは、データの抽象化が実装の詳細を隠してコードの複雑さを軽減するのに対し、カプセル化はデータ保護のために詳細を隠すことである。