![]() ![]() ![]() ![]() |
オブジェクト指向のプログラミング概念(入門書) |
名前が暗示するように、オブジェクトはオブジェクト指向技術を理解する上で重要な概念である。 犬、机、テレビ、自転車など、周囲には現実世界のオブジェクトの多くの例 を見ることができる。このような現実世界のオブジェクトは、すべて状態と振る舞いを持つという2つの特徴を持っている。 例えば、犬には状態(名前、毛色、種類、空腹)があり、振る舞い(吠える、取ってく る、新しくてきれいなズボンによだれを垂らす)がある。 自転車には、状態(現在のギア、現在 のペダルをこぐ速度、2つの車輪、ギアの数)と振る舞い(ブレーキをかける、加速する、減速する、ギアを換える)がある。
ソフトウェアオブジェクトは、現実世界のオブジェクトをモデル化しており、状態と振る舞いを持っている。ソフトウェアオブジェクトは、変数で状態を保ち、メソッドで振る舞いを実装する。
定義: オブジェクトは、変数と関連するメソッドをまとめたソフトウェアである。
ソフトウエアオブジェクトを使用してプログラムを書くと現実世界のオブジェクトを表すことができる。 動画プログラムで現実世界の犬をソフトウエアオブジェクトとして表現したり、あるいは現実世界の自転車を電気運動用自転車の中でソフトウエアオブジェクトとして表現したいかもしれない。さらに、ソフトウェアオブジェクトを使用して、抽象的な概念を「オブジェクト化」することもできる。 例えば、「イベント」は GUI ウインドウシステムで 、ユーザがマウスボタンを押すとか、キー入力した時にイベントを表現するために使用される共通のオブジェクトである。次の図はソフトウェアオブジェクトの一般的なものを視覚的にしたものである。
ソフトウェアオブジェクトが知っている(状態)と行えること(振る舞い)のすべてが、そのオブジェクト内の変数とメソッドで表現される。 現実世界の自転車をモデル化したソフトウェアオブジェクトは、スピードが時速10マイル、ペダルをこぐ速度が毎分90 回、ギアが5速のように、あなたの自転車の現在の状態を示す変数を持つ。 これらの変数とメソッドは、公式にはインスタンス変数とインスタンスメソッドとして知られ、クラス変数およびクラスメソッド(後述)とは区別される。
ソフトウェアの自転車には、ブレーキをかけたり、ペダルをこぐ速度を変更したり、ギアを変更したりするメソッドもある。 (自転車のスピードはどのギアを使っているか、乗り手がどのくらいペダルをこいでいる か、道がどのくらい険しいかなどの条件で変化するので、自転車のスピードを変更するメソッドは持たない。)
オブジェクトが知らないことやできないことは、オブジェクトから除外される。 例えば、あなたの自転車は(恐らく)名前がないだろうし、走ったり、吠えたり、取ってくることができないだろう 。 したがって、このような状態や振る舞いのための変数あるいはメソッドはない。
図から分かるように、オブジェクトの変数はオブジェクトの中心すなわち核を構成し、それをメソッドが取り巻いてプログラム中の他のオブジェクトからオブジェクトの核を隠している。 メソッ ドの保護管理の中にオブジェクトの変数をパッケージすることを、カプセル化と呼ぶ。 一般に、他の オブジェクトから重要でない実装詳細を隠すためにカプセル化が使用される。自転車のギアを変更したいとき、ギアのメカニズムなどは知る必要もなく、レバーの動かし方を知っていればよい。 したがって、実装はプログラムの他の部分を変更せずにいつでも変更することができる。
カプセル化の利益
関連する変数とメソッドを適切なソフトウェアにまとめるカプセル化は、簡単であるが、ソフトウェア開発者に2つの主要な利益をもたらす強力なアイデアである。
- モジュール性 −− オブジェクトのソースコードは、他のオブジェクトのソースコードから 独立して書いたり、維持することができる。 また、オブジェクトはシステム内簡単に渡す ことができる。 ほかの誰かにあなたの自転車を与えても、うまく動くだろう。
- 情報隠蔽 −− オブジェクト は、他のオブジェクトとの通信に使用することができるパブリック インタフェースを持っている。 しかし、オブジェクトは、依存する他のオブジェクトに影響を 与えずに、いつでも変更可能な内部情報やメソッドを維持することができる。 自転車に 乗るために、ギアのメカニズムを理解する必要はない。
![]() ![]() ![]() ![]() |
目次 |