テキストエディタ実装技術
 
 
[ index | 前のドキュメント | 次のドキュメント | このドキュメントのソース ]
■ テキストエディタ
 テキストエディタは、簡単に言うと、プレーンなテキスト情報を保持し、ユーザの指示により内容を表示、修正するプログラムである(図1参照)。

    図1 テキストエディタ

  エディタ
┏━━━━━━┓
┃┌────┐┃  表示 
┃│テキスト│┃ ───→ ユーザ
┃│ データ │┃ ←───
┃└────┘┃ 編集操作
┗━━━━━━┛
 図1のような構造はオブジェクト指向な設計と親和性が高い。テキストデータをメンバ変数に持ち、データを参照、変数するメソッドを持つオブジェクトと、ユーザの指示を解釈し、適切なメソッドを呼び出すオブジェクトを導入するとよい。前者をエディットエンジン、後者をUIオブジェクトと呼ぶ(図2参照)。

          図2 エディタのクラス図

┏━━━━━━━━━┓     ┏━━━━━━━━━━┓
┃エディットエンジン┃     ┃ユーザインタフェース┃
┠─────────┨     ┠──────────┨ 表示
┃テキストデータ   ┃←───→┃          ┃────→ ユーザ
┠─────────┨     ┠──────────┨←────
┃ 参照メソッド    ┃     ┃描画メソッド    ┃編集操作
┃ 編集メソッド    ┃     ┃イベントハンドラ  ┃
┗━━━━━━━━━┛     ┗━━━━━━━━━━┛
 ユーザの編集操作とはキーの押下やマウス、メニュー選択である。オブジェクト指向的なOSでそのような操作を行うと、イベントが発生し、プログラム内のイベントハンドラが呼ばれ、必要な処理が行われる。したがって、この部分のプログラムはOSに大きく依存することになる。一方エディットエンジンは純粋にテキストデータの操作を行うだけなので、(文字コードを何にするかという問題を除けば、)OSに依存しないので、普遍性が高いと言える。
 図2の構造はMFCのドキュメント・ビューアーキテクチァーと本質的に同じである。MFCではデータを保持するクラス CDocument と、ユーザインタフェースのためのクラス CView があり、それぞれの派生クラスを定義・実装することがプログラミングとなる。したがって、エディットエンジンの機能を CDocument 派生クラスに実装すればいいのだが、機能を直接実装すると移植性が低下するので、CDocument 派生クラスがエディットエンジンを所有するのがよいと考える。

          図3 MFC でのクラス図

┏━━━━━━━━━┓     ┏━━━━━━━━━━┓
┃  CDocument   ┃     ┃    CView    ┃
┠─────────┨     ┠──────────┨ 表示
┃    ●─┐  ┃←───→┃          ┃────→ ユーザ
┠──────┼──┨     ┠──────────┨←────
┃      │  ┃     ┃描画メソッド    ┃編集操作
┃      │  ┃     ┃イベントハンドラ  ┃
┗━━━━━━┿━━┛     ┗━━━━━━━━━━┛
       │
       │
       ↓
┏━━━━━━━━━┓
┃エディットエンジン┃
┠─────────┨
┃ テキストデータ ┃
┠─────────┨
┃  参照メソッド  ┃
┃  編集メソッド  ┃
┗━━━━━━━━━┛
[ index | 前のドキュメント | 次のドキュメント | このドキュメントのソース ]