1. はじめに
Java言語で学ぶデザインパターン入門は GoF のデザインパターンについて Java 言語で解説する良書だ。私は普段 MATLAB 言語を使っているため、これらのデザインパターンを MATLAB 言語で記述できないかと考えた。本稿ではサンプルプログラムを MATLAB 言語で実装する場合の注意点を示し、MATLAB 言語で記述した GoF のデザインパターンについて紹介する。
2. MATLAB 言語による実装の注意点
デザインパターンを実装する上で、Java と MATLAB の言語の違いにより、移植の難しい箇所がいくつかある。各章を通して気を付けなければならない違いについて概説する。
2.1 型付け
Java は静的型付け言語であるが、MATLAB は動的型付け言語である。したがって MATLAB では実行前に型情報からエラーを検出することが難しい。
この問題を解決する方法として、実行時に型を検証する方法がある12。本稿では MATLAB プログラムのクラスプロパティ及び関数の引数と戻り値について必ず型を検証する。型の検証は、プログラムを読む際に型情報が分かりやすくなるだけでなく、エラーを早期に検出する。
ただし、抽象メソッドでは型の検証をしない。これは本稿執筆時(MATLAB R2025a)で抽象メソッドに対し型の検証ができないためである3。
2.2 抽象クラス
Java は多重継承ができない代わりに、複数の interface を実装できる。抽象クラスと interface は所定のシグネチャをもつメソッドの実装を要請する。
一方 MATLAB は多重継承ができるため、interface が存在しない。したがって『Java言語で学ぶデザインパターン入門』では interface で定義していた関数を、本稿では抽象クラスで定義する。
前項で述べた通り、MARLAB では抽象クラスにおいて型の検証ができない。そのため Java と MATLAB のサンプルプログラムでは抽象クラスの扱う型に差異があることに注意されたい。
2.3 関数オーバーロード
Java は、一般的なオブジェクト指向プログラミング言語と同様に、関数オーバーロードができる。すなわち関数名が同一であっても引数の型が異なれば、それは合法なプログラムとしてコンパイル及び実行される。
一方 MATLAB は関数オーバーロードができない。対策として関数内で引数の型ごとに処理を分岐する方法が考えられるが、この対策は引数によって関数の属性(Java でいうところのアクセス修飾子、MATLAB でいうところのメソッドの属性)を変えたい場合に破綻する。
本稿では、Java のサンプルプログラムで関数オーバーロードをしている場合、MATLAB プログラムでは異なる名前の関数を定義することとする。
3. 記事一覧
# | デザインパターン名 | 記事 |
---|---|---|
1 | Iterator | #1 |
2 | Adapter | #2 |
3 | Template Method | #3 |
4 | Factory Method | #4 |
5 | Singleton | #5 |
6 | Prototype | #6 |
7 | Builder | #7 |
8 | Abstract Factory | #8 |
9 | Bridge | #9 |
10 | Strategy | #10 |
11 | Composite | 後日公開予定 |
12 | Decorator | 後日公開予定 |
13 | Visitor | 後日公開予定 |
14 | Chain of Responsibility | 後日公開予定 |
15 | Facade | 後日公開予定 |
16 | Mediator | 後日公開予定 |
17 | Observer | 後日公開予定 |
18 | Memento | 後日公開予定 |
19 | State | 後日公開予定 |
20 | Flyweight | 後日公開予定 |
21 | Proxy | 後日公開予定 |
22 | Command | 後日公開予定 |
23 | Interpreter | 後日公開予定 |