オブジェクト指向:ITの設計思想

ITを学びたい
先生、「オブジェクト指向」ってよく聞くんですけど、一体どんなものなんですか?

IT専門家
そうだね、難しそうに聞こえるかもしれないけど、簡単に言うと「もの」中心でプログラムを作る考え方だよ。例えば、ゲームだと「車」っていう「もの」を考えると、車には「速さ」「色」「形」といった特徴と、「走る」「止まる」「曲がる」といった動作があるよね。オブジェクト指向では、こういった「もの」の情報をまとめてプログラムを作るんだ。

ITを学びたい
なるほど。「もの」の情報と動作をまとめて考えるんですね。でも、そうすると何が便利なんですか?

IT専門家
プログラムを部品のように組み合わせたり、再利用しやすくなるから、開発効率が上がるんだよ。それに、変更にも強くなるんだ。例えば、車の「色」を変えたい場合でも、「車」という「もの」の情報だけを書き換えれば良いので、他の部分に影響を与えにくいんだ。
OOとは。
「情報技術」に関する言葉である「オブジェクト指向」(物の見方、考え方という意味。英語の object-oriented の頭文字からきています。)について説明します。
全体像

ものごとの全体を把握することは、複雑な仕組みを理解する第一歩です。特に、現代の多くの情報処理の仕組み作りでは「もの」を中心にした考え方、すなわち、もの指向という設計の考え方が重要です。もの指向とは、複雑な仕組みを、それぞれが独立した働きを持つ「もの」という部品に分解して考える方法です。ちょうど、時計を分解すると、歯車やぜんまい、針といった部品に分かれるように、情報処理の仕組みも、様々な部品、つまり「もの」から成り立っていると考えるのです。
それぞれの「もの」は、情報と、その情報を操作する手順を内包しています。例えば、時計の針という「もの」は、現在の時刻という情報と、時刻に合わせて動くという手順を持っています。そして、「もの」同士は互いに連携することで、複雑な処理を実現します。時計で言えば、歯車が回転することでぜんまいがほどけ、その力が針を動かすといった具合です。もの指向の利点は、変更に強いことです。もし、時計の針のデザインを変えたい場合でも、針という「もの」だけを交換すれば済みます。他の部品に影響を与えることなく、変更できるのです。
従来の情報処理の仕組み作りでは、手順を中心に考えていました。これは、料理のレシピのように、手順を一つずつ記述していく方法です。しかし、この方法では、手順が複雑になると全体を把握しにくくなり、変更にも弱くなります。もの指向では、「もの」に情報と手順をまとめることで、仕組み全体を整理し、変更にも柔軟に対応できるようになります。また、作った「もの」は他の仕組み作りでも再利用できます。一度作った時計の針を、別の時計にも使えるようにです。このように、もの指向は、複雑な情報処理の仕組みを、理解しやすく、作りやすく、変更しやすいものにするための、現代の情報処理の仕組み作りには欠かせない考え方なのです。
| 項目 | 説明 |
|---|---|
| もの指向とは | 複雑な仕組みを、独立した働きを持つ「もの」という部品に分解して考える方法。それぞれの「もの」は情報と操作手順を内包し、連携して複雑な処理を実現。 |
| もの指向の例 | 時計を歯車、ぜんまい、針などの部品に分解して考える。針は時刻情報と時刻に合わせ動く手順を持つ。 |
| もの指向の利点 | 変更に強い。例えば、時計の針のデザイン変更は針の交換のみで完了。他の部品への影響なし。 |
| 従来の情報処理の仕組み作り | 手順中心の考え方。料理のレシピのように手順を記述。複雑になると全体把握が困難で変更に弱い。 |
| もの指向の効果 | 情報と手順を「もの」にまとめて整理。変更に柔軟に対応。作った「もの」の再利用が可能。 |
| もの指向の重要性 | 複雑な情報処理の仕組みを理解しやすく、作りやすく、変更しやすくする、現代の情報処理の仕組み作りに欠かせない考え方。 |
構成要素

