BLOG

【メソッド、クラス、引数】オブジェクト指向をまるっと学ぶ!

2021-10-08


このブログはロックシステムのYoutubeチャンネル「ロックシステムアカデミーCH」の文字起こしや使用したコードの解説等をしています。
是非動画本編もご覧ください!
よろしければチャンネル登録も宜しくお願い致します!




今回の動画ではオブジェクト指向について学んでいくぜ。


あ、聞いたことはあるけど、どんなものか分かんないや。これまで勉強したIf文やfor文と似たような感じ?


オブジェクト指向はプログラミングの文法より"考え方"に近いかな。今回の学習ではオブジェクト指向で使われる用語の基本解説と使い方、最後にメソッドを学習するよ。ここで挫折しちゃう人が多い学習範囲だから気合入れていくよー!


すなわち「モノ」に注目した考え方だよ。まず最初に、オブジェクト指向でプログラミングが出来ると2つのメリットがあるから紹介するね>



・綺麗なコードが書ける
プログラムの一つ一つを小さなグループに分け部品として考える事が出来るから、複雑なプログラムが減る。


・作業スピードが上がる
プログラムが部品化されている為、使いまわせたり、不具合が発生した時の問題箇所特定が速くなる。



ふむ、便利なことだけ分かったぞ!ちなみに何のためにオブジェクト指向を学習するの?


これから本格的な開発をし始めると、コードが長くなりすぎて開発者自身が把握しきれなくなる。という課題が生まれてくるんだ。そうならないために「人間が把握できるプログラムを実現するため」にオブジェクト指向が便利なんだ。

オブジェクト指向を分かりやすく表現してみる。


まず、ぼくたちの動画をオブジェクト指向で考えてみよう!こんな図で表現できるよ。


あくまで例だけど、僕たちの動画を1つのモノとして考えたとき様々な角度で見て色んな要素が集まって構成されてるのが分かるよね。色んな要素を組み合わせて1つのプログラムを作っていくことをオブジェクト指向だと今は考えておこう!


ん?良く見てみると、この動画の構成を役割や特徴ごとにグループ分けしてるだけか。


そんな感じ!今までの学習の中では必要なかったけど、大抵の場合プログラミングはオブジェクト指向に沿ってコードを書いていくことが多いんだ。 それでは実際にさっきの図を基に用語の解説や考え方をもっと見ていくよ。さっきはぼくたちをまとめて「モノ」として考えたけど今度はテムを「モノ」として考えてみるね!


「モノ」だと!失礼な奴め!


じゃあ、「モノ」という表現は悪いのでプログラミングらしく「クラス」と表現するよ。


「どんな奴」と「どう動ける」の部分なんだけどださいよね!なんか他にプログラミングらしい表現は無いの?


実際のプログラミングでは「どんな奴」の部分をプロパティ「どう動ける」の部分をメソッドというよ!


どんな性質なのかを表したのがプロパティ、どんなことができるのかを表したのがメソッドなんだね。


その通り!こうみるとオブジェクトというのはプロパティとメソッドをセットにしたもの。ということが分かったね。

メソッドの使い方


それではまず、メソッドに絞ってコードを書いていこうか。メソッドの使いかたを説明するよ。


メソッドって「どう動ける」の部分だったよね。「役割とか動作を一つの部品にする」のかなぁ。


その通り!それをコードで表現していくよ。学習開始画面をよく見て、実はこの部分をメソッドというよ


今までプログラムを実行・出力するためにMainメソッドをなんとなく使っていたよね! このメソッドは特殊なメソッドで、このMainメソッドは必ず1つプログラムに用意しないといけない決まりがあるんだ。 だからMainメソッドの名前を変更したらエラーになるよ。


じゃあ元に戻して、さっきの図を見ながらMainメソッドの下にテムのメソッドを増やしてみよう。

    class Program
    {
        static void Main()
        {
            //メインメソッド
        }
        static void Gakusyu()
        {
            //学習メソッド
        }
    }

それぞれのメソッドが完成したね。


あれ?でも、今のままでは何も出力されないね どこか間違ってる?


