- - PR -
クラスと継承とオブジェクトについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-01 21:03
カプセル化とは、
オブジェクト内に含まれているデータを外部から隠蔽し、 公開されている関数やメソッドからのみアクセスできるようにする ことによりオブジェクトの独立性が高まる って感じでいいんでしょうかね? ちょっと違うかな…。 | ||||
|
投稿日時: 2005-05-02 12:12
いや、それで大体合っていると思います。ただ気をつけてほしいのは、フィールドをprivateに してsetterとgetterを作ればそれがカプセル化である、と考えてしまいがちなことです。 カプセル化の大きな目的は、機能とデータの一体化、言い換えればデータのあるところに機能を 配置することにあるので、いくらフィールドを外部に公開しなくても機能とデータを分離して しまったら無意味です。 必要かどうかも考えずにとにかくsetterとgetterを用意するクラスがいかに多いことか… | ||||
|
投稿日時: 2005-05-04 03:04
どもでふ。がるです。
おおむねそんな感じか、と。 以下、実際にあった「カプセル化万歳:やっててよかったコンビニエンス」 な例です とある教室のスケジュールを出力するプログラムです。 用意していただいたデータには、 開始時間 , 所要時間 , 教室名 ・・・・・ とデータが続いていました。 しかし、表示には hh:mm 〜 hh:mm (所要 mm分) と出さなければならないというご依頼がありまして。 ストレートにメソッド get_start_time() get_end_time() get_require_time() を作成しました。このうち、get_end_time()のメソッドは厳密な意味では ゲッターではなく、なかで計算をしているプログラムでした。 後日。 「いやぁ。データのフォーマットが変わっちゃってさ。てへ」という 軽い内容のMailとともに頂いた新規フォーマットは 開始時間 , 終了時間 , 教室名 ・・・・・ でした。 このプログラムのサイトは「すでにバリバリにオープン中」でしたが。 こーゆー時。 クラスでカプセル化していたおかげで、クラス内のみ変更をかけ、 クラスの単体テストをしただけで(一応結合もやりますが)、 楽々変更ができました。 # お客様に「苦労したんです;;」とかいうのはまた別のお話 データを隔離して、オブジェクトの独立性を高くした結果うまれた 「変更に対する耐久性」の一部です。 |