見出し画像

OOC2024でオブジェクト指向パズルを遊んだ件について

前提知識

OOC2024って何?

Object-Oriented Conference 2024(OOC 2024)はオブジェクト指向のカンファレンスです。2024年は3月24日にお茶の水女子大学で開催されました。私の大学と比べて椅子がふかふかで座りやすかったです。女子大ってすごい。ただし男子トイレは絶滅危惧種。

オブジェクト指向って何?

プログラミングの流派。詳しい定義は何だろう。人によって定義が違う。
とりあえず、この記事を理解する分には、「A(オブジェクト)にBしろって命令したら(メソッド呼び出し)、用意された命令が実行される」ぐらいわかれば十分だと思います。これを連鎖的に行うのがオブジェクト指向っぽいプログラミング。

オブジェクト指向パズルって何?

OOC 2024のスポンサーのGMOさんが自社の宣伝のために借りたスペースでやっていた遊び。メソッド名が記入された木片があるので、これを組み合わせて機能を持った形を作ろうというゲーム。

「犬は、走る・食べる・泳ぐ・寝ることをします」というときは、以下のように、文字の書かれた積み木を並べます。なお、メソッドがあればいいので耳がEatでもいいのです(多分)。

犬class

今回GMOさんの審査を経て2位という賞をいただきましたので、考えていたことを書き留めます。これをやると賞が貰えるよ!ということではないのでご注意ください。

私の作ったおたまClass
私の作ったおたまClass(左下からtaste, clean, empty, stir, hung, wash, cook)

作品を作るまで

問題の分割

オブジェクト指向パズルは2つの要素から構成されています。それは積み木を選ぶこと(メソッド名の選択)、と積み木を並べることです。つまり審査員の評点は以下のように分離できると考えられます。

$$
E_{総合評価} = E_{メソッドの評価}+ E_{並べ方の評価}
$$

並べ方の評価 について

並べられる盤面の大きさに上限があり、また積み木の形にも限りがあるため、複雑な形状のものは作れません。この辺りは普通の積み木遊びと同じです。
また、「ノートPCです」と言って四角が出てきても、正直面白くないと思います。
このことから特徴のある形状のものを選ぶ必要があると考えられます。

(ヨコから見た)ノートPC Class

メソッドの評価について

ある程度定式化するなら、審査員が作品に持っていると予想するメソッドと私が搭載したメソッドが一致したほうが良いと仮定しました。今回私が作ったものはおたまですが、Flyというメソッドは持ちません。私の家ではおたまは宙を飛ぶものですが、友人の家では飛ばないことを知っていたので、搭載していません(大嘘)。
奇をてらったメソッドよりも納得感のあるメソッドを必要十分に盛り込むことを目指しました。

$$
\textrm{Max} \big( ( {審査員のイメージするメソッド}) \bigcap ( {実際のメソッド} ) \big)
$$

式としてはこんな感じ

残念ながら審査員のイメージについて私は知る由もありません。そのため、審査員以上の解像度で事物を観察し、メソッドを切り出すことができるものが適しています。
一方で審査員が何も知らないものは評価されません。「α位にプロティックアミン配位子を持つ三脚ピアノイス型錯体によるケトンの不斉水素化触媒反応機構」であればこのカンファレンスのだれよりも知っていたかもしれませんが、なんもわからんで終わってしまうのです。

またあまりに複雑なメソッドは評価が難しくなると思います。理想の彼氏Classを作成しようとしたときに、「悲しい気持ちの時に慰めてくれる」メソッドを搭載したくなりますが、この粒度になると「『人恋しいときにハグしてくれる』メソッドは要らないのか?」「道路側を歩いてくれる」などと実装するべきメソッドが膨大化します。もはや人工知能です。LLMですらあれだけのメモリを必要とするのに、会場の積み木では間に合いません。
そのため、極力単純なメソッド、特に事前に用意されたメソッドは審査員に響きやすいメソッド名と仮定できます。

なぜおたまか

A. 前日に作り置きのシチューを作って食べたから。

と言ってしまえばそれまでなのですが、もう少し語りましょう。

オタマトーンというおもちゃがあります。音符の形状がおたまに見えたからそうなずけられたのでしょう。ということで、おたまの形は抽象化された構造として適しています。

また、料理をする人であればキッチンに1個ぐらいはおたまはあると思うので、カンファレンス参加者の方にも理解してもらえる作品になると思いました。

ちなみに、「伸びる」という円柱のブロックがあり、トロンボーンを作っている可能性もありました。

感想

全自動おたまとかの方が良かったのじゃないかなぁ。と直後のセッションを聞きながら思いましたマル

他の人が作品を作っているので、欲しいメソッドが手に入るかという運もあり、結構面白かったです。
また、積み木並べだと形を作るというスナップショット的なものになりますが、メソッド(動詞)を持つことでクラスに時間的概念が付与されるという点でも興味深い遊びだと思います。男子小学生とか恐竜クラスとか作って「走るメソッドが2つあるからお前のよりも速いぞー」とか言ってそう。

なお、メソッド名について「DogクラスのListenメソッドでは、目の前に出された餌を食べます」という突拍子もない使い方はされないと思います。逆に言えば、関数名やメソッド名は分かりやすくあるべきという原則やLisckvの置換原則(事後条件違反)にも通じるものを感じられます。
また、よくある例ですが、走るだけとっても、人・車・プログラムのクラスは走るメソッドを持つと思います。つまりポリモーフィズムの表現もあるわけです。

あとはメッセージパッシングがあれば!と思うので、Rhodiumインスタンスから皆さんに「楽しかったぞ!ぜひ遊んで!」とメッセージを送ります。正しく受け取れた方はPlayしてみてください。


この記事が気に入ったらサポートをしてみませんか?