IT業界特有のワード「オブジェクト指向」
今やプログラミングの世界では当たり前となっている「オブジェクト指向」という考え方。
様々なプログラミング言語がオブジェクト指向の考え方を取り入れており「オブジェクト指向型言語」や「オブジェクト指向プログラミング」といったように呼ばれています。
IT業界で当たり前に聞くこの「オブジェクト指向」という単語ですが、一体どういう意味を持っているのでしょうか。
今回の記事では、オブジェクト指向に注目していきます。
オブジェクト指向の特徴から、なぜIT業界に定着したのか?というポイント、オブジェクト指向のメリットなど様々な観点からチェックしていきましょう。
記事の後半では、おすすめのオブジェクト指向型言語も併せて紹介いたします。
オブジェクト指向の基本
まずは基本的な知識から注目します。
日本語では「オブジェクト指向プログラミング」と呼ばれますが、英語では「Object Oriented Programming」の頭文字から「OOP」と表記されることもあるので注意してください。
イメージするとしたら
シンプルにオブジェクト指向という概念を言い表すのであれば「仕事の割り振り」という言葉がイメージしやすいかもしれません。
例えば、仕事でとあるプロジェクトがあったとします。
プロジェクトとなれば、普通は複数の人がチームに所属して各に割り振られた仕事やタスクを処理していきます。
決して1人で全てを行うというわけではなく、個人個人で自分の得意な部分を担当するでしょう。
苦手な部分は他のメンバーや部署に回したりすることもできるかもしれません。
そうやって、個人個人が自分の担当する仕事をこなし、1つのプロジェクト成功を目指しますね。
オブジェクト指向も同じように、単純に全てを行うわけではなく、様々ないわば「部品」を利用してプログラミングしていきます。
手続き型言語との違い
従来の手続き型プログラミングは単純に上から下の流れ通りにコードを記述・その通りに動作していました。
しかし、オブジェクト指向プログラミングは様々な「部品」を用いながらプログラムを「組み立てて」いきます。
従来のプログラミングとは全く異なる考え方といえるのが「オブジェクト指向」という概念といえるでしょう。
オブジェクト指向の特徴
仮にアクションゲームを作ったとします。
キャラクターの基本操作として、スペースキーを押したらジャンプ、WASDで前後左右への移動といったものを基に開発・プログラミングをしなければなりません。
しかし、その操作キャラクターが仮に1,000人いて、それぞれの操作をコード上に記述しないといけないとなれば非常に面倒で大変な作業量になってしまいます。
これは極端な例ですが、オブジェクト指向という考え方はこういった状況を劇的に改善できます。
はじめに「キャラクター」というモノを定義し、操作などの処理を紐づけておけばコードの「再利用」ができます。
キャラクターごとにその処理を呼び出すなどすれば、先ほどの例のように全キャラクター分コードを記述するよりも圧倒的に削減できるでしょう。
オブジェクト指向のメリットは?
先ほど解説したアクションゲームの例から見れば、オブジェクト指向のメリットは明らかです。
モノを定義して「部品」にしておくことで、それを利用して様々なキャラクターで「再利用」できます。
もちろん他にもオブジェクト指向のメリットがあるのでチェックしていきましょう。
ソースコードは担当者が理解していればいい
そして複数人で開発を行う場合、この「操作」が定義されたモノについてシチュエーションにもよりますが他のメンバーがソースコードを全て理解しておく必要がありません。
なぜなら、直接その「部品」に触れる必要がないからです。
仮あくまでその部品を「利用する」だけであり、部品の中身を書き換えたりする必要はありません。
そのため、オブジェクト指向プログラミングは大人数での開発に向いているともいえるでしょう。
コードの書き換えが楽
また、オブジェクト指向はプログラムの書き換えも容易です。
先ほどのゲームにジャンプや移動に加えて「左クリックで攻撃をする」というアクションを追加するとします。
新しいアクションを各キャラクターごとに追加・削除しなければなりません。
しかし、オブジェクト指向であれば既に定義している「部品」の中身に「左クリック」の処理を書き加えればいいだけです。
このように、新しく何か機能やアクションを追加することになっても比較的簡単に処理を追加できるという特徴も持っています。
オブジェクト指向の基本用語
それでは、いよいよ本格的なオブジェクト指向の用語を解説していきます。
オブジェクト指向には様々な専門用語・考え方があるという特徴があります。
今回はオブジェクト指向の中でも基本となる以下の単語をチェックしましょう。
1つずつ簡単に解説をしていきます。
クラスとは
クラスは、オブジェクト指向でいう「設計図」のことを指しています。
オブジェクトがどんな処理を行うのかということをクラスで定義するのですが、例で考えてみましょう。
例えば、車には数多くの種類(車種)が存在しています。
メーカーが違えば、色、形、馬力、エンジンなど様々な「違い」がありますね。
しかし中身や色・形が違おうとどれも「車」というオブジェクトであることは疑う余地もありません。
クラスはそんな車の「設計書」であり「オブジェクトが何をするのか」ということを定義しておくものだといえるでしょう。
人間的に分かりやすくいえば「分類」と言い表せるかもしれません。
人間は一目見れば色や形が違っても「車」という分類に属するということが区別できます。
例え色や形が違っても「共有する性質」を持っているからです。
同様にオブジェクト指向でも共有する性質を持っている仲間を分類し、それを「クラス」と呼んでいるというイメージです。
クラスをインスタンス化する
オブジェクト指向プログラミングでは先ほど解説した「クラス」を「インスタンス化」します。
カタカナばかりで意味不明ですが、実はシンプルです。
「クラスをインスタンス化」するとは、クラスを基に実際の値でインスタンスを生成するという意味になります。
同様に車を例にしてみると「名前、色、タイプ」というクラスがあったとすれば「○○、黒、スポーツカー」といった「実際の値」を当てはめて作ることです。
簡単な言い方をすれば「クラスに実際にデータを当てはめる」とも表現できるかもしれません。
メソッドとは
メソッドもオブジェクト指向で頻出するワードです。
メソッドはオブジェクトが持っている処理のこと。
同じく車というオブジェクトを例にすると、「走る」、「止まる」などアクションを起こす処理のことを指しています。
外部からメソッドを呼び出すことで起動させ、その処理内容を実行させることができます。
カプセル化という概念
オブジェクト指向プログラミングにおいて重要な概念が「カプセル化」です。
オブジェクト指向プログラミングでは、オブジェクトがデータや処理を持つことになります。
しかし、それを外部から変更できたりすると本来想定していた挙動とは異なった動きをしたり、エラーの原因となり得るでしょう。
カプセル化とは、別のオブジェクトから直接利用されないようにするということです。
直接ではなく、一度オブジェクト外部に作られた操作するために作られた処理を通してからでなければ利用できません。
「カプセル」という名前の通り「外部から直接触れない」というイメージが当てはまります。
複雑な処理や流れをあえて「隠す」ともいえるでしょう。
ポリモーフィズム
ポリモーフィズムもオブジェクト指向で重要な要素です。
明確な定義がある単語ではないため、様々な表現方法があります。
簡単にいえば「オブジェクトやクラスクラスによって同一のメソッドで違った動きをする」といったところでしょうか。
一口に「外国人」といえどアメリカ、フランス、スペインなど人種は様々です。
当然挨拶も国によって違いますが「外国人」というクラスに「挨拶」というメソッドを用意したとします。
サブクラスに「アメリカ人」、「フランス人」、「スペイン人」もそれぞれ用意すれば、挨拶メソッドで国籍に応じて適切な挨拶が返ってきます。
国籍ごとにメソッド名を変えたりせず「同じメソッド名」で「異なる処理」を実現しており、こういったものをポリモーフィズムといいます。
これでも理解が難しいかもしれませんが、実際にオブジェクト指向プログラミングをしている過程で「これがポリモーフィズムか」と感覚的に理解できるようになっていくでしょう。
おすすめのオブジェクト指向型言語をピックアップ
ここまでオブジェクト指向の基本的な知識をチェックしてきましたが、実際にはどんな言語が「オブジェクト指向型言語」なのでしょうか。
今回はメジャーかつおすすめのオブジェクト指向型言語をピックアップしました。
1つずつ簡単に紹介します。
Java
知名度も高いJavaは、オブジェクト指向型言語の代表格ともいえるかもしれません。
非常に奥が深い言語のため完全に習得するのは難易度が高い言語です。
しかし、オブジェクト指向についてプログラミング言語に触れながら学習するという意味では適している言語かもしれません。
知名度や普及度の高さからインターネットなどで調査する際にもサンプルが多く、壁にぶつかっても悩みなどを解決しやすいといえるでしょう。
また、Javaをある程度習得すれば仕事を獲得しやすいというメリットもあります。
多くのフリーランス向け案件が常時募集されているため、他の言語と比較してみても仕事をとりやすい言語です。
C++
C言語をベースにオブジェクト指向な要素を取り込んでいるのが「C++」です。
こちらもJavaに次いで、もしくは同レベルで知名度が高くIT業界でも広く親しまれています。
C言語がベースになっているので、既にC言語はマスターしているという方にもおすすめです。
Java同様仕事の案件も数が多いという特徴も持っています。
Swift
Swiftは、iOS・Mac OS向けのアプリケーションを制作できる言語です。
将来的にiPhoneアプリを作りたいと考えている方で、Mac OSのコンピュータを所有されている方はぜひSwiftでオブジェクト指向を学習しましょう。
案件数はJavaやC++ほどではありませんが、一定の数があるため仕事にも繋げやすいでしょう。
Ruby
日本人が開発したRubyという国産言語もオブジェクト指向型言語です。
とにかく読みやすさが重視されコード量が少ないRubyは、新しく言語を学習するには敷居が低いともいえるかもしれません。
楽しみながらプログラミングおよびオブジェクト指向を学ぶことができるでしょう。
仕事の量という意味ではさほど多くありませんが、Ruby on Railsが注目されていたりと将来性のある言語といえます。
オブジェクト指向の影響を受けている関数型プログラミング
プログラミングの考え方で、新たに数学的な考え方が色濃く反映された関数型プログラミングという概念が出てきました。
しかし、この関数型プログラミングもオブジェクト指向の影響を受けています。
新しく注目されてこそいますが、依然として主流なのはオブジェクト指向です。
IT業界の開発現場において高いシェアを持っているJavaやC++などもオブジェクト指向型言語であるため、今後もしばらくの間はオブジェクト指向がメインストリームとなるでしょう。
オブジェクト指向を理解して楽をしよう
オブジェクト指向は、理解しなければ「クラス」や「メソッド」、「インスタンス化」など意味が分からずつい敬遠しがちになってしまいます。
しかし、理解さえしてしまえば「オブジェクト指向だからこその楽さ」に気が付くはずです。
パッと見オブジェクト指向は難しいかもしれません。
しかし、その難しそうな見た目を乗り越えて理解した先には、圧倒的に楽になって効率化されたプログラミングが待っています。
ぜひ名前や見た目だけで避けることはせずにオブジェクト指向プログラミングに挑戦してみてください。
結果的に自分が楽することに繋がっていくでしょう。
オブジェクト指向を理解すれば様々な言語に繋がる
昨今注目されている言語の大半はオブジェクト指向型言語です。
そのため、今後エンジニアとして生きていくためにもオブジェクト指向を避けることは難しいという現実があります。
新しい言語習得をするためにもオブジェクト指向から勉強しなければならないかもしれません。
しかし、一度理解してしまえばそれまで避けていた他の数多くの言語の敷居が一気に下がることでしょう。
今後もエンジニアとして生きていくためにも、ぜひオブジェクト指向へと立ち向かってみてください。