でも今は部品を作っただけだから何も出力されないんだ。実際にこのGakusyuメソッドを使うにはMainメソッドに出力するための宣言をしてあげよう!書き方はメソッド名に();をつけてあげるだけだよ。

    class Program
    {
        static void Main()
        {
            //メインメソッド
            Gakusyu();
        }
        static void Gakusyu()
        {
            //学習メソッド
            Console.WriteLine("プログラミングを学習する");
        }

これで出力っとこれで表示された!なるほど、それぞれ部品のメソッドを作った後は必ずMainメソッドにコードを書かなきゃいけないんだね。


今までは全てMainメソッドにコードを書いてきてたけどこれからは、メソッドを役割ごとに分けて考えていこうね


よーし・・メソッドが何か分かったぞ!

クラスについて学ぶ


次はこの考え方に慣れるために、例を変えてクラスを考えてみよう!例えば、みんなの身近なモノ本を使って概念を表現してみようか。




色んなお題で図にすると、オブジェクト指向にも慣れてきそうだね。


そうだね!ゲーム感覚で楽しそうだね、じゃあ、次はRPGの勇者をクラスにしてみようか。決まった答えはないから自由に作っていいよ。




上手く勇者クラスができたんじゃない?


じゃあプログラミングで勇者クラスを作ってRPG風画面を出力してみよう。完成したらこんな出力画面になるよ




さっきテムが作ってくれた図をそのままコードにするイメージだね。まず、勇者クラスを定義しよう。




OK どんなプログラミングコードを書くのー?


実は今までクラスを使ってプログラミングコードを書いてたんだ。よーく画面をみてごらん。
この範囲の部分をクラスというよ。メソッドも何となく使ってたけどクラスまで知らず知らずに使っていたんだね。




今回は勇者クラスを作りたいからクラスの部分をHeroクラスと定義しよう。クラスの名前は大文字から書いていくよ。


      class Hero
    {
        static void Main()
        {
            string name = "勇者";
            int mp = 50;
        }
    }


次はプロパティの部分を定義するのかな?

そうだね。今回は変数を使って定義していこう。この部分は色んな書き方があることを覚えておいてね!


変数を定義したら警告が出るけど、そのままでOKだよ。




エラーではないんだね。じゃあそのまま進んでいくよ


次にメソッドを作っていこう。「戦うメソッド」 「魔法メソッド」 「逃げるメソッド」 それぞれ作っていくね。


今回は勇者の動きを文字として出力するんだね。最後にこの3つのメソッドをMainに記述して・・っと


    class Hero
    {
        static void Main()
        {
            string name = "勇者";
            int mp = 50;
            Battle();
            Magic();
            Run();
        }
        static void Battle()
        {
            Console.WriteLine("勇者は攻撃した");
        }
        static void Magic()
        {
            Console.WriteLine("勇者は魔法を使った");
        }
        static void Run()
        {
            Console.WriteLine("上手く逃げれた");
        }
    }


おー!RPGの戦闘画面みたいになった




オブジェクト指向でクラスとメソッドを使って上手く出力できたね。じゃあ、この画面をだんだんパワーアップさせていこうか。もう一度プロパティの部分を確認してみよう、今警告が出ている部分だね。


今からここで定義した値を使って戦闘画面を盛り上げたいんだ。そのために"引数"を学習しよう。

引数を学ぼう


引数??引き算でもするってこと?


引数を一言でいうなら"プログラムやメソッドに渡す値"のことだよ。 まずは見ててね!実際にメソッドの中に値を渡してあげるよ。 "int mp" は"50"と同じ意味だね。このint mp、すなわち"50"という値をMagicメソッドの()の中にこうやって渡してあげると・・・


  class Hero
    {
        static void Main()
        {
            string name = "勇者";
            int mp = 50;
            Battle();
            Magic(mp);
            Run();
        }
        static void Battle()
        {
            Console.WriteLine("勇者は攻撃した");
        }
        static void Magic(int mp)
        {
            Console.WriteLine("勇者は魔法を使った MPが" + mp + "減った");
        }
        static void Run()
        {
            Console.WriteLine("上手く逃げれた");
        }
    }

出力画面


"勇者は魔法を使った。MPが50減った"という出力内容に変わったね!引数を使う時は、渡したい値をメソッドの隣にある()の中に入れて上げると使うことが出来るんだ。Mainで定義してるメソッドの()にも引数を入れるのを忘れないでね。


メソッドに渡す値が引数っていうんだね。 クラスの上に定義したプロパティを、下のメソッドに渡して出力するイメージだね


じゃあ、今回はここまで!次回は、勇者とモンスターをプログラミングで戦わせてみよう!


チャンネル登録よろしくお願いします!
ロックシステムアカデミー
大阪福島にあるプログラミングスクール「ロックシステムアカデミー」です!「プログラミング作って実践」をテーマに楽しく分かりやすいアプリ開発のレクチャー動画をアップしていきます! チャンネル登録よろしくお願いします! プログラミングスクール ▼「ロックシステムアカデミー」WEBサイト https://rocksystem.co.jp/academy/
https://www.youtube.com/channel/UC6JxNQ2QTX8Dl96V2MMNP8A

株式会社ロックシステム

「ブラック企業をやっつけろ!!」を企業理念にエンジニアが働きやすい環境をつきつめる大阪のシステム開発会社。2014年会社設立以来、残業時間ほぼゼロを達成し、高い従業員還元率でエンジニアファーストな会社としてIT業界に蔓延るブラックなイメージをホワイトに変えられる起爆剤となるべく日々活動中!絶賛エンジニア募集中。