オブジェクト指向を完全攻略:FE試験_合格への道
7分12秒 | 試験制度FE
基本情報技術者試験の頻出テーマを解説した動画コンテンツです。
トランスクリプト(字幕テキスト)
こんにちは。さあ、今日のテーマはですね、多くの人が「うっ」てなるあのオブジェクト指向です。 FE試験の、まあ大きな壁ですよね。でも大丈夫。この解説を見れば、その壁をどうやって乗り越えるか、そのコツがバッチリ掴めるはずです。 じゃあ早速行きましょうか。オブジェクト指向の勉強を始めると、もう絶対に出てきますよね。この話。 「クラスは金型で、インスタンスはたい焼き」ってやつ。まあ教科書とかにもよく載ってますし、クラスっていう設計図から、たい焼きっていう実体が作られるんですよみたいな説明。 一度は聞いたことがあるんじゃないでしょうか。でも正直な話、どうです?この説明で試験問題解けるようになりました? 多分多くの人が「うーん。言ってることはまあなんとなく。でもいざコードを目の前にすると全然ピンとこないんだよなあ」って感じてると思うんですよ。 なので、今日はそういうふわっとした話はもうやめにしましょう。ズバリ、試験に合格するためだけっていう視点で超実践的に解説していきますよ。 ここでね、ちょっと視点をガラッと変えてみましょう。皆さんは今日からプログラマーじゃありません。 そう、RPGゲームのデザイナーです。いいですか?ゲームデザイナーになったつもりで考えてみる。 実はこの視点こそが、あのわかりにくかったオブジェクト指向を試験で使える強力な武器に変えてくれるんです。 はい、見てください。まず左側。これが勇者クラス。つまり勇者の設計図ですね。 ここではまだ勇者っていうのはこういう能力を持ってて、こういうことができるんだよって決めてるだけ。だから、この設計図だけじゃゲームには出てこれないんです。 で、右側を見てください。ここでnewっていう、まあ魔法の呪文みたいなものを唱えるわけです。 そうすると初めて、HP100を持った勇者Aっていう具体的なキャラクター、つまりインスタンスがゲームの世界にポンと生まれるわけです。 そうなんです。もうね、はっきり言っちゃうと、FE試験がオブジェクト指向で本当に聞きたいことって、突き詰めればこれだけなんですよ。 今目の前にあるコードが、さっきの設計図について話してるのか、それとも実際に生まれたキャラクターについて話してるのか。 この違いがわかってれば、もう問題の半分以上は解けたも同然です。 じゃあ、このRPGの世界観をそのまま使って、試験によく出る3つの大事なコンセプト。 言うなれば冒険に欠かせない3つのスキルですね。これをマスターしていきましょう。 まず1つ目のスキルはカプセル化。これはですね、キャラクターのHPみたいな超大事なデータを守るための、まあ防御魔法みたいなものです。 想像してみてください。もしバグとかでいきなりHPがマイナスになったり、逆に9999になったりしたらゲームが壊れちゃいますよね。 そういうことが起きないようにデータを隠して、勝手にいじられないようにするんです。 まさに鍵のかかった宝箱。正しい鍵、つまり決められた方法じゃないと中身を絶対にいじれない、そういう仕組みです。 2つ目は継承です。これは開発をめちゃくちゃ楽にしてくれる、超便利なスキルなんですよ。 例えば、ベースになる勇者の設計図がありますよね。それを丸ごとコピーして、そこに魔法っていう能力だけをポンと追加する。 そうするだけであっという間に新しい職業、魔法戦士が作れちゃうんです。 剣の振り方とか防具の使い方みたいな勇者と共通の部分は、もう一回ゼロから作る必要がない。まさしく親から子へ能力が受け継がれる感じですね。 そして3つ目、これが多態性。まあポリモーフィズムとも言いますね。これがオブジェクト指向のいちばん面白いところかもしれません。 例えば、ゲームのコントローラーの攻撃ボタンって普通1つじゃないですか。 でもプレイヤーが操作しているのが戦士だったら剣を振るし、魔法使いだったら呪文を唱えますよね。 こんなふうに命令は攻撃っていう同じ1つなのに、キャラクターによって出てくるアクションが全然違う。この柔軟性、これが多態性なんです。 だから試験でプログラムのコードを読むときのコツはもうこれです。 あ、これ名前は同じメソッドだけど、呼び出しているやつが違うから動きも違うんだなーって気づくこと。 この「同じ名前、違う動き」っていうキーワードを頭に入れておくだけで、コードの流れがすごく追いやすくなりますよ。 さて理論はここまで。3つのスキル手に入れましたね。じゃあいよいよ実践です。 この知識を使って実際の試験問題みたいなやつを一緒に攻略していきましょう。準備はいいですか? はい。画面にFE試験でよく見るタイプのコードを出しました。まずClass Heroっていう部分で、勇者の設計図が定義されてます。 そしてその下のメインプログラムで、playerA = new Hero()ってありますね。 ここで設計図からplayerAっていう名前の一人のキャラクターが生まれてます。 で、最後にplayerA.takeDamage(10)。これはそのplayerAが10のダメージを受けたっていう場面ですね。 で、ここでね、多くの人が混乱するのが、設計図の中にあるthisっていう単語なんです。 this.HPって書いてあるけど、このthisっていったい誰のこと?って。 もしこのゲームにplayerAだけじゃなくてplayerBっていう別の勇者もいたら、どっちのHPが減るんでしょうか。ここがポイントです。 答えはもうはっきりしてます。playerA.takeDamage(10)っていうふうに、playerAがこの技を使っているわけですよね。 だからこの技が発動している間、thisっていうのはずっとplayerA自身のことを指してるんです。 なのでHPが減るのはplayerAだけ。playerBは全くの無傷です。 ね。このthisの正体さえわかってしまえば、オブジェクト指向の問題なんて、もうボーナスステージみたいなもんです。 お疲れ様でした。どうでしょう。これで皆さんもオブジェクト指向っていう新しい力を手に入れたんじゃないでしょうか。 じゃあ最後に、試験本番で絶対に忘れないように、大事なポイントをもう一度おさらいしておきましょう。 もうね、試験の直前はこのイメージだけを思い出してください。 まずクラスとインスタンスの違い。これは設計図とキャラクター。OKですね。 カプセル化は中身を守る、鍵のかかった宝箱。 継承は勇者が進化する魔法戦士。 で、多態性は同じ名前、違う動き。 そして一番大事なthis。これは常に命令を出したその本人。もうこれだけです。 そうなんです。オブジェクト指向って、決して丸暗記する科目じゃないんですよ。 今日やったみたいに、RPGのキャラクターとか、何か自分の中でこれだーって思えるイメージで一度しっかり理解しちゃえば、もう二度と忘れません。 そしてこの知識はね、ただ試験に受かるためだけじゃないんです。 皆さんがこれからプログラムの世界で何か新しいものを作り出すときの、ものすごくパワフルな設計図になります。 さあ設計図を手に入れた今、あなたなら何を作りますか? もし、もっと練習問題を解いて完璧にしたいって方は、ぜひweb-society.com/mediaも覗いてみてください。あなたの合格を心から応援しています。
このコンテンツは Web society で視聴・学習できます。