・C++初心者
・オブジェクト指向初心者
・オブジェクト指向もクラスもメリットが分からない人
・オブジェクト指向のクラスのメリット
・情報の隠蔽(private, public)
・メンバ関数の役割
クラスの単位
クラスによるモジュール分割は名詞的な単位が基準です。
オブジェクト指向では、動詞であるプロセスは名詞であるデータに内包されてクラスを形成しています。
*従来では、機能を基準にしてモジュールの切り分けが行われていました。
データ隠蔽とメンバ関数の関係
クラスを設計するときは「情報の公開/隠蔽」を意識します。
つまり、データメンバを外部から変更(アクセス)することを許さないようにします。
データメンバに対する処理は、基本的にメンバ関数を使って行います。
情報の公開/隠蔽
クラス内のデータを外部からアクセスすることに対して制限を設けます。
public:公開することを宣言
private:隠蔽することを宣言
メンバ関数が必要な理由
アクセスをメンバ関数経由で行うことで、データメンバの領域破壊が起こらなくできます。
クラスのデータメンバは外部から勝手に書き換えられない「保護する必要があるデータ」です。
つまりデータメンバに直接アクセスできては困るのです。
*「データが存在している」≠「それを外部から直接アクセスできるかどうか」
クラスにとってのメンバ関数の位置づけ
オブジェクト指向では、クラスの外部からクラスのデータメンバに直接アクセスすることを避ける傾向にあります。
その、保護されたデータメンバへアクセスするためのインターフェースの役割をメンバ関数が担っています。
こうすることで、クラス内のデータメンバを意識することはなくなり、データメンバはクラス内に完全に隠蔽されてしまい、意識することがなくなります。
メンバ関数を実際に使うときの感覚は「データメンバへのアクセス手段」→「クラスに対する命令」となります。
*内部のデータメンバを意識させるような作りの場合、設計を見直したほうがいいです。
クラスを作ることの意味
慎重にクラスを作成(オブジェクト指向)することで、領域破壊は完全に起こらなくなります。
C言語:領域破壊との闘いです。
C++言語:オブジェクト指向で領域破壊が限りなく0の状態にすることが可能です。
まとめ
オブジェクト指向のクラスのメリット | 領域破壊を限りなく0の状態にすることが可能 |
情報の隠蔽(private, public) | クラス内のデータを外部からアクセスすることに対して制限 |
メンバ関数の役割 | データメンバの領域破壊せずにアクセス |