Featured image of post 第1回-飛行機を飛ばそう - PerlとMooで航空管制シミュレーターを作ろう

第1回-飛行機を飛ばそう - PerlとMooで航空管制シミュレーターを作ろう

PerlとMooを使って航空機シミュレーターを作成します。まずは飛行機を飛ばす基本的なクラスから始めましょう。

航空機クラスを作成

はじめに

このシリーズでは、PerlとMooを使って航空管制シミュレーターを作ります。

航空管制シミュレーターと聞くと難しそうですが、段階的に作っていくので心配いりません。最終的には、複数の航空機が管制塔を通じて安全に離着陸できるシステムを完成させます。

対象読者は、Perl入学式を卒業した程度の方、または「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方を想定しています。

航空機クラスを作る

まずは、航空機を表すクラスを作りましょう。航空機には便名があり、離陸と着陸ができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package Aircraft {
    use Moo;

    has flight_number => (is => 'ro', required => 1);

    sub request_takeoff($self) {
        say $self->flight_number . ": 離陸します";
    }

    sub request_landing($self) {
        say $self->flight_number . ": 着陸します";
    }
}

flight_number属性は航空機の便名を保持します。request_takeoffrequest_landingは、それぞれ離陸と着陸を実行するメソッドです。

航空機を飛ばしてみる

作成したクラスを使って、実際に航空機を飛ばしてみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env perl
use v5.36;

package Aircraft {
    use Moo;

    has flight_number => (is => 'ro', required => 1);

    sub request_takeoff($self) {
        say $self->flight_number . ": 離陸します";
    }

    sub request_landing($self) {
        say $self->flight_number . ": 着陸します";
    }
}

# 航空機を作成
my $flight1 = Aircraft->new(flight_number => 'JAL123');

# 離陸と着陸
$flight1->request_takeoff;
$flight1->request_landing;

実行結果:

1
2
JAL123: 離陸します
JAL123: 着陸します

1機の航空機が離陸して着陸する、最もシンプルなシミュレーターができました。

2機目の航空機を追加

次に、2機目の航空機を追加してみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env perl
use v5.36;

package Aircraft {
    use Moo;

    has flight_number => (is => 'ro', required => 1);

    sub request_takeoff($self) {
        say $self->flight_number . ": 離陸します";
    }

    sub request_landing($self) {
        say $self->flight_number . ": 着陸します";
    }
}

# 2機の航空機を作成
my $flight1 = Aircraft->new(flight_number => 'JAL123');
my $flight2 = Aircraft->new(flight_number => 'ANA456');

# それぞれ離陸と着陸
$flight1->request_takeoff;
$flight2->request_takeoff;
$flight1->request_landing;
$flight2->request_landing;

実行結果:

1
2
3
4
JAL123: 離陸します
ANA456: 離陸します
JAL123: 着陸します
ANA456: 着陸します

2機の航空機がそれぞれ独立して飛んでいます。今のところ問題なさそうですね。

今回のまとめ

今回は、航空機を表すAircraftクラスを作成し、離陸と着陸ができるようにしました。

  • Mooでクラスを定義
  • hasで便名(flight_number)を持たせる
  • request_takeoffrequest_landingメソッドで離着陸

現時点では、各航空機は完全に独立して動作しています。しかし、実際の飛行場では複数の航空機が同じ滑走路を使わなければなりません。

次回は、2機の航空機が同時に着陸しようとしたとき、何が起こるかを見ていきます。

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。