オブジェクト指向とは?例を使ってわかりやすく解説!
IT業界を本音で語る「ユニゾンキャリア編集部」の真心です。
本記事のトピックスはこちら!
- ・オブジェクト指向とは?
- ・オブジェクト指向で使われるワードの説明
- ・オブジェクト指向のメリットとデメリット
オブジェクト指向について学びたいけど「本で読んでも、ネットで調べてもわかりにくい!」と感じ躓いてしまう方は多いです。
そんな方にオブジェクト指向を扱うメリットから魅力まで細かくお伝えします。
事前に読みたい⇒【職種・レベル別】ITエンジニアにおすすめの勉強法!本・サイト・アプリを徹底比較&紹介|就職・転職者職業ガイド
目次
1.オブジェクト指向とは
「オブジェクト指向」とは、ソフトウェア開発の考え方のひとつで「処理を部品化して、部品を組み合わせることで1つのプログラムを作る考え方」のことを指します。
人がシステム開発を効率的に行うために、多くの言語で取り入れられている概念です。
オブジェクト指向は、車の例にして表現されることが多くあります。車の部品を個々に作っておけば、色んな車に転用できますよね?
各車に必要な共通の機能は、同じ機能を使って作成し、各車に独自に備わっている機能を独自に作りこんで実装する。
これをプログラムに落とし込んだ考え方が「オブジェクト指向」なのです。
ユニゾンキャリアではオブジェクト指向を研修でしっかりと学べる企業を紹介しています。
気になる方は、下記から無料相談をお試しください。
\Google口コミ「★4.8」の安心サポート/ ※強引な大量応募・大量面接は一切なし!
2.オブジェクト指向で使われる概念
オブジェクト指向に触れていると、以下のワードが頻出します。
それぞれ、オブジェクト指向型言語を扱うために必要なワードです。
オブジェクト指向でよく出る概念
- ・オブジェクト
- ・クラス
- ・インスタンス
- ・プロパティ
- ・メソッド
キーワード | 概要 |
オブジェクト |
オブジェクト指向プログラミングにおいては、クラスやインスタンスなどを抽象的に「オブジェクト」と呼んでいる。
|
クラス |
オブジェクト指向プログラミングにおいて、オブジェクトの設計図に相当するもの。
|
インスタンス |
クラスはそのまま使うことはできないため、オブジェクトとして使うためにメモリ上に「クラスの実体」を作る必要がある。
この実体を「インスタンス」と呼ぶ。 |
プロパティ | 不用意にデータを編集しないように、一部のデータだけを編集できるようにする機能。 |
メソッド |
「クラスの中で定義された関数」を指す。
関数には「単独で呼び出せるもの」と「クラスを通じて呼び出されるもの」があり、後者を”メソッド”と呼ぶ。 |
3.オブジェクト指向の三原則
オブジェクト指向の考え方をプログラムに落とし込むためには、「オブジェクト指向の三原則」を理解する必要があります。
オブジェクト指向の三原則
- ・継承
- ・ポリモーフィズム(多態性)
- ・カプセル化
3-1.継承
継承とは「既存のクラスの機能を受け継いだ新しいクラスを作ること」です。
簡単に言うと、「共通して使えるものを使いまわせるようにする機能」です。
継承元のクラスの呼び方
- ・親クラス
- ・スーパークラス
- ・基底クラス
継承して作ったクラスの呼び方
- ・子クラス
- ・サブクラス
- ・派生クラス
3-2.ポリモーフィズム(多態性)
ポリモーフィズムは簡単に言うと、「同じ名前の機能で、全く違う動きをする処理を実装できること」です。
ポリモーフィズムを実装するために、以下の2つの機能が使われています。
- ・オーバーライド
- ・オーバーロード
●オーバーライド
オーバーライドを簡単に説明すると、「継承で引き継いだメソッドを、同じ名前のまま別の処理として上書きできる機能」です。
オーバーライドを理解するためには、先ほどの「継承」を理解している必要があります。
その時に役に立つのが、「オーバーライド」という機能なのです。
例えば、「通常の敵」というクラスを継承して、「ボス敵」というクラスを新たに作りました。
この時、[Attack]という名前のまま、通常の敵とは違うボス敵用の[Attack]を作りたいですよね?
そこで使うのが「オーバーライド」の機能です。
こうすることで、ボス敵だけの強い攻撃が可能になります。
●オーバーロード
オーバーロードを簡単に説明すると、「同じ名前の関数(メソッド)を複数宣言できる機能」のことです。
オーバーロードの説明に入る前に、まず関数を使う際の用語についておさらいしましょう。
下記の画像では、「CalcIntという関数」に、「int型の変数numA」と「int型の変数numB」を引数として渡しています。
用語 | 概要 |
関数 |
関数とは、何か特定の動作を行うための機能を持った処理。
Excelでよく使われる「SUM」や「AVERAGE」も関数。 SUM関数であれば、「合計値を計算する機能」を持った関数。 |
引数 |
関数に渡す値のこと。
SUM関数であれば、SUM()の括弧内に指定しているものが引数。 |
データ型 | データ型とは、その名の通りデータの種類を意味する。 画像のint型は「整数型」と呼ばれ、このint型を持つ変数には整数を入れることができる。 |
変数 |
変数とは、数値や文字など、データを入れるための領域のこと。
プログラミングでは、この変数にデータを入れて処理を行う。 |
●オーバーロードの利点
関数は、引数のデータ型や引数の数が変わるごとに、それに対応した関数を作らなければなりません。
オーバーロードの機能を使わない場合、全ての関数に違う名前を付ける必要があります。
「同じような名前の関数が沢山出来てしまってわかりにくい…」
「関数が沢山できて、どの関数を使えばいいかわからない…」
こういう時、オーバーロードの機能を利用すると全部同じ名前の関数として定義できるのです。
オーバーロードの機能を使うと、似たような関数が沢山できてしまうことや、どの関数を使えばいいかわからないなんてことをなくせるのです。
「でも同じ名前の関数を沢山作ったら、プログラムがどれを使えばいいかわからなくなるのでは…?」と思いますよね。
これを「オーバーロード解決」と呼びます。
●オーバーロードの使用例
public class OverloadingExample {
// ①文字列を受け取り、そのまま表示するメソッド
public void printMessage(String message) {
System.out.println(message);
}
// ②数値を受け取り、その数値を含むメッセージを表示するメソッド
public void printMessage(int number) {
System.out.println(“数字は” + number + “です。”);
}
// ➂文字列と数値のを受け取り、組み合わせたメッセージを表示するメソッド
public void printMessage(String message, int number) {
System.out.println(message + “:” + number);
}
public static void main(String[] args) {
OverloadingExample example = new OverloadingExample();
// 文字列だけを渡す = ①を呼び出す
example.printMessage(“計算を開始します!”);
// 数値だけ渡す =②を呼び出す
example.printMessage(42);
// 文字列と数値を渡す = ➂を呼び出す
example.printMessage(“1~10を全部足すと”, 55);
}
}
上記のプログラムを実行すると、以下の結果が出力されます。
数字は42です。
1~10を全部足すと: 55
それぞれの呼び出しに対して、適切なメッセージが出力されたのがわかると思います。
これが「オーバーロード」の機能です。この機能を使うことによって、引数ごとに使う関数を意識する必要なく開発できます。
3-3.カプセル化
カプセル化とは、「オブジェクトのデータを、カプセルに入れて他の機能から隠ぺいすること」です。
外から見えたままだと、誰でも簡単にデータを編集出来てしまうためオブジェクトのデータをカプセルに入れて、外から見えないように隠ぺいするのです。
データが知らないところで勝手に編集されないよう、守るための機能が「カプセル化」なのです。
4.オブジェクト指向の言語の一覧
オブジェクト指向の考え方は、幅広い言語で取り入れられています。
ここでは、その一例をご紹介いたします。
言語 | 概要 |
Java |
アプリケーション開発などで幅広く使われている言語。
オブジェクト指向の代表例として挙げられることもあり、ノウハウ本が多く出版されている。 |
PHP |
主にWEBアプリケーションのバックトエンド開発で使われている言語。
ネットショップ等のECサイトや、WordPress等で用いられている。 |
Ruby |
日本の技術者が開発したプログラミング言語で、WEBアプリケーション開発等で用いられる。
シンプルで初心者にも学びやすく、日本語でのノウハウが多い言語。 |
JavaScript |
WEBアプリケーションのフロントエンド開発で使われている言語で、ブラウザ上でWebページに動きをつけるために用いられている。
|
Python |
人工知能をはじめとした幅広い分野で使われている言語。
コードが短くわかりやすいため初心者にも学びやすい言語。 |
Swift. |
Apple社が2014年に発表したプログラミング言語で、Apple製品向けソフトウェア開発に向いている言語。
|
R言語 |
統計分析など、データの解析を行うことに特化した言語。
人工知能や機械学習の普及に伴い、需要が増えている言語でもある。 |
C# | Microsoft社が開発した言語でC言語とJavaを元に作られており、どちらかといえばJavaに近いプログラミングが可能。 |
C++ |
C言語にオブジェクト指向の機能等を加え、改良した言語。
C言語を拡張した言語であるため、C言語と互換性があることが特徴。 |
VB.Net |
Microsoft社が開発した言語で、フォームを使ったプログラミングが特徴的。
Windows系アプリケーションで使用されることがある。 |
5.オブジェクト指向を扱うメリット
オブジェクト指向の考え方は様々な言語で取り入れられていますが、オブジェクト指向を意識することでどんなメリットがあるのでしょうか。
5-1.効率的に開発が行える
オブジェクト指向プログラミングでは、処理を部品化するという考え方でプログラミングを行います。
「全ての処理を1から作成していく」のではなく「使いまわせるところは使いまわす」ことで、効率的に開発を行えます。
5-2.メンテナンスがしやすい
オブジェクト指向では、使いまわせる処理は使いまわすようにプログラミングをしています。
修正漏れがなくなることから、メンテナンス性は高いと言えるでしょう。
6.オブジェクト指向を扱うデメリット
オブジェクト指向は理解するのに時間がかかるというのがデメリットとして挙げられるでしょう。
オブジェクト指向を完全に理解するためには、実際にプログラミングを行って徐々に理解していくのが一番の近道になります。
7.オブジェクト指向を勉強するのにおすすめな本
オブジェクト指向言語を学んでいく上で、参考になる本ピックアップしました。
今後オブジェクト指向を使った開発をしていきたい方は、是非参考にしてみてください!
●新わかりやすいJava オブジェクト指向徹底解説 第2版
出典:Amazon
オブジェクト指向を勉強するのにはこの一冊がいいでしょう。オブジェクト指向を勉強する上で難しい単語を、対話や図、プログラムを用いて丁寧に説明してくれています。
プログラミングを始めた方、オブジェクト指向を勉強して詰まってしまった方におすすめです!
●良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方
出典:Amazon
オブジェクト指向やプログラミングの勉強をした後、プログラマーが必ずぶつかる壁が以下の3つです。
- ・オブジェクト指向を使うって…この書き方で正しいのかな
- ・コードがわかりにくいって言われたけど、どう直せばいいのかわからない…
- ・プログラマーとして成長したい。良いコードを書くにはどうすればいいんだろう…
本書はそんな方に向けて、良いコードの書き方と悪いコードの書き方を比較しながら解説している本になります。
オブジェクト指向を使ったコードの例にも触れているので、正しいオブジェクト指向プログラミングを知りたい方におすすめの一冊です!
8.オブジェクト指向のご相談はユニゾンキャリアへ
オブジェクト指向を簡単に説明すると、「処理を部品化して、部品を組み合わせることで1つのプログラムを作る考え方」のことです。
また、本記事を通してもオブジェクト指向についてイマイチよく分からなかったという方も多くいるでしょう。
ユニゾンキャリアへご相談してもらえればオブジェクト指向に限らずITに関する不安や疑問などを丁寧に解消できます。
「すぐに相談してみるのは怖い」「ユニゾンキャリアで本当に解決できるの…?」とお考えの方は実際にユニゾンキャリアを利用してみた人の意見を見てみてください。
このようなことで
悩まれています。
簡単30秒
まずは気軽にWebで無料相談
こんにちは!
はじめに職歴をお聞かせください。
この記事の監修者
エンジニア
大学卒業後、新卒で不動産会社に就職。その後23歳で開発エンジニアにキャリアチェンジし、3年間大手Slerにて様々な開発に携わる。その後、インフラストラクチャー企業にて人材コンサルタントとして経験を積み、株式会社ユニゾン・テクノロジーを創業。現在の代表取締役