SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Cでわかるオブジェクト指向

【第2回】カプセル化


  • X ポスト
  • このエントリーをはてなブックマークに追加

 前回に引き続き、C言語によるOOPを通して、オブジェクト指向の基本的な概念について解説していきたいと思います。

  • X ポスト
  • このエントリーをはてなブックマークに追加

前回のプログラムの問題点

 さっそくですが、前回の最後に示したObjectClassの定義のコードをご覧ください。

< リスト1 > 前回のC言語によるクラスの定義のサンプル(ObjectClass.h)
#ifndef _OBJECTCLASS_H_INCLUDE_
#define _OBJECTCLASS_H_INCLUDE_

/* クラスの定義 */
typedef struct _object Instance;
struct _object{
  char* name;
  int status;
  int (*message)(Instance* self);
};

/* オブジェクト生成メソッド */
Instance* Object_new(char* name, int status);
/* オブジェクト破棄メソッド */
void Object_delete(Instance* obj);

#endif

 一見きれいで何の問題もないクラスの定義に見えますが、実はこのコードには、重大な問題があることに気づくでしょうか。

 その問題とは、オブジェクトを利用する側のプログラムで以下のようなコードを書くことで確認できます。

obj1->status = 100; /* メッセージを送信しなくてもオブジェクトの状態を変更してしまえる! */

 前回の復習になりますが、OOPにおけるオブジェクトとは次のようなものでした。

  1. すべての情報はオブジェクトによって表現される
  2. オブジェクトは「自身に関する独自の情報(属性)」と「機能(振る舞い)」から構成され、それらをオブジェクト自身で管理する
  3. オブジェクト間の相互作用はメッセージによって実現する

 前述のとおり、前回お見せしたサンプルでは、メッセージを送信しなくても直接属性を変更できてしまえるため、上記の2および3を十分に満たしているとは言えません。また、一見処理とデータの組み合わせがきちんと表現できているように見えても、データへのアクセスが全然限定的になっていません。そのため、「安全にプログラムを取り扱う」というOOPの旨味も十分実現できているとは言えず、これでは十分なオブジェクト化が実現できているとは言えないのです。

 では、十分なオブジェクト化を実現するためには、どのようにすれば良いのでしょうか。ここで登場するのが、「カプセル化(encapsulation)」という概念です。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
オブジェクト指向の基本 - カプセル化

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Cでわかるオブジェクト指向連載記事一覧

もっと読む

この記事の著者

島田 浩二(Ruby札幌)(シマダ コウジ)

1978年生まれ。電気通信大学電気通信学部情報工学科卒業後、メーカ系ソフトウェア会社にて携帯電話の開発業務に従事した後、2006年より札幌にてフリーのプログラマとして活動。2009年7月に株式会社えにしテックを設立し、同社代表取締役に就任。 日本Rubyの会理事、一般社団法人LOCAL理事、Ruby札幌主宰。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3707 2009/03/17 12:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング