Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。KB)過去に作成したコードを眺めると、プログラミングを始めた頃には気付かなかった欠陥が見えてきます。ソフトウェアの設計にあたってはのちのちのコストを見据えた上で、再利用への配慮を行うことがとても重要です。今回は、先の連載で紹介した3つのゲームから共通する部分をフレームワークとして抽出し、リファクタリングを試みます。7余録フレームワーク:ゲーム15パズルゲームライフゲームオセロゲームはじめに過去に作成したコードを眺めると、プログラミングを始めた頃には気付かなかった欠陥(必ずしもバグとは言えないもの)が見えてきます。リサイクルと同様、あるソフトウェアを設計する際に、後の再利用を考慮した場合とそうでない場合では、メンテナンスに伴うコストが激変します。今回は、先の連載で紹介した3つのゲームから共通する部分をフレームワークとして抽出し、再考します。対象読者こんな症状を抱えているなら......。コーディングよりデバッグ/メンテナンス作業に時間を割かれる仕様の変更に柔軟かつ迅速に対処できない【効能】ステップ単位の開発コストを低減できるようになるかも【副作用】クラスライブラリーのコードの粗が見えてくるかも前にも同じことが先の連載で紹介した15パズル/ライフゲームには、重複する部分があります。これらのコードを作成しているときに、デジャビュにも似た「何度も同じようなコードを書いた」感覚がしませんでしたか。実際にオセロゲームは、15パズルゲームの改良という形で作成したといっても良いでしょう。それは利用者の立場からも明らかです。マス目の数に違いはあるものの、どちらも似たようなボードを使ったゲームです。盤面をクリックすると、すぐに結果を確認できます。マス目の次数を増やすと、パズルゲームの難度は上がります。マス目の数を減らすと、ライフゲームは単純な機構なのが分かります。先の連載では、同じボードを再利用すると、(オセロゲームなどのように)他のゲームを容易に作成できることを確認しました。ハリウッドの原則アカデミー賞の授与式の季節になると、世界中の注目を集めるのがハリウッドです。業界の違いはあっても、同じソフトを作成する立場に身を置くと、観客としてではなく、制作者の立場から見入ってしまいます。その華やかな旧き良き時代のハリウッドの舞台裏には、ある掟(暗黙の了解)があったようです。Principle」のメタファーから学べることは、少なくありません。我を呼ぶなかれ、我が汝を呼ぶのだ既存のフレームワークと新規のコードを共存させるには「ハリウッドの原則」を理解するのが早道です。プロデューサー/俳優の関係は、これらの関係を彷彿とさせます。俳優たちは、プロデューサーから通知されるまで、自分が出演者として選ばれたかどうか分かりません。それを自分から打診することはタブーとされていました。彼らは作品の配役が発表されたときに初めて、自分が採用されなかったことを知るのです。どのような名優でも、この原則の前では平等でした。皆さんは、あるメソッドを定義して、それを呼び出すコードを記述するでしょう。フレームワークを利用する場合、自分が記述したコードを自分で呼び出すことはありません。それを実行したときに初めて、自分のコードが採用されたことを知ります。フレームワークの背景にある暗黙の了解を「ハリウッドの原則」が象徴しています。皆さんは既に、無意識のうちにフレームワークを利用しています。self.y)先の連載では、クラスTileにおいて、メソッド__str__を定義しました。このメソッドを利用するコードはどこにもありません。利用しないメソッドが、なぜ必要なのでしょう。tileこれを実行すると、次のような文字列が出力されます。'5'(0,2)なぜこの文字列が出力されたのでしょう。print文は、式を評価して得られるオブジェクトに対しては、組み込み関数strによって得られる文字列を出力します。このメソッドが暗黙のうちに利用され、次を実行したことと等価です。Tile.__str__(tile)インスタンスに固有の文字列表現として__str__を再定義することは、Pythonの作法です。「利用するためではなく、利用してもらうためにコードを記述する」のが、フレームワークを習得するための第一歩です。先の連載で、オブジェクト指向の本質は「メッセージの送受信」と紹介したように、オブジェクト間の双方向通信の必要性を示唆します。呼ばれないためにもSmalltalkには「printOn:/storeOn:で規定して、printString/storeStringで利用する」という暗黙の了解があります。再定義するのは(可能ですが)作法に反します。再定義するのは(可能ですが)この原則に反する行為です。できるけどやってはいけないことを知る「大人の対応」が求められるのです。JavaのtoString()がこれに相当します。小泉ひよ子とタマゴ倶楽部(コイズミヒヨコトタマゴクラブ)http://tamago-club.cocolog-nifty.com/「楽しくなければ仕事じゃない」が私たちのモットー。99%の苦悩の連続も、1%の成功に報われます。この仕事が楽しくて仕方がないのです。楽をするための努力なら惜しみません。ウサギ)ペンネームの「由来は」と言うと。年生)に因んだものです。2人は卒業して、残る1人がその名跡を継承しています。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。12:00法務担当者、6割超が今後業務で「生成AIを使用したい」と回答。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。