【10分でわかる】ポケモンで例える「オブジェクト指向」講座

テックキャンプのプログラミング塾
1 Mar 202412:29

Summary

TLDRこの動画では、オブジェクト指向プログラミングをポケモンの例を使って解説しています。初めにオブジェクト指向の基本概念と、それをプログラミングにおいてどのように活用するかを説明し、次に具体的なポケモンの例を通じて、カプセル化、継承、ポリモーフィズムの3大要素を紹介しています。また、効率的なプログラミングの重要性と、オブジェクト指向の考え方がどのように役立つかを説明しています。最後に、プログラミング学習のための特典情報も提供しています。

Takeaways

  • 😀 オブジェクト思考とは効率的にプログラムを作るための考え方
  • 👍 プログラムをパーツ(オブジェクト)で考えることがポイント
  • 💡 オブジェクトはデータと処理を1つにカプセル化
  • 📝 オブジェクト同士はメッセージ(メソッド)でやり取り
  • 🔎オブジェクト思考の3大要素はカプセル化、継承、ポリモーフィズム
  • 🤔 ポケモンでいうクラスはピカチュウなどの種族の定義
  • 😮 ポケモンでいうインスタンスは個々のピカチュウなど実体
  • 👍 ピカチュウからライチュウへの進化が継承の例
  • 📝 戦うメソッドの結果がポケモンごとに違うのがポリモーフィズム
  • ❤️ オブジェクト思考の概念を掴むことが大切、コーディングを通じて徐々に身についていく

Q & A

  • オブジェクト思考とはどのようなプログラミングの考え方ですか?

    -オブジェクト思考とは、プログラムをパーツ(オブジェクト)に分割して考えることで、効率的にプログラムを作成する考え方です。

  • オブジェクト思考の3大要素とは何ですか?

    -オブジェクト思考の3大要素は、カプセル化、継承、ポリモーフィズムです。データを隠蔽したり、クラスの特徴を継承したり、異なるクラスでも同じコマンドを使えるようにすることができます。

  • クラスとインスタンスの違いを教えてください。

    -クラスは設計図のようなもので、オブジェクトの定義です。インスタンスはその定義から実際に作られた個々のオブジェクトのことです。クラスが型でインスタンスが実際のオブジェクト、というイメージです。

  • なぜオブジェクト思考が必要なのでしょうか?

    -オブジェクト思考を使うことで、プログラムの効率性や可読性が高まります。また拡張性や再利用性にも優れているため、大規模なシステム開発に適しています。

  • オブジェクト思考では直接データを変更することはできないのでしょうか?

    -直接データの変更はできません。オブジェクトが持つメソッドを呼び出すことで、カプセル化されたデータの変更を実現します。外から内部状態を直接変えることはできません。

  • ポリモーフィズムとはどのような特徴なのでしょうか?

    -ポリモーフィズムとは、異なるクラスのオブジェクトでも同じメッセージ(メソッド呼び出し)に対してそれぞれ適切な処理結果を返す機能のことです。クラスごとの実装の違いを吸収できるため、柔軟な設計ができます。

  • オブジェクト思考を理解するにはどうしたらいいですか?

    -実際にプログラミングを通じてオブジェクト指向のメリットを体感することが大切です。基本概念の理解と合わせて、開発現場での活用シーンをイメージしながら学習していくことをおすすめします。

  • オブジェクト思考以外にプログラミングで大切な概念は何がありますか?

    -その他にも抽象化、カプセル化、モジュール化などの概念が重要です。要件定義やアーキテクチャ設計などの上流工程も欠かせません。オブジェクト指向はプログラミング全体の一部です。

  • 初心者はまずオブジェクト思考のどの部分を理解すべきでしょうか?

    -まずはクラスとインスタンスの違い、オブジェクトのカプセル化といった基本的な部分の理解から始めることをおすすめします。抽象的過ぎないレベルから着実に理解を深めていきましょう。

  • オブジェクト思考を使った設計手法にはどのようなものがありますか?

    -代表的な設計手法としてUML(ユースケース図、クラス図など)を用いたモデリング、DDD(ドメイン駆動設計)などがあげられます。問題域の分析とモデル化に適しています。

Outlines

00:00

💡 オブジェクト思考とは

オブジェクト思考はプログラムを書くときの考え方です。プログラミングには文法はありますが、書き方のルールはありません。効率的にプログラムを作るための考え方として、オブジェクト思考が生まれました。

05:03

🍳 オブジェクト思考の基本的な考え方

