06-05-2014 04:32 AM
オブジェクト指向のダイナミックディスパッチのサンプルを作ったので参考までに。
今回はLV2013バージョンです。mainはTestです。
これはNIのコーステキストにある継承関係を説明した図をプログラムしてみました。
継承の関係は
哺乳類クラス(・・・)
←ヒトクラス(しゃべる)
←ネコクラス(・・・)
ネコクラス
←家ネコクラス(にゃー)
←大型ネコクラス(ガオ)
大型ネコクラス
←トラクラス(ガオ)
←ライオンクラス(ガオ)
クラスによって鳴き方が違います。(同じものもあります。)
わかりやすくするために、ボイスロイドでwavファイルを作って鳴かせています。
(少しマニアックですが。)
子にメソッドがなく、親にメソッドがない場合、その上の親のメソッドが呼び出されます。
ファクトリーメソッドをつけたプログラムがFMTestです。
親クラスのMammalを呼び出そうとするとクラスがないとエラーが出るのですが、ほかの子クラスの呼び出しは問題ないようです。
この理由がよくわかりません。アドバイスをいただけたありがたいです。
また今回は、しゃべらせるためにボイスロイドで作成したファイルを呼び出していますが、
できれば、音声合成(読み上げ)の外部ライブラリファイルを呼び出して、その場で音声を作れたらよいなとも思っています。
どなたか、これについもアドバイスいただければありがたいです。
解決済! 解決策の投稿を見る。
06-07-2014 08:42 AM
とても勉強になります。ありがとうございます。
フォルダ名の「Mammal」の4文字目の文字が2バイト文字の「m」になっているようですね。私の手元ではこれで動作するようになりました。
今後とも宜しくお願いします。
06-07-2014 10:03 AM
ミスを見つけていただきありがとうございます。
大変助かりました。
Testでは、直接クラス定数(インスタンス)をケースの中においていたので、フォルダー名は関係なかったのですが、
ファクトリーメソッド(FMTest)では、フォルダー名を使っていたので、クラス名とフォルダーの名前が違っていたために問題が生じたようですね。
クラスを作るときに、プロジェクトホルダーにあるクラス名と保存するフォルダー名は間違えないように作らないといけないですね。
まだ使ってはいないのでどの程度できるかわかりませんが、
クラスの設計ができているれば、
StarUMLを使えば、自動でコードが生成されるので、このようなミスは減るかもしれません(?)。
http://sine.ni.com/nips/cds/view/p/lang/ja/nid/209296
http://staruml.sourceforge.net/en/
利用されている方で、どんな風に利用されているかや、使い勝手などを教えていただければありがたいです。
よろしくお願いします。