プログラミングは基本的にはRしかやったことない私ですが、
「そうだ、ゲームを作ろう」
と思い立ち、今日からC#を勉強してみることにしました!!
とりあえず、Rはプログラミング言語的には最弱(?)らしいので、未経験同然ってことですが、何やら調べてみたところ、
オブジェクト指向プログラミング
とやらを理解することが第一ステップのようなので、それについて調べた範囲でまとめてみました~。
オブジェクト指向プログラミングとは?
プログラミングをする動機と言えば「データ解析を行いたい」「ゲームを作りたい」「アプリを作りたい」等々あると思いますが、個人的にデータ解析を行うだけなら、プログラムは大した規模にはなりませんし、修正やアプデをする必要もそんなにありません。なので、コーディングの時点で整理をしなくても良いし、使いまわす関数も高々知れてるわけですが、ゲームやアプリを作ったり、大きなシステムを管理したりといった話になってくると、だらだらコードを書いてたら乱雑に並んだプログラムが出来上がり、1個何かを修正したりアプデしたりしようとすると、そのプログラムの整合性を保つために色々な個所を修正する必要が生じます。
そこで、オブジェクト指向プログラミングが登場してくるわけです。
オブジェクト指向プログラミングを適切に行うと、修正等の変更が少なく済み、スムーズにシステムを運営することが出来るとのことでした。
オブジェクト指向プログラミングのイメージ
どうやら、クラスという名前の設計図を先に書いてしまって、その設計図であるクラスを元にしてオブジェクトという便利グッズを大量に作成する。作成したオブジェクトを組み合わせて大規模なプログラムを作り上げようという方法がオブジェクト指向プログラミングのようです。
例えば、RPGゲームのモブキャラなんかを思い出してもらうとわかりやすいかもしれません。
RPGゲームの道中に同じところをひたすらグルグル回り続けるモブのおじさんっていっぱいいますよね。
そして話しかけたらこんなことを言うわけです。
「きのみを与えるとHPが少し回復するぞ。」
このおじさんの元になっている設計図(クラス)を考えてみます。
1つのゲーム中に同じ顔なんだけども、セリフだけ違うモブのおじさんっていっぱい出てきますよね。つまり、セリフの中身はおじさん毎に変えたいわけです。一方どのおじさんであっても、要は「主人公が話しかけるとセリフを言う」「同じ場所を同じ間隔でグルグル回る」のは変わらないわけです。つまりこれは設計図として統一した方がスッキリします。
そこで クラス「おじさん」 は次のようになります。
・セリフに関する文字列を覚えさせることが出来る
・ある間隔で動く
・主人公が話しかけるとセリフを言う
そして作成したクラス「おじさん」を使ってオブジェクト「おじさん1」「おじさん2」「おじさん3」を作ります。
おじさん1,おじさん2,おじさん3にはそれぞれ異なる、具体的なセリフに該当する文字列を与えてやります。
これでクラス「おじさん」に基づいたオブジェクトを作ることが出来ました。
これがオブジェクト指向プログラミングです。
オブジェクト指向プログラミングのメリット・デメリット
イメージはわかったけど、クラス「おじさん」を作ることに何の意味があるんだ、別にいきなり「おじさん1」,...「おじさん3」を作ってしまえば良いじゃないか。そんな気もしてくるわけですが、このクラスからプログラムを作っていくのにはいくつかの理由があります。
具体例1
例えば、「おじさん」達を日付が月曜日の時だけきのみをプレゼントしてくれる「おじさん」に書き換えたいとします。
オブジェクト指向プログラミングを行っていれば、クラス「おじさん」に月曜日だけきのみをくれるという動きを加えてやるだけで全ての「おじさん」に適用されます。しかし、クラス「おじさん」が無いと、おじさん一人一人にきのみを与えるという動きを加えなければいけなくなります。これは非常に面倒くさいし、そもそも広大なプログラムの中の複数のおじさんを発見するのは大変です。
具体例2
今度は「おじさん」を5人に増やしたいとします。この時もオブジェクト指向プログラミングを行っていれば、クラス「おじさん」を元にオブジェクトのおじさん4,5を増やしてやるだけなので簡単です。
具体例3
チームでプログラムを作っているとすると、別の人に引き継ぎをする場面も出てくるかもしれません。そうすると整理されていないプログラムは最悪です。引き継いだ人がどこをどういじると整合性が崩れるか訳が分からない状態になります。また、引き継いだ人がプログラムを理解するにあたって、クラス「おじさん」が無いとおじさん1~おじさん5まで一つ一つ理解する必要がありますが、クラス「おじさん」さえ設定していれば、クラスを確認するだけでおじさんの性質が分かります。
メリット
つまり、次のようなメリットがあります
・変更が容易
・追加も容易
・引継ぎも容易