オブジェクト思考では、まずプログラムをパーツ(オブジェクト)で考えます。パーツを組み合わせてプログラムを作っていきます。パーツの中身のコードを読まなくても、パーツの役割が分かればプログラムを組むことができます。これがオブジェクト思考の基本的な考え方です。

10:05

🎓 オブジェクト思考の3大要素

オブジェクト思考には、カプセル化、継承、ポリモーフィズムの3大要素があります。カプセル化はデータを直接見えない状態にすること、継承はクラスの特徴を引き継ぐこと、ポリモーフィズムは違うクラスで同じコマンドを使えるようにすることです。これらを活用することで、効率的なプログラムを書くことができます。

Mindmap

Keywords

💡オブジェクト思考

プログラムを書く際の考え方のことで、プログラムを効率的に作るために、オブジェクト(部品)に分割して考える手法です。ビデオでは、オブジェクト思考の特徴として、カプセル化、継承、ポリモーフィズムの3つをあげています。

💡カプセル化

オブジェクトの中にデータを隠すことです。直接データを見たり変更したりできないようにして、オブジェクトが持つコマンドを通じてのみ処理をするようにすることで、データを保護します。

💡継承

既存のオブジェクトの特徴や機能を引き継いで、新しいオブジェクトを作ることです。例えば、車オブジェクトからバイクやバスのオブジェクトを作るようなイメージです。

💡ポリモーフィズム

異なるオブジェクトでも同じコマンドを共有できることです。戦うコマンドを例にあげていますが、ポケモンごとに戦うコマンドの中身が異なる処理になっているという概念です。

💡クラス

オブジェクトの設計図のようなもので、オブジェクトの共通の定義を示します。ピカチュウのクラスは、すべてのピカチュウインスタンスが共通して持つ性質を定義しています。

💡インスタンス

個々の実体のことです。クラスから実際に作られたオブジェクトのことで、サトシのピカチュウやヒシのピカチュウなどがインスタンスです。

💡メソッド

オブジェクトが持つ機能や処理のことです。攻撃する、進化するなどのコマンドがメソッドに相当します。

💡パラメーター

オブジェクトの個々の定義されたデータのことです。ポケモンのレベルや攻撃力などがパラメーターです。

💡コマンド

オブジェクトに対して処理を指示することです。攻撃する、進化するなどの行為がコマンドです。ユーザーが利用するインターフェースとしての側面があります。

💡効率的

プログラム構造が分かりやすく保守しやすいことです。オブジェクト思考ではコードの再利用性が高く、機能追加などがしやすいため、効率が良いです。

Highlights

オブジェクト思考とはプログラムを書く時の考え方

効率的にプログラムを作る方法で書きたい

オブジェクト思考はプログラムをまずパーツで考える

オブジェクト思考の3大要素を説明

カプセル化についての説明

継承についての説明

ポリモーフィズムについての説明

オブジェクト思考を理解するには繰り返しの気づきが必要

オブジェクト思考以外にも様々な概念の理解が必要

Webアプリ面接対策100本ノックを紹介

LINEから特典を受け取る方法を紹介

特典は変更や終了の可能性があるため早めに受け取る

チャンネル登録高評価をお願い

オブジェクト思考で効率的にプログラムを書ける

オブジェクト思考の具体的なプログラムの作り方を後日紹介

Transcripts

play00:00

テックキャンプのしぼです今回は

play00:02

オブジェクト思考をポケモンで例えながら

play00:05

説明をしますなおこの動画の後半では

play00:08

プログラミングを勉強しているあなたにお

play00:10

すめの特典も用意しています是非最後まで

play00:14

ご覧くださいまずオブジェクト思考という

play00:17

のはプログラムを書く時の考え方です

play00:20

プログラミングに文法はありますが書き方

play00:23

のルールはないですま極論動くのであれば

play00:26

どんな書き方をしてもいいんですまでも

play00:29

どうせなら効率的にプログラムを作る方法

play00:32

で書きたいですよね例えばサッカーを考え

play00:35

てみましょう素人で集まって遊びで

play00:38

サッカーをする時にはフォーメーション

play00:40

なんて気にしないですもうとにかくゴール

play00:43

をすればいいと思ってみんなプレイをし

play00:45

ますでもレベルが上がればそうはいきませ

play00:48

ん役割が与えられフォーメーションが決め

play00:52

られ戦い方をみんなで統一しますこれは

play00:55

効率的に勝つための考え方ですルールでは

play00:59

ありませんこれと同じものがオブジェクト

