もの中心のものづくり:オブジェクト指向の世界

デジタル化を知りたい
先生、「もの」を作って操作するっていうオブジェクト指向がよくわからないです。具体的にどういうことでしょうか?

デジタル化研究家
良い質問だね。例えば、ゲームでキャラクターを想像してみよう。キャラクターは「もの」だよね。このキャラクターを作るには、見た目、体力、攻撃力などの情報が必要だ。これがオブジェクト指向でいう「もの」を作る部分だよ。

デジタル化を知りたい
なるほど。じゃあ、操作するって言うのは、ゲームの中でキャラクターを動かすことですか?

デジタル化研究家
その通り!キャラクターを歩かせたり、攻撃させたり、ジャンプさせたり。これらは全てキャラクターという「もの」を操作していることになるんだ。つまり、オブジェクト指向では、プログラムを「もの」と「操作」で組み立てていくんだよ。
オブジェクト指向とは。
『もの指向』という、物の作り方や使い方を決めて計算機を動かす、仕組みについて説明します。もの指向は、遊びや携帯電話のアプリ、機械仕掛けの人形作りまで、広く使われています。シーぷらぷらは、シー言語にもの指向の考え方を取り入れたもので、よく遊び作りに使われています。
ものとは何か

『もの』とは、私たちの身の回りに存在し、認識できるあらゆる存在を指します。例えば、机、椅子、本、パソコンなど、形あるものだけでなく、音、光、温度、感情など、形のないものも含まれます。これらは全て、私たちが五感を通じて感じ取ったり、思考を通じて認識したりできるものです。
私たちが『もの』を認識する時、無意識のうちにいくつかの特徴を捉えています。例えば、椅子を認識する際には、『座るためにある』『木製である』『茶色である』『背もたれがある』といった特徴を捉えます。これらの特徴を組み合わせることで、私たちは『椅子』という『もの』を他の『もの』と区別し、認識することができます。
計算機を扱う場面では、この『もの』を捉える考え方が重要になります。計算機上で『もの』を扱うには、『もの』をデータとして表現する必要があります。椅子の例で言えば、『座る』という機能、『木製』、『茶色』、『背もたれ』といった特徴をデータとして表現することで、計算機上で椅子を扱うことができます。
このように、データとして表現された『もの』は、計算機上で様々な処理を行うことができます。例えば、椅子の色を変える処理や、椅子の数を数える処理などが可能です。また、複数の椅子をまとめて扱うことで、会議室の椅子の配置をシミュレーションするといった複雑な処理も可能になります。
『もの』とは何かを考えることは、私たちが世界をどのように認識し、理解しているかを考えることでもあります。そして、この考え方は、計算機を扱う上でも非常に重要な役割を果たします。計算機上で『もの』を適切に表現することで、より複雑な処理が可能になり、私たちの生活を豊かにすることができます。
| もの | 説明 | 例 | 計算機での表現 | 計算機での処理 |
|---|---|---|---|---|
| もの | 身の回りに存在し、認識できるあらゆる存在。形あるものだけでなく、形のないものも含む。 | 机、椅子、本、パソコン、音、光、温度、感情 | データ | 様々な処理 |
| ものの認識 | 無意識にいくつかの特徴を捉えることで認識する。 | 椅子:座るためにある、木製である、茶色である、背もたれがある | 特徴をデータとして表現 | 色を変える、数を数える |
| 計算機でのものの扱い | ものをデータとして表現することで、計算機上で扱うことができる。 | 椅子:機能(座る)、素材(木製)、色(茶色)、部品(背もたれ) | データの組み合わせ | 会議室の椅子の配置シミュレーション |
ものの作り方

