システム開発の現場で必ず耳にするのがオブジェクト指向という言葉です。C++やJavaはオブジェクト指向の開発言語などと言う形で聞くことが多いと思われます。オブジェクト指向って何なのか?どんな役に立つのか、なるべくわかりやすくご説明します。
オブジェクト指向とは?技術者でも実はあまり理解できていない概念
オブジェクト指向、実はソフトウェア開発の現場でも言葉だけが一人歩きしていて、あまり理解されていません。現場で頻繁に耳にするようになってから、20年ぐらい経過しているにもかかわらずこの状態です。
そもそもわかりにくいのは、形がない単なる概念だから
なぜ、オブジェクト指向がこんなに分かりにくいのかというと、具体的な形を持たない単なるシステム開発手法の一概念だからです。
なんの前提もなしに宇宙って何?と質問した場合、人によって様々な答えが返ってくると思います。実際に宇宙空間に出たことがある人はごく限られていて、しかも想定できないくらいのスケールの宇宙のほんの一部しか実際に目にしたことがないからです。
オブジェクト指向はよくわからない、と考える必要はありません。なんとなくこんなものとの理解で構わないのです。
概念だから理解していると思っている人も実は一致していない
実体がないため、オブジェクト指向を理解していると思っているエンジニアも実はそれぞれの概念として理解しています。その理解している概念が必ずしも一致しているとは限らないのです。
だから、人から説明を聞いても説明している人の想定するオブジェクト指向について語られることになります。説明する人ごとに少しずつ変わっていて、わかったようなわからないような、実のところ何なのかと思ってしまうのは実体がない概念だからです。
クラスこそオブジェクト指向だと言う人もいれば、クラスはあまり関係ないと言う人もいます。技術者に必要なのは、オブジェクト指向をきちんと説明できることではありません。
使用する言語のオブジェクト指向のために用意されている構文をきちんと理解して、正しく使いこなす知識が必要なのです。
一見無駄に思えるコードを書かなければならないのは何故?
オブジェクト指向の解説書通りにコードを記述しようとすると、なんでわざわざこう書かなくてはいけないの?と思うようなコードが必ず出てきます。直接関数を呼べばいいのに、なぜクラスのメソッドとして定義する必要があるの?
呼び出すときもいちいちクラス名に”->”をつけないといけないので打つ文字数が増えてめんどくさいだけではと思うこともあるでしょう。なぜなのかは次項で解説していきたいと思います。
オブジェクト指向は他のエンジニアが見ても分かるように書くべし!
オブジェクト指向の「オブジェクト」は「モノ」を指しているという説明はよくされています。「モノ」を使う人は「モノ」の出来上がるまでの工程を理解する必要がありません。
「モノ」の使い方だけを知っていれば事足ります。オブジェクト指向の基本理念はプログラムコードにも「モノ」の概念を取り入れるということです。
無駄に見える形式通りのコードの必然性
関数にクラスを被せて、いちいちクラスをインスタンス化してクラスメソッドとして呼び出す。そもそもクラスとは何なのでしょう?
クラスというのは実際にどんな情報をもらって、どんな順序でモノを作り何を返すのかということを定義しているだけです。いわば「モノ」作りのマニュアルです。そのマニュアル通りに工場を建て、必要な生産ラインを実体化するのがインスタンス化です。
なぜ、クラスを定義して一手間かけるのか?それはあるモノの作り方は知らなくても必要な材料を揃えれれば、出来上がったモノを入手できるようにするためです。
誰が見ても理解できるネーミングも重要
作り方を知らなくても目的のモノを得ることができるということは、誰が見ても目的のモノが何なのかがわかるネーミングが重要です。極端な例をあげるとメソッドに「method1」・「method2」などと言う名前をつけても何をするモノなのかさっぱりわかりません。
しかし「ReadFile」・「WriteFile」と言う名前ならファイルを読むメソッドとファイルに書き込むメソッドであるということがわかります。この誰にでも理解できるということがオブジェクト指向の大きなポイントになります。
オブジェクト指向のコードは書いた本人以外にも使えるモノであるべき
なぜわざわざ、手間をかけてクラス化するのか、わかりやすいネーミングはなぜ必要なのか?それは、せっかく開発したプログラムを末長く資産として活用できるようにするためです。
システムを長く運用していると、不足の処理や処理の方法を変えたいなどシステムを変更する必要が発生します。
ところが、そのプログラムのコードが名前の定義がメチャクチャで、なんの処理をどこでやっているのかさっぱりわからない。解析するだけで作り直せるくらいの工数がかかってしまったらどうでしょう。
その数年後にコードを書いた本人とすでに連絡を取れないこともある得ます。書いた本人だけではなく、誰にでもわかりやすくする重要性がお分かりいただけるのではないでしょうか。
あるいは、新しいシステムを開発していて、この部分は以前書いたあのコードが使えるという場面もあります。そんなとき、クラスの形でコードを引き継げば、新たにコードを書き直さなくても目的を達成することができます。
処理手順は分からなくても、Aというデータを渡せば結果として必要なモノが得られるということだけわかっていれば流用できてしまうのです。オブジェクト指向は、一度書いたコードを資産として末長く引き継げるようにしたい時有効な概念となります。
オブジェクト指向は再利用・メンテナンスが容易
きちんとオブジェクト指向に従って開発されたプログラムは再利用やメンテナンスがしやすい形で引き継がれます。
開発者がいなくなっても使い続けられる
何年か経ってメンテナンスが必要になった時、そのシステムを開発した担当者とすでに連絡が取れないということもあります。そんな時も、オブジェクト指向の作法に法って作られていれば、他のエンジニアでも対応がしやすくなります。
綿密なコーディング規約とレビューでの規約遵守の確認が重要
ソフトウェア資産として一度開発したコードは末長く使用し続けたいということは誰もが考えると思います。そのためには命名規則やオヌジェキト思考にそう形でコードするための構文の書き方など、コーディング規約としてまとめておくことをおすすめします。また、コードレビューではコーディング規約を遵守していることの確認も重要です。
アウトソーシングする場面でも有効
システム開発をアウトソーシングする場合にもオブジェクト指向を取り入れて開発することが重要な意味を持ちます。システム開発の一部機能だけ外注する場合も、機能単位で切り出しやすくなります。
オブジェクト指向のプログラミングに精通している技術者をお探しなら、クラウドソーシングサービスも便利です。