「もの」指向での『もの』は、物体と呼びます。この物体は、具体的な情報と、その情報を扱うための手順を一つにまとめたものです。たとえば、自動車を物体として考えると、車種や色、速度といった情報と、速度を上げる、速度を下げる、といった手順が考えられます。
物体の持つ情報は、属性と呼ばれます。自動車の例では、車種、色、速度などが属性にあたります。属性は物体の状態を表すもので、それぞれの物体が固有の値を持ちます。例えば、赤い車と青い車は「色」という同じ属性を持ちますが、その値はそれぞれ「赤」と「青」で異なります。
物体が持つ手順は、操作と呼ばれます。自動車の例では、速度を上げる、速度を下げるなどが操作にあたります。操作は物体に対して何らかの動作をさせるもので、属性の値を変更したり、他の物体に影響を与えたりする役割を果たします。例えば、「速度を上げる」という操作を実行すると、「速度」という属性の値が増加します。
これらの情報と手順は、物体の中に閉じ込められ、外からは直接触れられないように守られます。これをカプセル化といいます。カプセル化によって、物体の内部構造を隠蔽し、外部からの不正なアクセスや変更を防ぐことができます。また、物体の内部構造を変更しても、他の物体に影響を与えないようにすることができます。
物体同士は連絡を取り合うことで互いに作用し合います。たとえば、ある物体が別の物体に連絡を送ることで、その物体の持つ手順を実行させることができます。この連絡のことを、メッセージといいます。メッセージは、物体の操作を実行するための指示であり、実行する操作の名前と、必要な情報を含んでいます。
このように、「もの」指向は、互いに作用し合う物体の集まりとして仕組みを組み立てる方法です。カプセル化とメッセージの仕組みによって、柔軟で変更に強い仕組みを作ることができます。
| 用語 | 説明 | 例(自動車) |
|---|---|---|
| 物体 | 具体的な情報と、その情報を扱うための手順を一つにまとめたもの | 自動車 |
| 属性 | 物体の持つ情報、物体の状態を表す | 車種、色、速度 |
| 操作 | 物体が持つ手順、属性の値を変更したり、他の物体に影響を与えたりする | 速度を上げる、速度を下げる |
| カプセル化 | 情報と手順を物体の中に閉じ込め、外からは直接触れられないようにする仕組み | 内部構造を隠蔽し、外部からの不正なアクセスや変更を防ぐ |
| メッセージ | 物体同士が連絡を取り合うための仕組み、操作を実行するための指示 | ある物体から別の物体に「速度を上げる」というメッセージを送る |
重要な考え方

