読書感想文:ソードアート・オンライン
去年(2014年)の春くらいの話。ネットでソードアート・オンラインというラノベタイトルをよく目にしていたため、どんなもんよと思い読んでみた。私は、剣と魔法が出てくるお話は大好物だ。またかわいい女の子が出てくるラブコメ要素も大好物だ。
魔法は無かったが、とにかく、私の趣味にバッチリはまった。そしてかわいい女の子とキャッハ、ウフフするのだから辛抱たまらん。
三つ子の魂百まで。昔から性格は変わらんのだなと。
幼い頃ドラゴンクエスト1に影響され、寝るときにRPGの世界に居る自分を妄想したりしていた。ただ毎回最初の街から出るところで寝てしまうため、その後どうなるかは今でも不明だ。
そのうちRPGゲームは3Dになり、キングスフィールドやシャドウタワー、オブリビオンなど、用意された世界を自由に探索できるゲームが出てきたりして、昔妄想した世界が再現されたような気がして熱くなったものだ。
私は、ドラゴンクエスト1に影響されたためか、ソロプレイに魅力を感じてしまう。過去にオンラインゲームをやったが、やはりソロプレイで十分楽しめてしまった。
ソードアート・オンラインはそんな私の性格にマッチしていたようで、ものすごく世界観にのめり込むことができた。
まず、背景としてバーチャル技術が向上した未来世界であり、ナーヴギアと呼ばれるゲーム機を頭に装着すると、ゲームの世界に精神をリンクさせて、あたかも現実のようにRPGの世界を体験することができる。もちろんバーチャル世界の中で5感も機能する。
主人公であるキリトは、ソードアート・オンラインの世界でソロプレイヤーとして有名な剣士である。最終的には一人ではなく仲間と攻略をするのだが、その途中までのソロプレイ時にストーリーなどがあったりとか。
なんか人気っぽいから読んでみたら、ここまで自分の趣味に合う要素が複数盛り込まれた話は久しぶりな気がするようなしないような。一気に7巻まで読んでしまった。
最近時間がなくて止まっているが、近いうち続きを読み始めようと思う。
オブジェクト指向について確認してみた
「オブジェクト指向」なんとなく分かっているつもりになっていないだろうか?
コードレベルでは扱えているけど、誰かにコードを使わずに説明できるだろうか?
私はなんとなくでやってきてしまった人間だ。説明しようとした途端あぅあぅしてしまう。
そこで、なんとなくに対して答え合わせをしてみた。
まずは、これまでの理解について少しだけ。
今から10年前、学生時代から何となく耳にする「オブジェクト指向」という言葉。当時授業でも習わないし、周りの友人は何それ?というような状況だった。学校ではC言語を習っていたが、C++に興味を持ってしまい、クラスなどを学習する過程でそれとなくオブジェクト指向なる考えかたを知り、なるほどモノね。というような独自の理解でプログラムを書いていた。
社会に出ても、これが「オブジェクト指向」です。というようなドキュメントもあるわけないし、教えてくれる人もいないし、何となく聞きかじりの知識で、プロジェクトのソースを見ながら、これがビジネスで使われるレベルのオブジェクト指向というやつなのかと思ってきた。
ただ、さすがに気持ち悪いので今さらオブジェクト指向の本を買って確認作業を行ってみた。
書籍「オブジェクト脳のつくり方」
確認のため購入した本だ。この本ではオブジェクト指向を語るうえでは、オブジェクト脳をつくる事が重要だと述べられている。つくるといっても、脳に新しい考え方の回路を作るに近いニュアンスだ。
また本書の著者は、オブジェクト指向を学ぶ上では良い意味で適当に概念を学んで行くのが正解とし、序盤は厳密な定義付けをせず、すぐにコードに置き換えずに、オブジェクト指向を説明している。最後まで呼んだ結果このアプローチは分かりやすく感じた。
全体の内容としては、オブジェクト指向の基礎、そして実際にオブジェクト指向を使った業務をUMLとソースコードで具体的に解説しているため、 この本で解説している事と自分の理解をすり合わせることで、これまでの「なんとなく」に答えを出せるのではと思った。
オブジェクト脳について
読む限り、既に私にはオブジェクト脳が備わっていた。
過去の自分を褒めてあげたいというか俺すげぇって自慢したいけど語る人がいないのでここに書く。
オブジェクト指向について
本には、オブジェクト指向の事を人間側の都合でソフトウェアを作るための手法と解説されていた。
また、人間側の都合で設計を行う際に出てくる物や概念をオブジェクトと呼ぶとあった。
クラスについて理解していなかった
クラスはオブジェクトを表現するための手段であり、クラス=オブジェクトだと思っていたが、よくよく考えたらそれはコードレベルでの話であって、クラスの本質とは違うっぽい。
こんな基本をうまく表せない自分に対してため息が出た。
ではクラスは何かと言うと、オブジェクト(実際のものや概念)の共通した性質を、様々なレベルで抽象化・具象化したモデルのことである。
例えば、実際の物や概念は、抽象的に語られたり、具体的に語られたりすると思う。
動物で言えば、様々な種類があり、性別がある。さらに野生、飼育に分かれ性質が変わる。飼育の中でも動物園で飼われているのか家庭で飼われているのかで性質が変わってくる。
犬で例えるなら、動物であるが家庭で飼育され名前があり人間との関係性がある。具体的に語る場合、動物で、犬で、柴犬で、ペットの花子であり、大切な家族でもある。このようにオブジェクト(例では犬)に対しての抽象概念、具象概念をモデル化したものをクラスという。
オブジェクト指向の基礎用語について
本には以下用語について、コードに置き換えないでの説明、コードに置き換えての説明、そしてメリットを答えられるかとの問いがあった。
私なりに説明を考えてみたが、やはりあぅあぅしか出てこなかったため、半日考えて答えを出してみた。
コードに置き換える説明は、ゴチャゴチャするので書かない。
・継承
・カプセル化
・ポリモーフィズム
継承
オブジェクトの具象化クラスを定義する際、抽象化クラスの特性を引き継ぐこと。
言い換えると、抽象化クラスの特性を具象化クラスに引き継ぐことを継承という。
メリットとして具象化したクラスを語る際、文脈として抽象クラスの特性を引き継いでいる前提ができるため、具象化クラスの性質だけにスポットを当てて表現することができる。
カプセル化
オブジェクト間のやりとりの際、必要な情報だけを公開すること。自オブジェクトだけが知っていれば良いことは、他オブジェクトだけが知る必要は無い。
例えるなら上司が部下に仕事を振る時に、部下の仕事の仕方まで意識する必要はなく、仕事を振る事さえできれば良い。部下は部下で仕事の仕方を全て分かってもらう必要はなく、必要な情報だけを伝える事ができればよい。という状態にオブジェクトを定義するのがカプセル化。
メリットとして、オブジェクト間のやりとりにおいて不要な情報が存在しないため、振る舞いを明確化できる。
ポリモーフィズム
オブジェクト指向をコンピュータの世界で実現するために欠かせない性質で、具象クラスを抽象概念で扱っても、具象クラスの性質にもとづいて振る舞うことが可能。多態性とも言われる。
例えば、動物(抽象概念)に対して鳴けと命令した場合、命令された動物が犬(具象クラスが犬)ならワン、猫(具象クラスが猫)ならニャーという具合に結果が出ること。
メリットは、抽象化した表現で設計したシステムを、抽象化したままコードに起こし開発する事が可能。具体的な振る舞いは具象化したクラスに記述すればよいため、ざっくりとした状態でも開発を開始でき、設計をしながらの開発がやりやすくなる。
まとめ
オブジェクト指向は人間都合でソフトウェア開発を行うための考えかたで、現実の物や概念を全てオブジェクトという言葉で表現する。
オブジェクト指向における継承やカプセル化、ポリモーフィズムは、オブジェクト指向の考え方をソフトウェア上に実現するために存在する。
そのため、オブジェクト指向開発を現実的なレベルで(ビジネスとして)行うには、プロジェクトメンバー全員が意味を正しく理解しないとうまくいかないと思われる。
オブジェクト指向について、私なりの答え合わせ結果を書いてみたが、説明できるレベルに落としこむのにとても時間がかかってしまった。というか初ブログ投稿だ。
次はデザインパターンについて書いてみたい。