スライドショースライドショースライドショー

オブジェクト指向のクラスってなに?専門用語から設計まで徹底解説

こんにちは。侍エンジニア塾ブログ編集部です。

オブジェクト指向プログラミングってよく耳にしますけど、はっきり分かるとは言いづらい考え方ですよね。

実際プログラミング初学者の方にお話を伺うと、

オブジェクト指向ってよくわからない!
クラスとかインスタンスとかどういうことなの??

などなどオブジェクト指向の概念で曖昧になりがちなポイントがいくつかあります。そこでこの記事では、ステップバイステップで誰にでも分かるようにオブジェクト指向を噛み砕いて解説していきます。

この記事では、オブジェクト指向でよく使われる基本的な用語「クラス」「インスタンス」「メソッド」を理解して、本格的な活用方法の為に理解を深めていきましょう。

オブジェクト指向の基本を知りたい方は、はじめにこちらの記事をご覧ください。

オブジェクト指向とは何か?わかりやすい例で説明してみた。
更新日 : 2019年9月11日

そもそもオブジェクト指向のクラスとは?

スクリーンショット 2016 06 12 15 05 12

オブジェクト指向には「クラス」という考え方があります。クラスとはこれから作る『モノの定義』です。

例えば、

これから作る『モノ』は何を覚えておくことが出来るか?
これから作る『モノ』はどんなことをすることが出来るのか?

といった内容を決めていきます。オブジェクト指向では『ロボットを設置して仕事をさせるように』プログラミングを進めていきます。

ロボットは指示されたことしか出来ませんので、予め「キミにはこんな指示をするよ」「この指示を受けたらこういう仕事をしてね」ということを決めて利用します。

つまり、クラスとは「これから仕事をしてもらうロボットの設計図」と理解して頂ければ分かりやすいでしょう。

インスタンスとは?

スクリーンショット 2016 06 12 17 49 46

インスタンス」とは、クラスから作られた実働する『モノ』のことです。

クラスはあくまで『設計図』でしかありませんので、クラスだけでは仕事をしてくれません。実際に動作をさせるためにはそこから『実際に動くモノ』である「インスタンス」を作らなければなりません。

インスタンスは「クラスという設計図から生み出された実際に働くロボット」と理解して頂くと良いでしょう。

なお、クラスからインスタンスを作ることを「インスタンス化」といいます。

メソッドとは?

スクリーンショット 2016 06 12 19 38 51

メソッド」とは、プログラムの一連の処理をまとめたパッケージのようなものです。一連の処理に名前をつけて、後からその一連の処理を簡単に呼び出せるようにしておきます。

言語によっては「関数」と呼ばれることもあります。メソッドは独立して道具のように使うこともありますが、クラスの中に持つことも可能です。クラスの中にある通常のメソッドは、『そのクラスから生成されたインスタンスが出来ること』を表します。

はじめに作成した"おはなしロボットクラス"の"ねぎらい機能"がメソッドにあたります。インスタンスに対して搭載されている機能の利用を指示することで、実際にその仕事をしてくれるようになります。

オブジェクト指向で設計してみよう

画像:Shutterstock

オブジェクト指向における設計とは?

そもそもオブジェクト指向における設計とは、各クラスの役割など全体の関係性を決めていくことです。

どこまで仕様を固めるかという粒度によって、基本設計詳細設計など分けて行う場合もあります。

クラス単体など自分の意識し続けられる範囲であればすぐにコーディングも出来そうですが、全体としてどう作るべきかというのは、時間をとってしっかり考えておかないと後で矛盾などが出てくることがあります。

また、どんなものを作りたいのかということを複数人に共有する場合や、他の人が開発に参加する際にもスムーズにプログラムを理解できるようになるというメリットも有ります。

設計の大切さ

「設計書」という成果物をしっかり残すか残さないかは置いておいて、プログラミングでは設計という行為を全員が行っています。

まずシステム全体を俯瞰して、それぞれのクラスなどの役割を考え、全体を最適化出来るように決めてプログラミングを進めます。ハッカーはこれを頭の中だけで行うことが出来るので、時間を掛けずにコードを量産しても美しく保てます。

設計せずにプログラミングを行ってしまうと、さまざまな問題が発生しやすくなります。

例えば、つぎのような問題がおこりやすくなるでしょう。

  • 処理の意図が理解しづらい

各クラスを使用しているルールを理解できず、誤った使い方をして思わぬバグに繋がったり、バグの回収に時間がかかったりします。

  • 拡張性が低い

予め利用者数が増えることなど長い目で見た保守を想定しておらず、後々改修に改修を重ねざるを得ない状態になる場合もあります。

  • セキュリティが甘い