物事を考える上で、『包み隠す』『受け継ぐ』『色々な姿』という三つの大切な考え方を説明します。これらの考え方は、複雑な事柄を整理し、理解しやすくするのに役立ちます。
まず、『包み隠す』とは、情報の大切な部分を覆い隠し、外から直接触れられないようにする事です。例えば、家にある大切な宝物を金庫にしまう事を想像してみてください。金庫の中身は外からは見えず、鍵を持っている人しか開けられません。このように情報を隠すことで、外からのいたずらや誤操作を防ぎ、安全性を高めることができます。また、中身がどうなっているか知らなくても、金庫を開ける手順さえ知っていれば誰でも宝物を出し入れできます。このように、内部の仕組みを知らなくても使えるようにすることで、物事を使いやすくする効果もあります。
次に、『受け継ぐ』とは、元となるものから特徴を受け取り、新しいものを作り出す事です。例えば、親から子へ受け継がれる遺伝子のようなものです。子の容姿や性格は親とよく似ていますが、全く同じではありません。親の特徴を受け継ぎつつ、子自身も新しい特徴を持っています。この考え方を使うと、すでにあるものを一から作るのではなく、良い部分を活かしながら新しいものを効率的に作り出すことができます。例えば、乗り物を作る際に、車という乗り物の基本的な構造を受け継ぎ、荷物を運ぶことに特化したトラックや、多くの人を運ぶバスを作るといった具合です。
最後に、『色々な姿』とは、同じ命令に対して、対象によって異なる動作をする事です。例えば、『動く』という命令を、車と飛行機に与えたとします。車はタイヤを回し、飛行機はプロペラを回します。どちらも『動く』という命令に対して反応していますが、その方法はそれぞれ異なります。このように、状況に応じて適切な動作をすることで、様々な場面に対応できる柔軟な仕組みを作ることができます。これにより、一つの命令で様々なものを制御することが可能になり、複雑なシステムをより簡単に管理できるようになります。
| 考え方 | 説明 | 例 | メリット |
|---|---|---|---|
| 包み隠す | 情報の大切な部分を覆い隠し、外から直接触れられないようにする。内部の仕組みを知らなくても使えるようにする。 | 金庫に宝物をしまう | 安全性の向上、使いやすさの向上 |
| 受け継ぐ | 元となるものから特徴を受け取り、新しいものを作り出す。良い部分を活かしながら新しいものを効率的に作り出す。 | 親から子への遺伝、車からトラックやバスへの発展 | 効率的な開発 |
| 色々な姿 | 同じ命令に対して、対象によって異なる動作をする。状況に応じて適切な動作をする。 | 「動く」という命令に対する車と飛行機の反応の違い | 柔軟性、簡素化された管理 |
利点

物を対象とする考え方を取り入れることには、数多くの良い点があります。まず、仕組みの変更や機能追加が楽になります。それぞれの対象を包み込むことで、対象同士の結びつきが最小限に抑えられるため、一部の変更が全体に響くことが少なくなります。また、元となる仕組みを受け継ぐことで、既存の仕掛けを再び使えるため、開発にかかる時間や費用を減らすことにつながります。
さらに、物を対象とする考え方は、仕組みの構造を分かりやすくし、維持管理をしやすくします。対象という単位で仕組みを捉えることで、複雑な仕組みでも整理され、問題が起きた時の原因究明や修正が楽になります。これは、まるで、複雑な機械を小さな部品に分けて理解するようなものです。それぞれの部品の役割が分かれば、全体の動きも理解しやすくなります。
加えて、開発を分担して進めることが容易になります。それぞれの対象は独立した部品のように扱えるため、複数の開発者が同時に作業を進めることができます。これは、大人数で家を作るようなものです。大工さん、左官屋さん、電気屋さんなど、それぞれの専門家が同時に作業を進めることで、家を早く完成させることができます。
これらの良い点は、規模が大きく複雑な仕組みの開発で特に大切になります。小さな仕組みでは、これらの良い点はあまり目立ちませんが、仕組みが大きくなり複雑になるにつれて、その効果は増していきます。これは、小さな家を作る時と、大きなビルを作る時の違いのようなものです。小さな家では、一人で作ることも可能ですが、大きなビルを作る時は、多くの人々が協力して作業を進める必要があります。物を対象とする考え方は、このような大規模な開発を可能にするための、重要な手法と言えるでしょう。
| メリット | 説明 | 例え |
|---|---|---|
| 変更・機能追加が容易 | 対象同士の結びつきが最小限に抑えられ、一部の変更が全体に影響しにくい | – |
| 開発時間・費用の削減 | 既存の仕組みを再利用できる | – |
| 分かりやすい構造、容易な維持管理 | 対象という単位で捉えることで複雑な仕組みを整理し、問題発生時の原因究明や修正が容易になる | 複雑な機械を小さな部品に分けて理解する |
| 分担作業の容易さ | それぞれの対象は独立した部品のように扱えるため、複数の開発者が同時作業可能 | 大人数で家を作る(様々な専門家が同時作業) |
| 大規模開発への適合性 | 規模が大きく複雑な仕組みの開発で特に効果を発揮 | 小さな家と大きなビルの建設 |
応用例

