この記事では、誰でも理解できるようにオブジェクト指向という概念について丁寧に解説していくよ〜!
オブジェクト指向とは
オブジェクト指向(OOP:Object Oriented Programming)とは、ソフトウェア開発の手法の一つで処理が個々の部品として考えられ、これらの部品を組み合わせて一つのプログラムを作る開発手法のこと。
これは、システム開発の効率性を大いに向上させるための一般的な考え方で、多数のプログラミング言語で採用されています。
抽象的なので、理解するのが難しいと思うから、図で紹介するよ!
えろ勉のお友達のパイソン琴里を例に見てみましょう!
共通機能は、パイソン琴里なら必ず持っている機能、部品のことを指してます!
オブジェクト指向の特徴は、それぞれのパーツごとでカスタマイズして、外観には外観の機能、羽には羽の機能など部品ごとの独自の機能があり、それぞれをカスタマイズし組み合わせ1つのプログラムを完成させます!
両方私なんだけど、天使verと悪魔verが部品をカスタマイズして作れる!
これが「オブジェクト指向」の基本的な考え方です。
オブジェクト指向で使用される概念
オブジェクト指向型のプログラミング言語を利用する上で頻繁に出てくる概念を紹介します。
この概念を覚えれば、オブジェクト指向は完璧!
- オブジェクト
- クラス
- インスタンス
- プロパティ
- メソッド
それぞれ順番に見ていこう!
オブジェクト
「オブジェクト」は、文字通り「物体」や「対象」を意味します。
オブジェクト指向プログラミングの世界では、クラスやインスタンスといったものを一括りにして「オブジェクト」と呼ぶのよ!
キャラクター、アイテム、武器などゲーム内で実際に使うものがオブジェクト!
クラス
オブジェクト指向プログラミングにおける「クラス」は、オブジェクトを作り出すための設計図のようなものと考えると理解しやすいよ!
キャラクターやアイテムの設計図!
例:キャラクタークラス
・キャラクターの名前
・体力(HP)
・攻撃力
・防御力
このキャラクタークラスを使っていろんなキャラを作るの!
インスタンス
「クラス」は設計図を示すため、そのままでは利用できないから、オブジェクトとして活用するためには、メモリ上に設計図を基にした「実体」を生成する必要があります。その実体化したものを「インスタンス」と呼びます。
例えば、先ほどの「キャラクタークラス」でインスタンスを作ると
・パイソン琴里(悪魔ver):名前=パイソン琴里(悪魔ver)、HP=100、攻撃力=60、防御力=30
・パイソン琴里(天使ver):名前=パイソン琴里(天使ver)、HP=110、攻撃力=30、防御力=60
これでキャラ(実体)が生まれました!
先ほどの「キャラクタークラス」でインスタンスを作ると
例
・パイソン琴里(悪魔ver):名前=パイソン琴里(悪魔ver)、HP=100、攻撃力=60、防御力=30
・パイソン琴里(天使ver):名前=パイソン琴里(天使ver)、HP=110、攻撃力=30、防御力=60
これでキャラ(実体)が生まれました!
プロパティ
「プロパティ」とは、オブジェクトの特徴や状態のことでデータの一部だけを編集可能にする際に使う機能!
例えば、
<オブジェクト>パイソン琴里(悪魔ver)
名前:パイソン琴里(悪魔ver)
HP:100
攻撃力:60
防御力:30
ここから名前だけを取り出したり、HPだけを取り出すことができるの!!
パイソン琴里(悪魔ver)オブジェクト
名前:パイソン琴里(悪魔ver)
HP:100
攻撃力:60
防御力:30
ここから名前だけを取り出したり、HPだけを取り出すことができるの!!
メソッド
「メソッド」とは、ここまで例に出してきたキャラクターが「できること」や「行動」のこと。
・攻撃する
・回復する
・防御する
などRPGのコマンドのようなもの!
オブジェクト指向の三大機能
オブジェクト指向を理解する上で、とても大切な三大機能「継承」、「ポリモーフィズム(多態性)」、「カプセル化」の三つを利用することで便利で安全なプログラムを作ることができます。
これらの概念について詳しく見ていこ〜💞
- 継承
- 多能性
- カプセル化
継承
継承とは、既存のクラスの機能を引き継いで新しいクラスを作成すること!
この機能を活用することで、過去に作った部品を流用し、新しい部品を簡単に作れるため、先ほどの画像だと「悪魔」という部品があれば、攻撃ができる「スーパー悪魔」を簡単に開発することができる機能!
多態性
多能性とは、似ている2つの部品を「同じようなもの」とみなし、「いいかげん」に利用できる機能のこと!
例えば、先ほどの図でスライムとゴーレムと戦う時に厳密には、スライムとゴーレムは攻撃の仕方は微妙に異なるはずですが、違いを気にせず、どちらも同じようなものとみなし、「戦う」操作で攻撃ができる機能が、多能性!
カプセル化
カプセル化とは、属性や操作を、一部の相手からは利用禁止にする機能のこと!
現実世界では、剣がモンスターに「ねむれ」という指示を出すことはまずありえないので、「ねむれ」操作は、剣オブジェクトから呼べないようにしておいた方が安全だ!そういう時にカプセル化を使って、特定のオブジェクトからメソッドを呼び出せないように設定します。
オブジェクト指向が利用される言語
オブジェクト指向というプログラミングの考え方は、多くのプログラミング言語に取り入れられています。代表的な言語をいくつか紹介するよ〜!
Java | Javaはアプリケーション開発全般に対応した言語で、オブジェクト指向の教科書的存在とも言えるほど、その理念が深く取り入れられています |
PHP | PHPは主にウェブアプリケーションの裏側、いわゆるバックエンドの開発に使われます。ネットショッピングのようなECサイトや、ウェブサイト制作ツールのWordPressなどでよく使用されています。 |
Ruby | Rubyは日本人の技術者によって開発されたプログラミング言語で、特にウェブアプリケーション開発に利用されます。初心者にも扱いやすいシンプルな設計が特徴で、日本語の参考書や情報も豊富にあります。 |
JavaScript | JavaScriptはウェブアプリケーションの表側、フロントエンドの開発に使われ、ブラウザ上でウェブページに動きをつけるために欠かせない言語です。 |
Python | PythonはAI開発やデータ分析など、多岐に渡る分野で利用されます。オブジェクト指向言語ではありますが、コードが短くて読みやすいため、初心者にもおすすめの言語です。 |
Swift | SwiftはApple社が開発した言語で、iPhoneやMacなどのApple製品向けのソフトウェア開発に最適化されています。 |
R言語 | R言語は統計分析やデータ解析に特化した言語で、AIや機械学習の分野で注目されています。 |
C# | C#はMicrosoft社が開発した言語で、JavaとC言語の良さを融合させたような言語です。特に、ゲーム開発プラットフォームのUnityでよく使われています。 |
C++ | C++はC言語を元にオブジェクト指向などの機能を追加した言語で、C言語と互換性を持つことが特徴です。 |
VB.Net | VB.NETはMicrosoft社が開発した言語で、視覚的なフォームを使ったプログラミングが特徴的です。特に、Windows系のアプリケーション開発でよく使用されます。 |
以上がオブジェクト指向の考え方を取り入れたプログラミング言語のです!
これからエンジニアを目指す人は、自分が勉強する言語はオブジェクト指向が使えるのか見ておいてね!
オブジェクト指向のメリット
オブジェクト指向という概念は、多くのプログラミング言語に採用されています。しかし、なぜオブジェクト指向を採用することが重要なのでしょうか? それにはいくつかのメリットが関わっています。
- 効率的な開発ができる
- メンテナンスが簡単になる
効率的な開発ができる
オブジェクト指向プログラミングの一つの特徴は、それぞれの処理を「部品」として把握し、それを組み合わせてプログラムを作り上げるという考え方なので、一度作成した部品(処理)を何度も使用することが可能となります。これにより、新たなプログラムを一から作り上げる必要が減り、開発時間が大幅に削減されるの!
つまり、「全てを一から作る」のではなく、「既にある部品を使い回す」ことによって、効率的な開発が可能になるのが特徴なの🔥
イケメンを1回作っちゃえば、いろんな楽しみ方ができる!ムフフ…..
メンテナンスが容易に
また、オブジェクト指向のもう一つの大きなメリットは、プログラムのメンテナンスが簡単になること!
部品化された処理が複数の場所で利用されている場合、その部品に問題が生じたときや改善の必要があるときは、その部品自体を修正すればよいのです。その結果、その部品が使われている全ての箇所に修正が適用され、修正漏れを防ぐことができちゃうの!
このように、全体のメンテナンス性が向上し、持続的な品質改善ができるのも特徴!!
イケメンの性癖が合わなかったらその都度わたしに合わせるために部分修正できるなんて💞
オブジェクト指向のデメリット
オブジェクト指向には明確な欠点と言えるものは存在しません。しかし、その概念を把握するのには一定の時間とエネルギーが必要となることが、一部の人々にとってはデメリットと捉えられるかもしれません。
この記事のようにゲームに例えて考えながら使っていこう!!
オブジェクト指向に関するITパスポート試験の過去問!
Q:クラスや継承という概念を利用して,ソフトウェアを部品化したり再利用することで,ソフトウェア開発の生産性向上を図る手法として,適切なものはどれか。
ア:クラスや継承という概念を利用して,ソフトウェアを部品化したり再利用することで,ソフトウェア開発の生産性向上を図る手法として,適切なものはどれか。
正解:ア
イ:構造化
ウ:プロセス中心アプローチ
エ:プロトタイピング
正解は『オブジェクト指向』
オブジェクト指向では「クラス」や「継承」というやり方を使って、プログラムの一部をまた別の場所でも使えるようにするよ。
これによって、プログラムを作るのが早くなったり、簡単になるの!
補足:オブジェクト指向は、Javaというプログラミング言語が採用していて有名
エンジニアが集まっていたコーヒーショップにJavaコーヒーというメニューがあったのがJavaの名前の由来らしいよ
「構造化」プログラムを作るときに、分かりやすく整理する方法。この考えを発展させたのがオブジェクト指向
「プロセス中心アプローチ」普段の業務がどのように流れているかに注目して、システムを設計していく考え方
「プロトタイピング」アイディアを試すためにシステムの試作品を作ってみること
ITパスポート試験をスマホで手軽に勉強!
「えろ勉」も戦略的に開発&運営しております。この記事が勉強になった!ためになったよ〜って思ったら、なんかアクションをお願い!!「えろの力で勉強するゲーム:えろ勉」
オブジェクト指向を使って大規模開発を乗りこなそう!
わからなかったらゲームに例えて考えてね💞