QiitaでAdventCalendarをするよって話
夏真っ盛りにQiitaでAdventCalendarをしますよって季節外れな企画が始動しました,
期間は8/12~9/12となりますので頑張っていきましょう.
まず初回を飾らせてもらいます,何を書くか1日考えたのですが,まだ初学者なもので書くことがあまり無いということで初学者が送る初学者のためのオブジェクト指向の記事でもタラタラと書いてみようかと思います.
では本題行くで
と,簡単な宣伝はおしまいにして本題に入っていきましょう.
まとめにソースファイルをあげているgitを載せているので参考にしてください.
初学者が送る初学者のためのオブジェクト指向講座
まずオブジェクト指向ってなんやねん!って方もいるかと思います.
私も2ヶ月ほど前までは実際にオブジェクト指向に触れたことはなかったのでそちら側の人間でしたので,私が一ヶ月ほどで培った知識のみで語らせていただきますのでご容赦をお願いします.
そしてこの記事ではオブジェクト指向言語のJavaを用いて**(Javaしか書けない)**記事を書いていきます.
だからオブジェクト指向ってなんやねん
オブジェクト指向はよくたい焼きの型とたい焼きに例えられます.
クラスをたい焼きの型,インスタンスをたい焼きと例えられています.
クラスという型に複製してインスタンスを生成するためそういう例えがされています.
しかしそんなありきたりの比喩は面白く無いと思うんですよ,ほならね,自分が例えてみろって話でしょ?
では例えてみましょう.....(3時間後)
オブジェクト指向とは....合体ロボです.でもただの合体ロボではありません,パーツをカスタマイズできる合体ロボです.そしてたい焼きの例のように比喩するとインスタンスが合体ロボのパーツでロボット工場がクラスとなります.
なぜパーツをカスタマイズできる合体ロボかというとオブジェクト指向プログラミングにおいてパーツ(クラス)は自分で作ることができます.しかし,たい焼きの型は通常自分で型を作ったりすることは無いかと思います.そしてMain.java(胴体)に色々なインスタンス(腕や脚)を合体させていきます.Javaには3つの大事な要素があります.これについて話していきます.
Javaの三大要素ってなんやねん
Javaの三大要素とは1.継承,2.ポリモーフィズム,3.カプセル化です.それらについて軽く話します.
1.継承
継承とはあるクラスを別のクラスに継承させることでサブクラス(子クラス,継承したクラス)からスーパークラス(親クラス,継承されたクラス)のメソッドや変数にアクセスすることができるというものです.
なぜ継承すると便利かというと,例えば図形のクラス(Figure)を作るとします.しかし長方形や三角形,円があり,長方形のクラス(Rectangle)と三角形のクラス(Triangle)と円のクラス(Circle)の各クラスは内容が似たようなものになります.例えば図形に色があり,半径や高さ,底辺があり面積を算出することができますが,それぞれで計算式が異なるため統一できないときにFigureをそれぞれ継承することで色などの共通の情報をいちいち記述するてまがなくなり再利用性が高まります.
そしてサブクラスでスーパークラスと同名のメソッドを定義することでメソッドをオーバーライドすることができます.オーバーライドすることで各サブクラスでの微妙な違いを埋めることができます.先ほど例にあげたようにRectangleとTriangleとCircleでは計算式が違います.しかしFigureでcalcAreaメソッドを定義し,各サブクラスでオーバーライドし計算式を同名メソッドで分けることが可能です.
2.ポリモーフィズム
ポリモーフィズムとは継承したサブクラスをスーパークラスとしてインスタンスを生成することができるというものです.
スーパークラスでインスタンスを生成することにどんなメリットがあるかというと,同じ型だから同じ配列やArrayListに格納することができます.
しかしメリットだけではありません.その代わりスーパークラスに無いメソッドを呼び出すことはできません.しかしスーパークラスにあるメソッドから呼び出すことは可能です.
なので,概形(汎用パーツ)を作りそれを継承し各キャラクター等に派生させて,メソッドをオーバーライドしてディティールを固め,スーパークラスでインスタンスを生成し,キャラクターを一つの配列にまとめるなど共通の方で色々な動作をすることができます.

カプセル化
カプセル化とはローカル変数をprivateで宣言し,セッターやゲッターと呼ばれるメソッドを用いてあたいの代入や取り出しを行うというものです.
なぜメソッドを使ってめんどくさく値に干渉するのかというと,ワンステップ踏んで値に干渉することで,意図せぬ代入などにより発生するエラーを未然に防ぐためです.
まとめ
まだまだオブジェクト指向は奥が深いですが,初学者が初学者におくるオブジェクト指向講座なので,今回はJavaの三大要素を解説してみました.もっとできる奴になったらもっとわかりやすい解説を描きたいなと思います.
git:https://github.com/kindainoob/Figure.git
最後の最後に
AdventCalendarとは別にワンナイト人狼を作ろうという記事を後々数記事に分けて描きますのでそっちもよろしくお願いします...