play01:02

思考なんですより効率的にプログラムを

play01:05

作るにはどうすればいいかを考えた結果

play01:08

生まれた考え方がオブジェクト思考です

play01:11

オブジェクト思考を理解するために簡単な

play01:14

小話をしましょう車を作ろうとする2人の

play01:17

技術者がいました佐藤さんは天才です佐藤

play01:21

さんは天才的な頭脳により独自の方法で0

play01:25

からAという車を作りました独自の方法で

play01:28

作ったので作りはめちゃですがとりあえず

play01:31

車としては動きますその後別のbという車

play01:35

を作ろうとなりましたAの車を参考にし

play01:38

たいのに作りはめちゃくちゃなのでまた1

play01:41

からBを作ることになってしまいました

play01:44

しかも全てを把握している佐藤さん以外は

play01:46

車を作れないので他に人を増やすことも

play01:49

できませんそのため佐藤さんの会社は成長

play01:52

せずに倒産してしまいます一方でもう1人

play01:56

の鈴木さんは効率的な方法を思いつきまし

play01:59

たそれが車を構成するパーツをまずは作る

play02:03

という方法ですエンジンブレーキハンドル

play02:07

Cとボディなどのパーツを先に作ったん

play02:10

ですそしてそれを組み合わせてCという車

play02:14

を作りましたその後にCとエンジンだけ

play02:17

変えたDという車やボディやシートを変え

play02:20

たEという車などを次々と生み出しました

play02:23

さらにはエンジンに特化した高橋さんを

play02:26

呼んでエンジンの改良を重ねたり美しい

play02:28

ボディが作れる田中さんを呼んで確信的な

play02:31

車を次々と生み出します結果鈴木さんの

play02:35

会社は大きく成長していきました鈴さんが

play02:38

行ったことがまさにオブジェクト思考です

play02:41

プログラミングはとにかく行動を変えて

play02:43

サービスを作ることもできますですがそれ

play02:46

だと全てのコドを理解している人でないと

play02:49

コドが書けませんしそういった人でもコド

play02:52

の改良はだんだん難しくなります

play02:55

オブジェクト思考ではプログラムをまず

play02:58

パーツで考えます車で言うところの

play03:00

エンジンやブレーキボディですねで

play03:03

それぞれのパーツを作って組み合わせます

play03:06

ボディを作る人はエンジンやブレーキの

play03:09

詳細な仕組みまでは知らなくてもいいです

play03:12

あくまでもエンジンにできることや大きさ

play03:14

など概要を知っていればボディは作れます

play03:18

同じようにコドをパーツで考えることで

play03:21

それぞれのパーツの中身のコードを読ま

play03:23

なくてもパーツの役割が分かっていれば

play03:26

行動を書くことができますしかも

play03:28

組み合わせもしやすいです改善する時も

play03:31

パーツごとにアップデートをしたり今ある

play03:33

パーツを元に新しいパーツを作ればいい

play03:36

ですこれがオブジェクト思考です

play03:38

プログラミングではこうしたパーツを物と

play03:41

いう単位でくって物を意味する

play03:44

オブジェクトで考えることをオブジェクト

play03:46

思考と呼ぶことにしましたもと言いますが

play03:50

実際には人間やSNSの投稿なんかも

play03:53

プログラミングで表現するオブジェクトに

play03:55

なりますので物理的なものだけではない

play03:58

ことに注意しましょう

play04:00

それでは具体的な例をポケモンのゲームを

play04:03

使って説明していきますポケモンという

play04:06

モンスターを育てて戦ったり冒険をする

play04:08

ゲームです代表的なポケモンはピカチュウ

play04:11

ですねポケモンには1匹ずつレベルや攻撃

play04:15

力技などが決まっています人間のように

play04:18

ポケモンにも個性があります同じ

play04:20

ピカチュウでもサトシのピカチュウとヒシ

play04:23

のピカチュウはパラメーターが違うんです

play04:25

ねゲームに出てくるあらゆるピカチュウを

play04:28

全て1から作るのは大変ですオブジェクト

play04:32

思考ではまずピカチュウ自体を定義します

play04:35

ピカチュウというのはこんな特徴があって

play04:38

こんな技が覚えられるという全ての

play04:41

ピカチュウに共通する部分をプログラムで

play04:43

定義するんですねこれはあくまでも定義

play04:46

ですまいわば設計図のようなものですここ

play04:50

から具体的なサトシのピカチュウやヒシの

play04:53

ピカチュウを作っていきますピカチュウ

