12
8

More than 3 years have passed since last update.

Fateシリーズで少しわかる(かもしれない)オブジェクト指向

Posted at

初めに

オブジェクト指向、例えに難しいところがありますよね。
私も完全に理解してるわけではないです。
そんな私がぼんやりと型月wikiを眺めてたら睡眠時間を失ってしまい寝不足になってしまって脳内の連想が謎結合する状態になってしまった時頭になりまして、「座と英霊って要はクラスとインスタンスじゃないか?」という閃きが訪れたのでそのまま勢いで書いてみることにしました。
一発ネタではありますがあるあると面白がってもらったり、オブジェクト指向理解する一助になれば幸いです。
前述の通りどっちのネタもまだまだ半可通な人間が書いてみたので
「ここがこう間違ってる」とマサカリ投げていただいたり
「この設定は変更になったんでちゅ死ぬがよい」とアゾったりエクスカリバってください。
多分頑張って直します。

聖杯戦争おさらい

皆さんご存じかと思いますが簡単にまとめると願い事を叶えてくれる聖杯のために過去の時代の英雄などを英霊サーヴァントとして召喚して戦うバトルロイヤルを開催する儀式です。
7人の魔術師と彼らに仕える7騎の英霊たちが戦いあい、最後の1人になるまで戦いあうという流れですね。 まぁ型月なので例外を挙げればきりがないですが基本はこんな設定でしたよね?
いらすとやで表す1とこんな感じになりますが本来はバトルロイヤルなので死亡離脱裏切り権謀術数渦巻く危険な儀式。

Slide1.jpg
ここで思い出してほしいのは英霊たちの設定です。過去に生きた偉人などの一側面が魔力でできた仮初の肉体を得て聖杯戦争に挑みます。し彼らは英霊の座に刻まれた記録から生まれ、命持たぬ存在。そんな儚さと憧憬に満ちた存在の織り成す話のエモーショナルさは人気シリーズの秘訣かもしれません。
ちょっと話が脱線しましたがこの座と英霊の関係はオブジェクト指向のクラスとインスタンスとかなり通じる所があるんです。

座と英霊=クラスとインスタンス

本題というかほぼ言いたいことの八割はこれに尽きます。では話が終わってしまうので解説していきますね。
英霊の実体のようで実体でないのが座の記録です。一方で座に記録された人間をサーヴァントとして召喚されたのが英霊です。
この関係性はたい焼きの型とたい焼き、オブジェクト指向で言うところのクラスとインスタンスの関係です。というのをめっちゃ概念的に現したのが次の画像です。
画像は円卓っぽいものを探した結果中華料理屋のテーブルしかなかったのでそれで代用してますが英霊の座だと思ってください…。
Slide2.jpg座の記録というクラス2から召喚された英霊というインスタンスが生成されるというのが大まかな流れです。クラスが型や記録で例えられるようにインスタンスは同じものをいくらでも作れる。というのは結構大事な要素です。フレンドと合わせてWマーリン出来るのも彼らがインスタンスだからかもしれませんね…。
折角なのでQiitaらしくソースコードで表してみるとこんな感じです。自分がお仕事でも使ったり分かりやすいと感じてるのでPythonで例示してみます。

Fate.py
class Artoria_Pendragon:

    def Excalibur(self, enemy):
        self.enemy = hogehoge
        return self.enemy

    def Avalon(self,hp):
        self.hp = hogehoge
        return self.hp


saber = Artoria_Pendragon()
saber.Excalibur(gilgamesh)

このコードではArtoria_Pendragonクラスからインスタンスsaberが生成されているというイメージです。変数名は適当になってるので特に意味のあるコードではないんですが大体こんな感じのはずです。
元ネタありきなので命名規則とかめちゃめちゃですね…

サーヴァントの一生(?)とオブジェクト指向

もうちょっとサーヴァントとオブジェクト指向の似たところを一連の流れで書いていきます。命なき存在のサーヴァントの一生とは?という感じですがインスタンスとかの非生物にも一生って言ったりするのでそういうニュアンスで捉えてください。

召喚 コンストラクタ

聖杯戦争や人理修復のような機会で英霊の座からサーヴァントが召喚されます。この時彼らはある程度の現代知識等を持って召喚されてきます。召喚時に既にある程度学習が済んだ状態で呼ばれる英霊たちと同じように、インスタンスが初期値を持って生成されるようにプログラムすることができます。この時呼び出すのがコンストラクタです。

座への記録 クラス変数 

基本的に座から呼び出されたサーヴァントたちから座の記録に干渉することは起こらないようになっています。一方で重要な経験や縁などを座に持っていくことがあります。オブジェクト指向においてこれに相応するのはクラス変数でしょう。インスタンスの中ではなく、クラスの中に値を持ち、生成されたインスタンス全体が影響を受ける変数です。サーヴァントで言えば前の聖杯戦争の影響で主義や思考なんかが変わったように、インスタンス側からクラス全体へ影響を及ぼすこともできなくはないわけです。

退去 デストラクタ

ここでは穏当な例として特異点を解決しBGMで絆が流れてきたりするFGO方式で考えましょう。召喚されたサーヴァントが特異点の経験や縁を座に持って帰ると共にサーヴァントとしての実体が消滅して金色の光がシューンってなるあの展開です。ここで前述のコンストラクタの逆、デストラクタが呼び出されます。デストラクタはインスタンスの消滅時に行う処理を書きます。ここでクラス変数に値を代入することもできるでしょう。

継承=オルタとか水着英霊パリピとか

オブジェクト指向のクラス、これを引き継いで別のクラスを作成するのが継承インヘリタンスです。なんか音の響きがやたらカッコいい。大まかな流れですと英霊の座に登録されてる本人とは別の英霊を最初から作るのは大変だけど、設定を引き継いだ別人なら簡単に作れるじゃんということです。プログラム的には基本的な構造とかは引き継ぎつつ修正を加えて別のインスタンスを作るクラスを用意したりするのが継承ですね。
Slide3.jpg
画像で説明すると上の人から継承されて青矢印のオルタさんや緑矢印の水着さんになる流れですね。他にも槍トリアさんとか書文先生とかの例も継承で説明できます。継承万能説と思ったのですが継承ではブレエリちゃん説明できないんですよねどうしよう…。

終わりに

オブジェクト指向とサーヴァントの共通点を挙げて書いてみましたが皆さんとしてはどう思ったでしょうか。違うという意見も納得がいったという意見もあると思います。あるよね? ともかく私の主張としてはサーヴァント、実質インスタンス説です。あとは強いて言えば皆さんも物事の相似性を見出してオタクらしく遊んでほしいなと思います。適当に共通点を見出して実質○○とか言い出すの、意外な面白みがあるので是非やってみてください。
以上、ここまで読んで頂いてありがとうございました。


  1. (何故作ったんでしょうね…なんか図がないと寂しいかなって思ったんだけど必要かと言われるとうーん…)ちなみに余談ですが画像のキャスターっぽい女性はキルケーのイラストです。あまりのタイムリーさに変な笑いが出ました。https://www.irasutoya.com/2020/02/blog-post_69.html 

  2. 今回の例えの欠点として、クラス(オブジェクト指向)とクラス(Fate)と二つの世界で別の意味を持つ用語が出てくるので読む皆さん混乱しないかなというのが気掛かりです。今回はFateの方のクラス――7つの基本クラスとエクストラクラスに関しては触れない方向で行くのでクラスって言ってたらオブジェクト指向の方の意味だと受け取ってください。 

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8