燃料切れなど緊急事態の航空機を優先する機能を追加。優先度付きキューで緊急処理を実装します。
複数機が着陸待ちの場合、順番に処理するキュー機能を追加。先着順で公平に処理します。
滑走路の排他制御を実装。1つの滑走路に同時に1機しか使えないリソース管理の仕組みを作ります。
全航空機クラスに共通のインターフェースをMoo::Roleで定義。Aircraft::Roleを作成し、統一的な操作を実現します。
管制塔(ControlTower)クラスを導入し、航空機同士が直接通信せずに安全に着陸できる設計に変更します。
2機の航空機が同時に着陸を要求すると衝突の危険が!オブジェクト間の直接参照が引き起こす問題を体験します。
PerlとMooを使って航空機シミュレーターを作成します。まずは飛行機を飛ばす基本的なクラスから始めましょう。
PerlとMooでTRPGのダイス記法を解釈するインタプリタを作るシリーズの目次です。Interpreterパターンを実践的に学びます。
作ってきた設計がInterpreterパターンだったことを明かします。GoFパターンとの対応表と、他のパターンとの関係を解説します。
文字列「2d6+3」から式ツリーを自動構築するパーサーを実装し、ダイス言語インタプリタを完成させます。
引き算(SubExpr)と掛け算(MulExpr)を追加します。既存コードを変更せずに機能を拡張する「開放閉鎖の原則」を実践します。
すべての式クラスにevalメソッドを必須にするExpressionRoleを定義し、Moo::Roleでインターフェースを統一します。
「+」を表すAddExprクラスを作成します。左辺と右辺のExpressionを持ち、再帰的に評価する「非終端式」の概念を学びます。
数値とダイスをそれぞれ独立したクラスにし、evalメソッドで評価する設計に変更します。これが「終端式」と呼ばれる概念です。
ダイス言語に加減乗除を追加しようとして、if/elseの嵐に陥ります。なぜコードが複雑になるのか、その問題点を整理します。