∑考=人

そして今日も考える。

オブジェクト思考

プログラミング言語の種類の一つに「オブジェクト指向型」という物がある。JavaとかC++などがオブジェクト指向型に該当する。ネットで調べると、”ソフトウェアの設計や開発において、操作手順よりも操作対象に重点を置く考え方”という説明ぐらいしかなく、本質的に理解するには少しばかり時間がかかる。

 

オブジェクト指向という考え方の中にも色々な考え方があるのであるが、一番の特徴は、「この世の全ての物はそれぞれ属性操作を持っている」という前提に立っていることだろう。

 

例えば、プログラムの世界では人間も一つのオブジェクトと考えることができる。属性というのは、そのオブジェクト(人間)が持っている情報だと考えればよい。オブジェクトとして考える対象の人間が文字通り手に持っているカバンがあれば、それも一つの属性であるし、あるいは頭の中に持っている知識も属性と言える。

 

もう少しプログラムの世界寄りの例を表すのであれば、その人間の身長や体重など、身体的特徴を表す数値も属性であるし、その人の名前も属性の一つである。今はオブジェクトの例として人間を取り上げたが、この世の全てのモノ(あるいはモノ以外の抽象的な何か)は属性と呼べる情報を持っているのである。プログラムの世界ではフィールドなどと呼ばれる。

 

もちろん、属性を持っているだけでもオブジェクトとして定義することは可能であるが、前述のとおり、一般的なオブジェクトは属性の他に操作を持っている。操作を持っている、という表現はあまり聞き慣れないと思うので、単純に何らかの操作、行動ができると考えてもらってよい。

 

例えば、人間であれば歩くことができるので、歩くという操作を持っていることになる。他にも走ったり、歌ったり、泣いたり、眠ったりと数えればキリがないほどの操作を持っている。こういった操作のことをプログラムの世界ではメソッドと呼ぶ。

 

上に挙げた、歩く、走るといった動作は実に単純な動作であり、人間ならば今すぐ実行することが出来る。一方で、すぐには実行できないような少し複雑な行動も人間は取ることが出来る。

 

例えば、伝言を伝える、というのも操作の一つである。この場合、登場人物が最低3人は必要になるので、仮にAさん、Bさん、Cさんとする。「Bさんからの伝言をAさんがCさんに伝える」という操作を考えてみよう。

 

Aさんに着目すると、Aさんとうオブジェクトが行う操作は、Bさんからの情報をインプットとして、Cさんにそのインプット情報を伝える、というものになる。つまり、この操作はBさんからの情報が手に入らない限り、実行することはできない、いくらか限定的なメソッドである。

 

まとめると、最初に挙げた、歩く、走るなどの単純動作と、誰かから与えられる情報を元にしか実行できないような動作の2種類のメソッドがあることがわかる。プログラムの世界では、「誰かから与えられる情報」のことを引数と呼ぶ(ただし、自分が既に持っている情報は引数ではない。)そして、やはりメソッドにも引数を持たないメソッドと引数を持つメソッドが存在する。

 

与えられる引数の数に限りはなく、一般的に引数が多いほどメソッドの処理は複雑になる。少し考えてみればわかるだろう。多くの人から様々な意見を聞いて一つの形にするよりも、1人の人間から1つの意見を聞いて取りまとめる方がはるかに簡単である。

 

私がここで述べたいのは処理が複雑だとアウトプットを出すことができない、ということではない。複雑な処理を経て出されたアウトプットには価値がある、ということだ。とは言え、複雑な処理はやはり難解である。

 

そんな時には一度このオブジェクト指向ならぬ、オブジェクト思考を使ってみると良いかもしれない。現実世界を元に作られているので、当然現実世界に応用可能だ。(応用というよりは帰着という方が正しいかもしれない。)

 

実はどんなに複雑なプログラムであっても、アウトプットを出すために必要なのは、フィールドと引数とメソッドのみである。逆に言えば、これらさえあれば、どんなアウトプットだって出せるわけである。シンプル極まりない。

 

自分をオブジェクトだと考えてみると、アウトプットが出せない原因も結局、フィールド(:自分が持っている情報)、引数(:他人から与えられる情報)、メソッド(:情報を加工する方法論)のどれかが足りないということに他ならない。大抵の場合、メソッドがわからないために、アウトプットを出すことができないと考えてしまいがちだが、実際には他の要素も存在するのである。

 

例えば、仕事でこんな資料を作ってほしいと言われたら、まず、方法論の前に、何がインプット情報として必要なのかを明確にすることである。プログラムのメソッドも引数を与えなければ即刻エラーである。

 

そして、インプット情報として必要な情報を自分は既に持っているのか?あるいは誰に聞けばわかるのか?どこのファイルを参照すればいいのか?を判断する。しかし、プログラムの場合とは違って引数は自分から探しに行かなければならない。ときには、誰に聞けばわかるのか?すらわからないことも想定しなければならないこともある。

 

そして、最後に方法論、メソッドである。人間には学習機能があるため、メソッドは聞いて覚えるというよりも経験から覚えるケースの方が多い。それに仕事における方法論の知恵は世間に出回っているため、個人的に勉強することができる。

 

ただ、インプット情報や他人の知恵、というのは社内に閉じた知恵であることが多いし、簡単に調べることができないのである。だからこそ、アウトプットを出すときに一番大切なのは、何がインプット情報として必要かを明確化し、それをなるべく取り逃がさないことなのだ。

 

オブジェクト思考を使うと今まで見えてこなかったものが見える。