物を作り出すには、まず設計図が必要です。家を作るにも、車を作るにも、設計図がなければ形にすることはできません。同じように、計算機上で何かを作り出す際にも、設計図が必要になります。この設計図にあたるのが「型」です。
例えば、「椅子」を作りたいとします。椅子には様々な種類があります。背もたれのある椅子、背もたれのない椅子、回転する椅子など、形も大きさも様々です。しかし、それらは全て「椅子」という共通の概念を持っています。「座る」という目的のために作られたものです。この「椅子」という共通概念を設計図として表現したものが、「椅子」の型です。
この型には、「座る」という機能や、「背もたれの有無」「素材」「色」といった特徴が定義されています。そして、この型に基づいて、具体的な椅子を作り出すことができます。背もたれのある椅子を作りたければ、「背もたれの有無」を「有り」に設定します。赤い椅子を作りたければ、「色」を「赤」に設定します。このように、型に具体的な値を設定することで、様々な種類の椅子を作り出すことができます。
これは、工場で製品を作るのに似ています。工場では、製品を作るための型枠を作ります。例えば、クッキーを作る型枠があれば、同じ形のクッキーをたくさん作ることができます。型枠は一度作ってしまえば、繰り返し使うことができます。同じように、計算機上で物を作る際にも、型を一度定義しておけば、同じ型の物をいくつでも簡単に作り出すことができます。これは、作業の手間を省き、効率を良くする上で非常に重要です。
このように、型を用いることで、共通の特徴を持つ様々な物を効率的に作り出すことができます。そして、この型を作る技術は、計算機上で様々な物を作り出し、管理する上で必要不可欠なものとなっています。
| 概念 | 説明 | 実世界の例 | メリット |
|---|---|---|---|
| 型 | 物を作るための設計図。機能や特徴を定義する。 | 椅子の設計図、クッキーの型枠 |
|
| 型の具体例(椅子) | 「座る」という機能、「背もたれの有無」「素材」「色」といった特徴が定義されている。 | 背もたれのある椅子、背もたれのない椅子、回転する椅子 | 様々な種類の椅子を作り出すことができる |
ものの動かし方

部品を組み合わせて作る考え方では、作った部品に色々な働きをさせることで、思い通りの動きを作ることができます。例えば、椅子を例に考えてみましょう。椅子に座るという働きを作れば、作った仕組みの中で人が椅子に座る動きを再現できます。また、椅子の色を変える働きを作れば、仕組みが動いている最中でも椅子の色を自由に変えることができます。
このように、部品に備わった働きを順番に呼び出すことで、複雑な動きも簡単に作ることができます。これは、まるで人形劇のようです。人形遣いが人形を操ることで物語が進むように、部品の働きを呼び出すことで、仕組み全体を思い通りに動かすことができます。
例えば、倉庫で荷物を運ぶロボットをこの考え方で作るとします。ロボットの部品として、腕、足、目などを用意し、それぞれに働きを割り当てます。腕には「掴む」「持ち上げる」「置く」などの働き、足には「歩く」「止まる」「方向転換」などの働き、目には「周囲を見る」「荷物を認識する」などの働きをそれぞれ持たせます。
そして、これらの働きを組み合わせることで、ロボットに複雑な作業をさせることができます。例えば、「荷物を掴んで、指定の場所に運び、置く」という一連の作業は、「目を使って荷物を認識する」「足を使って荷物に近づく」「腕を使って荷物を掴む」「足を使って指定の場所まで移動する」「腕を使って荷物を置く」という、それぞれの部品の働きを順番に呼び出すことで実現できます。
このように、部品を組み合わせて、それぞれの部品に働きを持たせ、それらを組み合わせることで、複雑な動きを簡単に作り出すことができるのです。この考え方は、部品を組み替えることで様々な動きを作ることができるため、とても柔軟で応用範囲が広いものです。

ものの組み合わせ

もの同士を組み合わせる考え方は、全体を捉える視点を生み出し、複雑な仕組みを作る上で非常に重要です。小さな部品を組み合わせることで、大きな構造物を作ることができるように、部品となるものを組み合わせることで複雑な働きを再現することができます。
机と椅子を例に考えてみましょう。机というものは、それ自体が独立した存在です。椅子も同様です。しかし、これらを組み合わせることで「部屋」という新たな概念が生まれます。部屋の中には机と椅子が配置され、それぞれが独立した役割を持ちつつ、互いに関連し合って存在しています。机の上には本を置くこともできます。本もまた、単独ではただの書物ですが、机という存在と組み合わさることで、部屋の一部として意味を持ちます。
このように、個々のものを組み合わせることで、全体としての機能や意味が生まれるのです。これは、まるで積み木を組み合わせて家を作るようなものです。一つ一つの積み木は単純な形をしていますが、それらを組み合わせることで複雑な構造を作り出すことができます。プログラミングの世界でも同じことが言えます。個々の部品となるものを組み合わせることで、複雑なシステムを構築することができるのです。
この考え方は、現実世界をより精密に表現するためにも役立ちます。現実世界は、無数のものが複雑に絡み合ってできています。個々のものの性質や役割を理解し、それらをどのように組み合わせるかを考えることで、現実世界の複雑な仕組みを解き明かす手がかりを得ることができるのです。そして、この考え方を応用することで、様々な分野で新たな創造を生み出すことができるでしょう。

