2009/01/13[モデリング]はじめに今回は組込系のシステムをモデリングする際に必ず登場するデバイスのモデリングについて触れてみたいと思います。組込系システムではデバイスの制御が必須ですが、開発の現場で見ていると、その部分のモデルは意外に書けていないことが多いです。何をクラスにすれば良いのかといった視点からこの辺りを見ていってみましょう。デバイスのモデリング組込系のシステムをモデル化する場合、モデル化対象となっているソフトウエアの開発者か、過去にソフトウエア開発経験のある人がモデリングを行うことが多いと思います。した時によくあるのが、ソフトウエアのイメージに基づいてモデリングをしてしまうということです。組込系のソフトウエアはC言語で作られていることが多いですから、ソフトウエアのイメージというとデータと関数の集合体になります。いったものがクラスとしてモデル化されていきます。実行():void等速移動開始スタート():voidこうした、機能をクラスとしたモデル化は組込系の現場でよく目にしますが(ちなみに、業務系ではデータをクラスとしたモデル化になります)、これらのクラスで作られたクラス図はUMLで表現しようとしている、オブジェクト指向のモデルではないものになってしまっています(機能構造のモデルですね)。オブジェクト指向らしいモデルではデバイスはどのようにモデル化されるのでしょうか。オブジェクト指向はオブジェクト(対象)というぐらいですから、制御したい対象をオブジェクトとして捉えるように考えていきます。上記のモータ回転やモータ停止の例でいけば、制御したい対象はモータですから、モータそのものをクラスとします。モータ回転(速度:int):void停止():voidそして、このクラスの持つ回転()や停止()の操作の実装にデバイスドライバを叩く部分(モータに対応するアドレスにシグナル値を代入する等)を入れることになります。すると「モータを回転させる」という人間の思考と同じように、プログラムで「aモータ->回転(10)」と記述することができるようになります。この人間の思考と同じようにソフトウエアを考えられるようにすることがオブジェクト指向で実現したいことですので、モデルもそうなるように作っていくのが理想です。いうことで、組込系のモデリングではデバイスは制御する対象(オブジェクト)となるものなので、デバイスそのものがクラスとなるようにモデルを作ってみてください。ここでひとつ問題です。制御対象となっているモータが複数存在する場合はどうモデリングしましょうか。これも組込系のモデリングでよく問題になる部分です。次回はこの辺りについて取り上げていきたいと思います。