play04:55

共通の特徴を持った上で細かいレベルや

play04:58

攻撃力技性格はそれぞれのピカチュウごと

play05:02

に異なりますこれが個性ですねでも

play05:05

ピカチュウである以上は絶対に電気タイプ

play05:08

ですし見た目も一緒ですピカチュウの定義

play05:11

のことをクラスサトシやヒシのピカチュウ

play05:14

のような実際に存在しているピカチュウを

play05:17

インスタンスと言いますイメージとしては

play05:20

焼きの型がクラスですあくまでも型なので

play05:24

それは焼きそのものではありませんこの型

play05:28

から作った実際の焼きがインスタンスです

play05:31

個々のインスタンスは焼き加減に微妙に

play05:34

違いがあるなどの個性がありますまた中身

play05:37

の具材は自由に変えられますまずは型を

play05:40

用意してから具体的なものを作っていくと

play05:43

いうのがオブジェクト思考の基本的な考え

play05:46

方ですまずは初心者はこれだけでも覚えて

play05:49

くださいではここからオブジェクト思考の

play05:53

3大要素と言われる特徴を説明していき

play05:55

ますこの3大要素は少しややこしいです

play05:58

ですのであくまでも大枠のイメージを掴ん

play06:01

でいただければと思いますまずはカプセル

play06:04

化ですポケモンでは技を出して攻撃をし

play06:08

ますすると相手のHPが減りますですが

play06:12

相手のポケモンのHPや防御力の具体的な

play06:15

数値は分かりませんこのようにデータを

play06:18

直接見えない状態にすることをカプセルに

play06:21

入れて隠すイメージでカプセルかと言い

play06:24

ます具体的にはプログラムにおいて物の中

play06:27

にデータを隠していますピカチュウの中に

play06:30

はHPや攻撃力それ以外にもどの

play06:33

プレイヤーにも見えない隠れたデータが

play06:35

入っていますま例えば捕まえやすさや夏

play06:38

気動などですカプセル化をすることで直接

play06:41

データを書き換えられないようにしたり

play06:44

見えてはいけないデータを隠すことが

play06:46

できるようになりますではどうやってHP

play06:49

を変化させるのかと言うと攻撃するのよう

play06:52

なコマンドを通じてHPを変化させるん

play06:55

です具体的にはピカチュウが持っている

play06:57

攻撃コマンドを実行しますすると

play07:00

ピカチュウの綿と攻撃力あとは攻撃する

play07:03

相手の防御力を見てどれだけHPを減らす

play07:07

のかを処理しますこの処理の詳細は分から

play07:09

なくてもプレイヤーは攻撃コマンドを選択

play07:12

すれば相手のポケモンのHPを減らすこと

play07:15

ができますこのようにオブジェクト思考で

play07:17

は直接データを書き換えずにオブジェクト

play07:20

が持っているコマンドを使って処理をする

play07:23

んですねちなみにこのコマンドをメソッド

play07:26

と呼んだりしますオブジェクトの中で複雑

play07:28

な計算がされているんですが使う側はその

play07:31

中身を知らなくても攻撃するのような

play07:34

コマンドを使えば望んでいる処理を行う

play07:36

ことができますプログラミングに置き換え

play07:39

て考えてみます例えばログイン機能をA

play07:42

さんが作ったとしましょうこのAさんが

play07:45

書いたログイン機能をBさんが使うには

play07:48

単にログインというコマンドを使えばいい

play07:51

だけなんですログイン機能のコードを全て

play07:54

読んで理解する必要はありませんこのよう

play07:56

にコードの詳しい中身を見なくても

play07:59

コマンドで何ができるかさえ分かっていれ

play08:01

ばプログラムを組むことができるんですね

play08:04

全ての行動を読むのは大変なので非常に

play08:07

効率が上がりますでは次の特徴である継承

play08:10

を説明しますポケモンは進化をします

play08:14

ピカチュウであればより強いライチュに

play08:16

進化しますねこの時ライチュはピカチュウ

play08:19

の特徴を引き継げますライチュは

play08:22

ピカチュウと同じで電気タイプですし

play08:24

ピカチュウが使える技をライチュも使え

play08:27

ますその上でライチュはピカチュウに使え

play08:30

なかった新しい技も使えるようになるん

play08:32

ですこのようにクラスの特徴を引き継いで

play08:35

新しいクラスを作ることを継承と言います

play08:39

この継承はプログラミングにおいて本当に

play08:41

よく使います例えば車というクラスを作り

play08:44

