「このプログラミング言語はオブジェクト指向です」などといった言葉を見かけませんか?こんにちは!今井(@ima_maru)です。私がこの「オブジェクト指向」という言葉に出会ったのは、大学のプログラミング言語「C++」の授業でした。手続き型に変わって、現在主流のプログラミング手法などと言ってましたが、当時は「ちょっと何言ってるかわかんない」状態でした。過去の自分にわかりやすく説明する気持ちで、プログラミングを学び始めた方でもわかるようにできるだけ丁寧に簡単な言葉でそして具体的に「オブジェクト指向」とは何なのかを解説しようと思います。この記事では以下の疑問について解説します。オブジェクト指向ってどういう意味?カプセル化、継承、ポリモーフィズムってなに?メソッドって?どんなメリットがあるの?手続き型言語との違いは?それでは解説していきます。最後にオブジェクト指向を理解するまず初めに、オブジェクト指向はこれだ!という明確な定義はないとおもって大丈夫です。解説が難しく、理解もすぐにできるものではないのだと思います。本記事では、以下の順番で解説をしていこうと思います。オブジェクト指向プログラミングの簡単な説明オブジェクトとは何か自動車を使ったオブジェクト指向プログラミングの解説オブジェクト指向プログラミングのメリットとは何かそして最後にオブジェクト指向をサポートしているプログラミング言語、すなわち「オブジェクト指向言語」と呼ばれるプログラミング言語達を紹介します。Programming)とは、プログラムをカスタマイズ可能な部品の組み合わせとして表現する考え方のプログラミング手法です。「様々なパーツを作って、それを組み合わせるという方針でプログラムを組みましょう」というプログラミングの手法です。一つの「プログラミングのやり方」や「プログラムの組み立て方」です。「あるシステムを作るためにどのようなアプローチ、方法でプログラムを作っていくか」このアプローチの仕方の話なんです。現在の主流となっている方針がこの「オブジェクト指向プログラミング」です。いう方針かというと、「カスタマイズ可能な部品の組み合わせとして表現する」ということです。「カスタマイズ可能な部品」とは何でしょうか?それが「オブジェクト」という概念になります。「ほぼ"100%流れが来る職業"に、ほぼ"100%転職できる"としたら、あなたは悩みますか?それとも今すぐ行動しますか?」なおその先にある答えは行動した人しか知れないよ!\ホリエモンも認めた/転職成功率97%のプログラミングスクールはこちらカスタマイズ可能な部品「オブジェクト」とは?オブジェクト指向プログラミングとは、プログラムをカスタマイズ可能な部品の組み合わせとして表現する考え方といいましたが、この「カスタマイズ可能な部品」が「オブジェクト」という概念になります。オブジェクト指向プログラミングを言い換えれば、プログラムをあらゆる「オブジェクト」の組み合わせで表現しようという手法ということになります。オブジェクトとはどういう概念なのでしょうか?「オブジェクト」とは、私たちが生きていて当たり前のように感じる概念「モノ」です。リンゴパソコン自動車すべて「モノ」「オブジェクト」です。この当たり前の「モノ」の考え・概念をプログラミングに落とし込もうと考えたのです。これがとても抽象的でオブジェクト指向という言葉の明確な定義がないということにつながります。この「オブジェクト」の大事な要素は2つあると思っています。それが、オブジェクトはオブジェクトで構成することもできるオブジェクトの操作はオブジェクト自身に任せるという2つです。オブジェクトはオブジェクトで構成することもできるオブジェクトはオブジェクトによって構成することもできます。パソコンもオブジェクトですが、パソコンの部品たちもそれぞれオブジェクトとしてとらえることができます。パソコンというオブジェクトを構成している部品たちもまたオブジェクトなのです。細分化してみれば、その部品たちもいろんな部品から作られているということになります。オブジェクトの操作はオブジェクト自身に任せるオブジェクトは自主的に作用します。簡単に言えば、オブジェクトは自分で動いたり性質を変えたりできるということです。自動車に乗っていてもっとスピードを上げたいと思ったらどうしますか?アクセルペダルを踏めばいいですよね。変な言い方ですが、自動車はアクセルペダルを踏めば自動車自体が速度を上げてくれます。私たちが車の速度を直接操ってるわけではないんです。ほとんどの内部の処理などを自動車というオブジェクトにゆだねているのです。これってすごいことですよ。車に乗っている皆さんのほとんどの方は、車の内部の処理を詳しく知らずに車を運転しているんですから。これがオブジェクト指向プログラミングのメリットとても良く似ています。自動車というオブジェクトを作るここで、簡単に自動車というオブジェクトをプログラムで表現してみます。オブジェクトを作るには「クラス」と呼ばれる設計書が必要です。自動車のクラスを作ります。おまじないCar();};これを利用してあるプログラムを作りました。内容はよくわからなくて大丈夫です。0;}このプログラムを実行すると、コンソール(入力前)初期速度:0km/hアクセルペダルの踏み込み量(0~100%)->このような画面が出てきます。ここで入力を5回受け付けます。入力は「アクセルペダルをどのくらい踏み込むか」を0~100%の値で設定します。「アクセルペダルをどのくらい踏み込むか」を、10(%)30(%)50(%)50(%)100(%)この順に入力してみます。すると、コンソール(入力後)初期速度:0km/hアクセルペダルの踏み込み量(0~100%)->10速度:6km/hアクセルペダルの踏み込み量(0~100%)->30速度:16km/hアクセルペダルの踏み込み量(0~100%)->50速度:30km/hアクセルペダルの踏み込み量(0~100%)->50速度:44km/hアクセルペダルの踏み込み量(0~100%)->100速度:64km/hこのように表示されました。?10%アクセルペダルを踏みこめば、6km/h速度が上がりました。30%アクセルペダルを踏みこめば、10km/h速度が上がりました。ここで大切なことは、「アクセルペダルを踏むことで自動車が勝手に速度を上げてくれたこと」です。皆さんはアクセルペダルをどれくらい踏むかというのを指定すれば、あとはオブジェクトが勝手に速度を調節してくれます。こんな風に、皆さんは中の詳しい処理を知らなくても使い方さえわかれば正しく使えるんです。これって一つの独立したパーツのように思えませんか?こういうパーツを複数人で作っていって最後に組み合わせれば自動車という一つの大きなオブジェクトが作れるのです。ちなみに私がアクセルペダルとして書いた処理は以下のコードです。100;}概要は、もらった値が範囲外の時は特殊な処理をするもらった値の2乗根を取り2倍して速度に足す速度が100を超えないように設定ということをしていました。この処理を知らなくてもちゃんと動作したっていうのが大事なわけです。これと同様に「ブレーキ」「ハンドル」という様々な処理をいろんな人に作ってもらえばいいんです。最後に合わせて一つの自動車っていうオブジェクトを作るのです。こんな風に、プログラムの(独立した)パーツを各自で作り上げていって、最後に組み合わせようと考えるのがこのオブジェクト指向プログラミングということになります。ガソリン残量取得};これらの部品を作っていくというわけですね。ここからはオブジェクト指向プログラミングを取り入れると、プログラマにとってどんなメリットがあるのか?開発がどうスムーズになるのか?という、メリットの面を解説していきます。大規模なプロジェクト・多人数の開発で活躍するオブジェクト指向プログラミングは、多人数開発に適しているプログラミング手法です。オブジェクト指向は、メインプログラムをカスタマイズ可能な部品(プログラム)の集まりとして構成するので、部品一つ一つの開発を多くの人に分配することができます。Aさんはアクセルの関数を作ってBさんはブレーキの関数を作ってこのように役割分担を明確にすることができるので、多人数での開発においては必須といえる手法となってきています。変更に強い柔軟性オブジェクト指向プログラミングは、変更に強いプログラミング手法です。設計は難しいものの、一度プログラムが完成すれば変更は比較的簡単です。車のタイヤだけ変更したいのならば、タイヤだけ変更すればいいのと同じです。クラスやオブジェクトの一部分を変えるだけで済むというわけです。逆にオブジェクト指向でないと、メインプログラムの様々な場所で変更点が出てくるといったことも少なくありません。すると一から作り直さないといけないといったことも起こりかねません。コードの再利用により記述量が減るオブジェクト指向プログラミングは、コードの再利用が多く使われるプログラミング手法です。同じコードを何回も用いるようなプログラムではその効力を最大限に発揮します。変えたい部分を変えたり、付け加えたり、なくしたりもできます。ほかにも様々なメリットがあると思いますが、私はこの3つ大きいメリットだと思います。オブジェクト指向を実現するための機能オブジェクトの設計書である「クラス」まずこれがないと話になりません。クラスとは、オブジェクトのもとになる設計書です。一つの「モノ」の性質や操作を記述します。プログラミングでいえば、中に書くのは変数と関数です。変数が「モノ」の要素を、関数が「モノ」の操作を担当します。クラスの持つ変数と関数は特殊な呼び方がされます。関数を「メソッド」「メンバメソッド」「メンバ関数」などと呼びます。プログラミング言語C++で書いた車のクラスはこんな感じです。size);//「曲がる」をあらわしたメソッド};図で表せばこういうことです。クラス(モノ)メンバ変数(要素)重さ、速さ、etc...メソッド(操作)アクセル、ブレーキ、etc...クラスの一番の特徴は、クラス内に関数を持つことができる点です。オブジェクトの操作である「メソッド」クラスが持っている関数を「メソッド」「メンバメソッド」「メンバ関数」などと言います。車でいえばアクセルやブレーキなどにあたります。アクセルペダルを踏めば加速し、ブレーキペダルを踏めば減速してやがて止まります。メソッドは自分自身を参照して自分の要素を変えることができます。先ほどのアクセルペダルを表現したメソッドに、「アクセルペダルをどのくらい踏んだかの値」を渡してあげれば、その車が勝手に速度を上げたように見せることができます。「モノ」が自主的に作用したようにできるのです。メソッドは、オブジェクト指向のプログラミング言語には欠かせない機能です。継承(inheritance)継承とは、あるクラスを引継ぎ、新たなクラスを作成できる機能のことです。継承したクラスを修正したり追加したりもでき、オリジナルを保護する機能も含みます。簡単に言うと、一回使ったオブジェクトの要素と操作を引き継げるよってことです。※記事調整中カプセル化(encapsulation)カプセル化とは、オブジェクトの情報を隠蔽することによって、不整合を引き起こすような操作をできなくさせる仕組みです。簡単に言ってしまえば、アクセス権の付与です。オブジェクトに関するデータを自ら操作するときは、そこにアクセスするだけの権利がないとできないようになっています。管理者権限などをつけることによりシステム的にヤバイことを防ぐみたいなイメージです。カプセル化はプログラミングにおいてこのような役割を担っています。カプセル化とはなにか?超わかりやすく解説します!ポリモーフィズム(polymorphism)ポリモーフィズムとは、オブジェクトなどのデータ型に関する操作が統一的であることである。日本語では多様性などと訳されます。ポリモーフィズムとはなにか?超わかりやすく解説します!人気のオブジェクト指向プログラミング言語一覧オブジェクト指向プログラミング言語と呼ばれるものは、純粋なオブジェクト指向を実現したものではないものです。いうのも、手続き型とオブジェクト指向を組み合わせたものなど、オブジェクト指向を取りいれたものがほとんどです。PythonPython(パイソン)は人工知能(AI)の分野に強い言語です。RubyRubyは日本人(まつもとゆきひろ氏)が開発したWeb系に強いプログラミング言語です。Rubyの特徴Rubyは主にWebアプリケーションや、ホームページの開発に使用されます。Rails」というフレームワークが存在が挙げられます。フレームワークとはたとえるならば、骨組みです。Railsを使うことによって、ある程度の骨組みが用意されているので、Webサイト開発の効率化が図れます。これがRubyの強みのひとつです。Rubyと言ったらWeb系に強いと覚えてください。...続きを見るPHPHTMLやCSSと一緒によく使われる、人気の高いオープンソースの汎用スクリプト言語です。Preprocessor」と呼ばれるプログラミング言語です。象さんマークなのは、「php」というのが象さんに見えるから?象さんの名前は「elePHPant」というそうですよ。基本的には、HTMLやCSSと組み合わせてWebページに動きをつけるという点などで、JavaScriptとよく似ています。JavaScriptとの大きな違いとして、JavaScriptはWebページを表示しているPC側で実行されるのに対して、PHPはWebページを提供しているサーバー側で実行されます。サーバーにPHPを実行できる環境を整える必要がありますが、あまり難しくはありません。逆にJavaScriptは、PC側が環境を整えていないといけません(ふつうはJavaScriptは実行できるが)。JavaScriptに比べ、Web系により特化している言語といえます。...続きを見るJavaとても人気の高いプログラミング言語のひとつです。Javaの特徴Javaはいろいろな特徴があります。大きな特徴はマルチプラットフォームというものです。これは簡単に言うと、WindowsでもMacでもLinuxでも全部に対応しているということです。言われる言い方で「OSに依存せず機能する」といいます。ほかにも、メモリ管理を自動で行ってくれるガベージコレクションという機能、ネットワーク関連のライブラリをそなえていること、保守性や安全性が高いことなどが特徴として挙げられます。...続きを見るJavaScriptHTML、CSSとともにWebサイト開発に欠かせないオブジェクト指向のスクリプト言語です。JavaScriptの特徴HTMLとCSSとJavaScriptを組み合わせると、Webページに動きが出ます。言葉で説明するより早いのでこのサイトをご覧ください。開発者ツールを使えばわかるのですが、JavaScriptが使用されています。このようにHTMLは土台を、CSSは装飾を、JavaScriptは動きを作ることを可能にします。フロントエンドの言語になります。誤解されがちですが、JavaとJavaScriptは全くの無関係です。名前変更でたまたまJavaとかぶってしまっただけです。...続きを見るC++C言語にオブジェクト指向を足したような言語です。C++の特徴C言語を拡張して作られているため、構文そのものがC言語にとても近いです。World!\n";}C++のHello,world表示プログラム標準ライブラリの名前や、名前空間と呼ばれるものなど細かい違いはありますが、ほとんど同じということが見て取れると思います。C言語と何が違うのかということですが、ずばり、オブジェクト指向を盛り込んでいるところです。...続きを見る人気のプログラミング言語についてはこちらの記事で詳しく書いているので興味のある方はお読みください。最後にオブジェクト指向とはプログラミング言語を表すときによく使われる単語です。これからプログラミングを学ぶ方にとって、そんなの知らないよという方が多いんじゃないかと思います。そんな方のために、ざっくりとこの概念をつかんでほしいというのがこの記事の一番の目的です。最後まで読んでいただきありがとうございます。コメントをキャンセルメールアドレスが公開されることはありません。週1でブログ書いてます。