こんにちは。侍エンジニアブログ編集部です。
オブジェクト指向プログラミングってよく耳にしますけど、はっきり分かるとは言いづらい考え方ですよね。
実際プログラミング初学者の方にお話を伺うと、
クラスとかインスタンスとかどういうことなの??
などなどオブジェクト指向の概念で曖昧になりがちなポイントがいくつかあります。そこでこの記事では、ステップバイステップで誰にでも分かるようにオブジェクト指向を噛み砕いて解説していきます。
この記事では、オブジェクト指向でよく使われる基本的な用語「クラス」「インスタンス」「メソッド」を理解して、本格的な活用方法の為に理解を深めていきましょう。
- オブジェクト指向のクラスは性質が同じもの同士で分類したもの
- クラスを設定することで的確にコンピュータへ指示できる
- オブジェクト指向言語を用いた開発では設計の精度が重要
また、オブジェクト指向のクラスについては次の動画でも解説しているので、良ければご覧ください。
そもそもオブジェクト指向のクラスとは?
オブジェクト指向には「クラス」という考え方があります。クラスとはこれから作る『モノの定義』です。
例えば、
これから作る『モノ』はどんなことをすることが出来るのか?
といった内容を決めていきます。オブジェクト指向では『ロボットを設置して仕事をさせるように』プログラミングを進めていきます。
ロボットは指示されたことしか出来ませんので、予め「キミにはこんな指示をするよ」「この指示を受けたらこういう仕事をしてね」ということを決めて利用します。
つまり、クラスとは「これから仕事をしてもらうロボットの設計図」と理解して頂ければ分かりやすいでしょう。
インスタンスとは?
「インスタンス」とは、クラスから作られた実働する『モノ』のことです。
クラスはあくまで『設計図』でしかありませんので、クラスだけでは仕事をしてくれません。実際に動作をさせるためにはそこから『実際に動くモノ』である「インスタンス」を作らなければなりません。
インスタンスは「クラスという設計図から生み出された実際に働くロボット」と理解して頂くと良いでしょう。
なお、クラスからインスタンスを作ることを「インスタンス化」といいます。
メソッドとは?
「メソッド」とは、プログラムの一連の処理をまとめたパッケージのようなものです。一連の処理に名前をつけて、後からその一連の処理を簡単に呼び出せるようにしておきます。
言語によっては「関数」と呼ばれることもあります。メソッドは独立して道具のように使うこともありますが、クラスの中に持つことも可能です。クラスの中にある通常のメソッドは、『そのクラスから生成されたインスタンスが出来ること』を表します。
はじめに作成した”おはなしロボットクラス”の”ねぎらい機能”がメソッドにあたります。インスタンスに対して搭載されている機能の利用を指示することで、実際にその仕事をしてくれるようになります。
オブジェクト指向で設計してみよう
オブジェクト指向における設計とは?
そもそもオブジェクト指向における設計とは、各クラスの役割など全体の関係性を決めていくことです。
どこまで仕様を固めるかという粒度によって、基本設計・詳細設計など分けて行う場合もあります。
クラス単体など自分の意識し続けられる範囲であればすぐにコーディングも出来そうですが、全体としてどう作るべきかというのは、時間をとってしっかり考えておかないと後で矛盾などが出てくることがあります。
また、どんなものを作りたいのかということを複数人に共有する場合や、他の人が開発に参加する際にもスムーズにプログラムを理解できるようになるというメリットも有ります。
設計の大切さ
「設計書」という成果物をしっかり残すか残さないかは置いておいて、プログラミングでは設計という行為を全員が行っています。
まずシステム全体を俯瞰して、それぞれのクラスなどの役割を考え、全体を最適化出来るように決めてプログラミングを進めます。ハッカーはこれを頭の中だけで行うことが出来るので、時間を掛けずにコードを量産しても美しく保てます。
設計せずにプログラミングを行ってしまうと、さまざまな問題が発生しやすくなります。
例えば、つぎのような問題がおこりやすくなるでしょう。
- 処理の意図が理解しづらい
各クラスを使用しているルールを理解できず、誤った使い方をして思わぬバグに繋がったり、バグの回収に時間がかかったりします。
- 拡張性が低い
予め利用者数が増えることなど長い目で見た保守を想定しておらず、後々改修に改修を重ねざるを得ない状態になる場合もあります。
- セキュリティが甘い
さまざまな外部からの攻撃などが想定しきれておらず、データを壊されたり盗まれたりしてしまう可能性もあります。
- パフォーマンスが悪い
拡張性が低いというのにも含まれますが、利用者数が増えてだんだん特定の処理に時間がかかるようになってしまう場合などもあります。
他にも、設計が出来ないことによるさまざま弊害が考えられます。
先程、クラスが設計図でインスタンスが実働するロボットのようなものだというお話をしましたが、もしシステム要件によってインスタンスを変更しなければならないとしたら、その世界でのモノの扱いに大きな影響が出そうだということも理解できるでしょう。
オブジェクト指向の設計に必要なこと
少し本格的な内容にも触れて行きますが、今の段階では「そういうものがある」というレベルでご理解頂ければ問題ありません。
設計の為の基礎知識をつけるには
オブジェクト指向では、まず基礎知識を学習していくことは大前提です。
まずはこちらの書籍を読んで基礎知識を身に付けておくと、今後の学習がスムーズに進むでしょう。
オブジェクト指向のこころ | Amazon
オブジェクト指向パラダイムを有効にするためのデザインパターンの中から、重要度の高いものを厳選し、解説しています。その際、要求における流動的要素や、要求の変化という観点から、さまざまな事例について丁寧な考察を行うことによって、デザインパターンそのものを導き出すというユニークなアプローチを採っています。/引用元:Amazon
また、設計の一般的な方法としてはUML(統一モデリング言語)というものを利用すると良いでしょう。UMLの詳細を理解するには数時間では足りないので、この記事では書き方を省かせていただきます。
興味がある方は次のようなサイトもチェックしてみてください。
UMLなどの図形を用いる際はdraw.ioというツールを利用するのが個人的にオススメです。
draw.ioはローカルにも保存できて、無料でいくつでも図形を作成できます。なんといっても使い心地が良いですし、画像としても出力できるので是非お試し下さい。
設計を高度なレベルにするために
一番てっとり早い方法は基礎を学習した後、自分が行った設計を現役エンジニアにレビューしてもらい教えを請うことです。拡張性やパフォーマンスについて気を付けなければいけないことなどは、とても初心者が一朝一夕で身につけられるものではありません。
はじめは最低限の要件を満たすアプリを作って、学習しながらソースコードをキレイにしていく『リファクタリング』や、より良い状態にするための機能追加・改修を何度も行ってください。
設計には広い範囲での経験値の蓄積が必要です。
オブジェクト指向をより深く学ぶなら
オブジェクト指向についてある程度ご理解いただけたと思います。
しかし、オブジェクト指向言語はJava、Ruby、PHP、JavaScript、Swift、C++など数多くあり、
という方も多いですよね。プログラミング言語選びは今後のエンジニアとしてのキャリアも、決めかねない大切な選択の1つです。人気や他者から薦められたといった理由で選んでしまうと、本当に自分の作りたいものが作れないといったことになりかねません。
そこであなたに最適なプログラミング言語を選ぶために、プログラミング学習プラン診断アプリを用意しました。この診断アプリを使えば、あなたの目的にあった最適なプログラミング言語がわかりますよ。
あなたに必要な学習プランが決まったら、さっそく学習を始めてみましょう!
手前味噌ではありますが、弊社侍エンジニアではいままでの指導実績をもとに、プログラミング学習を効率的に学べるコースをご用意しています。
- 最初から最後まで講師が変わらない業界唯一の専属マンツーマン
- あなただけに作成するオリジナルカリキュラム
- フリーランスへの転向までサポートするキャリアカウンセラー
これらを一挙に叶えるマンツーマンコースであなたもエンジニアを目指してみませんか?
そんな方は、まずは毎月400名以上が受講している無料カウンセリングにてコンサルタントにプログラミング学習の悩みや不安、仕事獲得方法、業界知識など相談してみてはいかがでしょうか?
業界随一のコンサルタントがお待ちしています。遠方の方でもオンラインで受講できるのでお気軽にご利用下さい。
お急ぎの方はこちらからお問い合わせください。
読み込みに失敗しました。
大変お手数ですが、本ページを再度読み込んでください。
再度読み込んでも、読み込み失敗が起こる場合は
こちらからお問い合わせください。
カウンセリングはオンラインにて実施しております。
※予約完了後に、カウンセリングのためのURLやIDなどをメールにてご案内します
1.ご希望の日時を選択してください
2.必須事項を入力してください
ご予約ありがとうございます!
予約が完了しました。ご予約情報とご参加前の準備をご確認ください。
【ご予約情報】○月○日(△) ○○:○○〜
カウンセリング参加に向けてのご準備
※記入いただいたメールアドレスに確認用メールをお送りしておりますのでご確認ください。
※オンラインカウンセリングはGoogle Meetにて実施します。URLが発行したら別途ご案内いたします。
※メールが届かない場合は、SAMURAI ENGINEERサポート(support@sejuku.net)までご連絡ください。
まとめ
今回は「クラス=設計図」「インスタンス=設計図から作った実働するモノ」「メソッド=処理がまとめられたもの」としてご説明してきました。
オブジェクト指向の考え方を少し掘り下げて理解できたでしょうか。この記事があなたのプログラミング学習の助けになれば幸いです。