ます車のクラスにはタイヤやハンドルと

play08:47

いった特徴やアクセルを踏むといった

play08:50

コマンドが用意されていますそしてこの車

play08:53

クラスを元にバイクやバスといった新しい

play08:56

クラスを作りますこれらの新しいクラスは

play09:00

車クラスの特徴を引き継いでいますその上

play09:02

でバイクはタイヤが2つであったりバスは

play09:05

大人数が乗れるといった新しい特徴を追加

play09:08

するんですこうしたクラスの継承は

play09:11

オブジェクト思考における重要な特徴です

play09:15

最後の特徴がポリモーフィズムです

play09:17

ポケモンにはピカチュウ以外にも様々な

play09:20

モンスターがいますこれらは別々のクラス

play09:23

インスタンスではあるんですが共通して

play09:25

できることがあります例えば戦うという

play09:28

コマンドこれはポケモンであれば全員が

play09:31

できるコマンドですですが実際に戦うと

play09:34

いうコマンドを支持した結果出てくる技は

play09:37

ポケモンによって違います例えば

play09:40

メガリザードンYは火炎放射

play09:42

メガカメックスはハイドロポンプ

play09:44

メガフシギバナはソーラービームのように

play09:47

それぞれのポケモンが違う技を出すんです

play09:49

ねですがコマンドは全て戦うで共通になっ

play09:53

ていますこれがポリモーフィズムです

play09:56

ポリモーフィズムがないとポケモンごとに

play09:59

プログラムで判定して技を選ばないといけ

play10:01

ませんこのポケモンがメガリザードンYの

play10:04

時は火炎放射メガカメックスの時は

play10:07

ハイドロポンプのような形ですもう今や

play10:10

ポケモンは1000匹近くいるので戦通り

play10:13

の確認をしないといけませんでも

play10:15

ポリモーフィズムがあれば戦うという

play10:18

コマンドをポケモンに支持するだけでその

play10:20

ポケモンの持っている技が自動的に選ば

play10:23

れるようになりますポリモーフィズムを

play10:25

活用すれば違うクラスであっても同じ

play10:27

コマンドを使えるようになるのでコードが

play10:30

シンプルで分かりやすくなりますはいと

play10:33

いうことでオブジェクト思考ポケモンを

play10:35

使って例えてきましたオブジェクト思考の

play10:38

考え方を活用することによって単にコード

play10:41

を上から順番に書いていくよりも効率的に

play10:43

プログラムを書くことができます今の段階

play10:46

ではカプセル化継承ポリモーフィズムが

play10:50

どうして必要なのかどこで使うのかを理解

play10:53

しきれないかもしれませんでもそれが

play10:55

当たり前ですプログラミングをしている中

play10:58

でなんか効率が悪いなもしかしてこれが

play11:01

オブジェクト思考なのかという気づきが

play11:04

生まれてきますこうした気づきを繰り返し

play11:07

ながらオブジェクト思考の考え方は身に

play11:09

ついていくんですですがこの気づきを得る

play11:12

ためにもオブジェクト思考へのイメージを

play11:15

持っておく必要がありますそのために今回

play11:17

はポケモンを使って説明をしていきました

play11:20

今後はオブジェクト思考での具体的な

play11:22

プログラムの作り方も紹介していく予定な

play11:25

ので興味のある方は是非チャンネル登録を

play11:27

お願いしますまたプログラミングでは

play11:30

オブジェクト思考以外にも様々な概念の

play11:33

理解が必要になりますそうした学習に

play11:36

ぴったりの特典をご用意しましたそれが

play11:39

こちらのWebアプリ面接対策100本

play11:42

ノックですwebサービス開発における

play11:45

問題が100問ありAIと対話形式で理解

play11:48

度をチェックできますアウトプットをする

play11:50

ことで自分の苦手な分野が分かったり理解

play11:53

が深まるアプリになっていますこちらの

play11:55

アプリは概要欄の1番上のLINEから

play11:58

受け取ることができますこの特典以外にも

play12:01

ここのの特典があり全部で10個の特典が

play12:04

無料でもらえますこちらの特典ですが途中

play12:07

で変えたり終了する可能性があるため興味

play12:10

のある方は今のうちに受け取っておくと

play12:12

いいかと思いますこの動画が少しでも参考

play12:15

になったという方はチャンネル登録高評価

play12:17

を是非お願いします最後までご視聴

play12:20

ありがとうございまし

play12:27

たY

Rate This

5.0 / 5 (0 votes)

Do you need a summary in English?