さまざまな外部からの攻撃などが想定しきれておらず、データを壊されたり盗まれたりしてしまう可能性もあります。

  • パフォーマンスが悪い

拡張性が低いというのにも含まれますが、利用者数が増えてだんだん特定の処理に時間がかかるようになってしまう場合などもあります。

他にも、設計が出来ないことによるさまざま弊害が考えられます。

先程、クラスが設計図でインスタンスが実働するロボットのようなものだというお話をしましたが、もしシステム要件によってインスタンスを変更しなければならないとしたら、その世界でのモノの扱いに大きな影響が出そうだということも理解できるでしょう。

オブジェクト指向の設計に必要なこと

画像:Shutterstock

少し本格的な内容にも触れて行きますが、今の段階では「そういうものがある」というレベルでご理解頂ければ問題ありません。

設計の為の基礎知識をつけるには

オブジェクト指向では、まず基礎知識を学習していくことは大前提です。

まずはこちらの書籍を読んで基礎知識を身に付けておくと、今後の学習がスムーズに進むでしょう。

オブジェクト指向のこころ | Amazon

オブジェクト指向パラダイムを有効にするためのデザインパターンの中から、重要度の高いものを厳選し、解説しています。その際、要求における流動的要素や、要求の変化という観点から、さまざまな事例について丁寧な考察を行うことによって、デザインパターンそのものを導き出すというユニークなアプローチを採っています。/引用元:Amazon

また、設計の一般的な方法としてはUML(統一モデリング言語)というものを利用すると良いでしょう。UMLの詳細を理解するには数時間では足りないので、この記事では書き方を省かせていただきます。

興味がある方は次のようなサイトもチェックしてみてください。

スクリーンショット 2016 06 22 15 39 20

UMLなどの図形を用いる際はdraw.ioというツールを利用するのが個人的にオススメです。

draw.ioはローカルにも保存できて、無料でいくつでも図形を作成できます。なんといっても使い心地が良いですし、画像としても出力できるので是非お試し下さい。

設計を高度なレベルにするために

一番てっとり早い方法は基礎を学習した後、自分が行った設計を現役エンジニアにレビューしてもらい教えを請うことです。拡張性パフォーマンスについて気を付けなければいけないことなどは、とても初心者が一朝一夕で身につけられるものではありません。

はじめは最低限の要件を満たすアプリを作って、学習しながらソースコードをキレイにしていく『リファクタリング』や、より良い状態にするための機能追加・改修を何度も行ってください。

設計には広い範囲での経験値の蓄積が必要です。

オブジェクト指向をより深く学ぶなら

画像:Shutterstock

オブジェクト指向についてある程度ご理解いただけたと思います。

しかし、オブジェクト指向言語はJava、Ruby、PHP、JavaScript、Swift、C++など数多くあり、

どのプログラミング言語を選べば良いのか分からない!

という方も多いですよね。プログラミング言語選びは今後のエンジニアとしてのキャリアも、決めかねない大切な選択の1つです。人気や他者から薦められたといった理由で選んでしまうと、本当に自分の作りたいものが作れないといったことになりかねません。

そこであなたに最適なプログラミング言語を選ぶために、プログラミング学習プラン診断アプリを用意しました。この診断アプリを使えば、あなたの目的にあった最適なプログラミング言語がわかりますよ。

プログラミング学習プランを診断する

あなたに必要な学習プランが決まったら、さっそく学習を始めてみましょう!

手前味噌ではありますが、弊社侍エンジニア塾ではいままでの指導実績をもとに、プログラミング学習を効率的に学べるコースをご用意しています。

  • 最初から最後まで講師が変わらない業界唯一の専属マンツーマン
  • あなただけに作成するオリジナルカリキュラム
  • フリーランスへの転向までサポートするキャリアカウンセラー

これらを一挙に叶えるマンツーマンコースであなたもエンジニアを目指してみませんか?

いきなり入会するのはちょっと不安…

そんな方は、まずは毎月400名以上が受講している無料体験レッスンにてコンサルタントにプログラミング学習の悩みや不安、仕事獲得方法、業界知識など相談してみてはいかがでしょうか?

業界随一のコンサルタントがお待ちしています。遠方の方でもオンラインで受講できるのでお気軽にご利用下さい。

まとめ

今回は「クラス=設計図」「インスタンス=設計図から作った実働するモノ」「メソッド=処理がまとめられたもの」としてご説明してきました。

オブジェクト指向の考え方を少し掘り下げて理解できたでしょうか。この記事があなたのプログラミング学習の助けになれば幸いです。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通して、プログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

cta_under_btn

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説