--- CW練習ソフトの製作 ---



(図1) アプリケーションの概観
●製作の動機
 現代の高度な情報化時代においては,CWはもうほとんど使われなくなってしまいました.これから将来,モールス通信として有名なCWは忘れられていく運命にあると思われます.しかし,CWはいまだアマチュア無線の世界で生き残っています.アマチュア無線も人気が後退しているように思われますが,それでも,これからCWに挑戦したいという人はいるでしょう.そのためにこのソフトを作りました.また,CW通信は歴史的に重要な意味を持っています.TCP/IP通信をよくわかっている人も,教養としてCWにはある程度なじんでおきましょう.CWを学ぶことは通信技術の歴史を学ぶことなのです.


●CW練習ソフト(CWTrainer)概要
 CWはサウンドインタフェースに直接出力されます.例えば'A'という文字のCWは・−のようにサウンドから音が出ます.
さて,CW練習には次の3つのモードがあります.
キーボード入力モードではユーザがキーボードをタッチすると,その文字に対応するCWを出力します.ファイル入力モードではあらかじめテキストファイルに作成していた文章を読み込んで,逐次CWに出力していきます.上の図はその例です.ランダムモードでは,CW出力する文字をコンピュータが内部でランダムに自動生成します.生成されるランダム文字列の属性は下のように環境設定によって設定可能です.



(図2) 環境設定ダイアログ

この図からもわかるように,CWの速さやトーンも変更することができます.


●CW練習ソフト(CWTrainer)の構造@・・・・ドキュメント/ビュー・アーキテクチャについて
 CWTrainerは一般的なドキュメント/ビューアーキテクチャで構成されています.まずドキュメント/ビューアーキテクチャについて簡単に解説しましょう.アプリケーションは普通,外枠を管理するフレームクラスと,情報の表示領域を管理するビュークラスと,データを管理するドキュメントクラスとから構成されています(下図).これらのクラスをうまく協調させることによって,一つのアプリケーションができるのです.

ドキュメント/ビュー・アーキテクチャ

(図3)ドキュメント/ビューアーキテクチャ

 ドキュメント/ビューアーキテクチャにはオブジェクト指向独特の重要な概念が取り入れられています.アプリケーションは大抵、下図(図4)のように、ユーザインタフェース部とデータ管理部とに分けると設計しやすくなります.ユーザインタフェースとは,ユーザと情報をやりとりする通り口のことを言います.たとえば,画面のクライアント領域はアプリケーションからユーザへのインタフェースです.また,ボタンはユーザからアプリケーションへのインタフェースです.さて,「ユーザインタフェース部とデータ管理部」というように,分割化(モジュール化)してプログラミングすると,プログラマはたとえアプリケーション全体が見えなくても,特定の処理だけに集中すれば良いことになります.このことは,大きなプロジェクトの場合,特に威力を発揮します.分割化により,プログラマごとに役割を分担することができるようになるのです.「私はドキュメント部分を設計するので,あなたはビューを設計してください.」という具合に...


(図4)ドキュメントとユーザインタフェース


(図5)クラスの派生図との関連

 図4からはユーザインタフェースとドキュメントが別々になるのはよくわかると思います.しかし,ユーザインタフェースを提供する「ビューとフレーム」をなぜ分割しなければならないかはこの図からは読み取れません.そこで図5を見てください.図4のレベルでは,CWndクラスとCDocumentクラスでの分離を表現しているに過ぎないのです.ビューとフレームは共にCWndクラスから独立に派生していますので,ビューとフレームを分割する理由は別のレベルの話なのです.しかし,CWTrainerはSDIプログラムであり,このレベルの話はあまり重要ではないので,あまり深入りしないことにしましょう.


●CW練習ソフト(CWTrainer)の構造A・・・・階層化について
 ドキュメント/ビュー・アーキテクチャにおいては,機能を別々のクラスに分割しているので,これをアプリケーションの縦割り分割と考えてみましょう.このとき,実はアプリケーションを違った角度から分割することができます.それが横割り分割,つまり階層化です.階層化という概念はシステムを考える際にあらゆるところで見受けられます.たとえば,オペレーティングシステム,ネットワークシステム,社会システムなどです.上位層は下位層を統制する権力を持ち,下位層では指示された仕事(タスク)を実行しなければなりません.下位層では指示された仕事を確実にこなすことによって,上位層を支えることになります.コンピュータシステムにおいては,指示を出すのは人間ですから,ユーザがシステムの頂点に立つことになります.また,個々のハードウェアはコンピュータの指示によって動作しますし,ハードウェアによってコンピュータが支えられていますから,ハードウェアはコンピュータシステムの基盤(最下位)に位置することになります.コンピュータシステムにおける一般的な階層図を図6に示しましょう.


(図6)コンピュータシステムの階層

 アプリケーションをプログラムするときは,OSやユーザとのインタフェースを意識したほうが明確になります.そこでアプリケーション自体もさらに細かく階層化して設計します.ユーザ側,OS側,そしてその中間というように階層化して構成します.


●CW練習ソフト(CWTrainer)の構造B・・・・実際の構成例
 CW練習ソフトは,ドキュメント・ビュー・フレームへの分割や階層化を意識して次の図のように構成されています.アプリケーションを構成する際には,このような図を用いて検討すると良いでしょう.回路図を書く人にとっては,これはブロック図のようなものです.細部については,後ほど取り上げます.

(図7)CW練習ソフトの構成図

●CWをPCM出力する仕組み(CWデバイス)


●メニューバーとツールバー

●デバイスコンテキスト

●文字データの流れ

●CW練習の技法

●最後に