いろいろな仕組みを作る時に、ものを組み合わせて作るようにプログラムを作る方法を、もの指向と言います。この方法は、今では広く使われています。
例えば、会社で使う事務の仕組みや、誰でも使えるような書き込みのできる場所を作る時にも、このもの指向が使われています。遊びの仕組みを作る時にも使われていて、幅広い場面で役に立っていることが分かります。
もの指向でプログラムを作るための言葉はたくさんあります。よく聞く「ジャバ」や「シーぷらぷら」、「パイソン」なども、このもの指向に対応しています。これらの言葉を使えば、もの指向で考えた仕組みを実際に作ることが出来ます。
最近では、もの指向に合わせた情報の入れ物や、もの指向で考えるための道具も進化してきています。例えば、情報を整理して入れておく箱のようなものを「データベース」と言いますが、もの指向に合わせた「もの指向データベース」というものも出てきています。設計図を描くための道具も、もの指向に合わせた「もの指向設計ツール」というものがあります。このように、もの指向に合わせた周りの技術も進歩しているので、もの指向はこれからもっと大事な役割を果たしていくでしょう。
もの指向を使うと、色々な場面で応用できる上に、早く効率的に作ることが出来ます。そのため、今では、もの指向はプログラム作りの主流となっています。もの指向はこれからも色々な所で活躍していくと考えられます。
| メリット | 具体例 | 関連技術 |
|---|---|---|
| 様々な場面で応用できる | 事務システム、Webサービス、ゲームなど | Java, C++, Python |
| 早く効率的に作れる | オブジェクト指向データベース、オブジェクト指向設計ツール |
将来展望

これからの情報処理の世界では、「もの」中心の考え方がますます重要になっていくと考えられます。この考え方は、人工知能や機械学習といった新しい技術ともうまく組み合わさり、より高度な仕組み作りを可能にするでしょう。
例えば、もの中心の考え方と機械学習を組み合わせると、自ら学ぶ力を持つ部品を作ることができます。このような部品は、周りの状況の変化に合わせて、人の手を借りずに動くことが期待されます。
家具を想像してみてください。この家具は、もの中心の考え方で作られた部品からできています。それぞれの部品は、周りの環境に合わせて、自分の役割を果たします。例えば、部屋の温度が上がると、自動的に窓を開ける部品や、扇風機を回す部品があります。これらの部品は、互いに連携しながら、快適な環境を作り出します。また、住む人の行動を学習し、より良いサービスを提供することも可能です。例えば、朝起きる時間に合わせて、カーテンを開けたり、コーヒーメーカーを起動させたりすることができます。
さらに、もの中心の設計を自動化したり、効率化したりする研究も進んでいます。これにより、開発者の負担を軽くし、生産性を上げることに繋がります。もの中心の考え方は、常に進化を続け、未来のソフトウェア開発を支える重要な技術として発展していくでしょう。まるで、生き物のように変化に適応し、成長していくソフトウェアが、私たちの生活をより豊かにしてくれるはずです。
| 概念 | 説明 | 例 |
|---|---|---|
| もの中心の考え方 | 人工知能や機械学習と組み合わせることで、高度な仕組み作りが可能になる考え方。 | 自ら学ぶ力を持つ部品 |
| 自ら学ぶ力を持つ部品 | 周りの状況の変化に合わせて、人の手を借りずに動く部品。 | 部屋の温度が上がると窓を開ける部品、扇風機を回す部品、住人の行動を学習してサービスを提供する部品 |
| もの中心の設計の自動化・効率化 | 開発者の負担を軽減し、生産性を向上させる。 | – |
| もの中心の考え方の将来性 | 未来のソフトウェア開発を支える重要な技術となる。 | 変化に適応し、成長していくソフトウェア |