活用の場

部品を組み合わせるようにプログラムを組み立てることができるのが、対象指向プログラミングと呼ばれる手法です。この手法は、柔軟性と再利用性の高さが特徴で、様々な分野で役立っています。
例えば、ゲームの開発では、登場人物や道具などを部品に見立てて組み立てます。登場人物の動きや能力、道具の効果などをそれぞれ部品として定義することで、複雑なゲームの仕組み全体を分かりやすく作り上げることができます。また、これらの部品は他のゲーム開発で再利用することも可能です。
携帯電話の応用プログラム開発でも、この手法は力を発揮します。画面に表示されるボタンや絵文字なども部品として扱います。それぞれの部品の表示方法や操作時の動作を定義することで、利用者にとって使いやすい画面設計を効率的に行うことができます。同じ部品を別の応用プログラムで再利用することも容易になります。
機械仕掛けの人形の開発でも、対象指向プログラミングは重要な役割を担います。人形の腕や足などの各部分を部品として捉え、それぞれの動き方をプログラムで記述します。複雑な動作を部品ごとに分けて記述することで、プログラム全体の見通しを良くし、保守性を高めることができます。
このように、対象指向プログラミングは現代のプログラム開発には欠かせない重要な考え方となっています。身の回りの多くの電子機器は、この手法で開発されたプログラムによって支えられていると言っても言い過ぎではありません。部品のように組み立てていくことで、開発効率を上げ、品質の高いプログラムを作成することができるのです。
| 特徴 | メリット | 適用例 |
|---|---|---|
| 部品を組み合わせるようにプログラムを組み立てる | 柔軟性、再利用性の高さ | ゲーム開発(登場人物、道具)、携帯電話の応用プログラム開発(ボタン、絵文字)、機械仕掛けの人形開発(腕、足など) |
| 部品の再利用性 | 開発効率向上、保守性向上、品質向上 | 様々な分野、身の回りの多くの電子機器 |
進化した言葉:C++

計算機への指示を書き記すための言葉、いわゆるプログラミング言語の中でも、シー・プラスプラスは、シー言語を土台に、より発展した形として作られました。シー言語は、計算機が理解しやすい言葉で書かれており、指示を素早く実行できるという長所がありました。しかし、複雑で大規模な仕組みを作る際には、整理しづらく、開発に時間がかかってしまうという難点もありました。シー・プラスプラスは、シー言語のこの難点を解消するために、整理された部品を組み合わせるように仕組みを作れる考え方、「もの指向」を取り入れています。
もの指向とは、プログラムを、機能ごとにまとめた部品の集まりとして考える手法です。それぞれの部品は独立して作られ、他の部品に影響を与えることなく修正できます。これにより、大規模な仕組みでも、効率的に開発や修正を行うことができます。シー・プラスプラスは、このもの指向の考え方を採用することで、シー言語の高速処理という長所を維持しつつ、複雑な仕組みも容易に作れるようになりました。
特に、絵や動きを滑らかに表現する必要があるゲーム開発の分野では、シー・プラスプラスは広く使われています。処理速度が求められると同時に、複雑なゲームの仕組みを作る必要があるため、シー・プラスプラスの持つ両方の長所が活かされるのです。数多くの有名なゲームが、このシー・プラスプラスで開発されています。さらに、シー言語を拡張した言葉であるため、すでにシー言語に慣れている人であれば、比較的容易にシー・プラスプラスを習得できます。もの指向の考え方を学びたいけれど、どの言葉から始めたら良いか迷っている人にとって、シー・プラスプラスはまさにうってつけの言葉と言えるでしょう。高速処理ともの指向による柔軟な開発、この二つの利点を兼ね備えたシー・プラスプラスは、まさに強力なプログラミング言語と言えるでしょう。
| プログラミング言語 | 特徴 | メリット | デメリット | 用途 |
|---|---|---|---|---|
| C言語 | 計算機が理解しやすい低レベルな言語 | 高速処理 | 複雑で大規模な仕組みを作るのが難しい | – |
| C++ | C言語を拡張し、オブジェクト指向を取り入れた言語 | 高速処理、オブジェクト指向による柔軟な開発、C言語からの移行が容易 | – | ゲーム開発など |
