Mercurial > hg > Papers > 2018 > parusu-master
changeset 23:5e40a4836e0a
Update
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 29 Jan 2018 19:33:44 +0900 |
parents | 82c09c49bb4a |
children | 2c896f2b2d04 |
files | paper/interface.tex paper/master_paper.pdf |
diffstat | 2 files changed, 16 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/interface.tex Mon Jan 29 18:02:51 2018 +0900 +++ b/paper/interface.tex Mon Jan 29 19:33:44 2018 +0900 @@ -34,10 +34,9 @@ この Code Gear は C++ の virtual 関数、 Java の abstract メソッドに対応する。 Queue の Interface を \coderef{queueInterface} に示す。 - \coderef{queueInterface} の3-4行目は 引数の Data Gear 群を定義している。 ここで定義された Data Gear 名は、 定義された Code Gear の引数に対応する。 -例えば \coderef{queueInterface} 10行目 には Queue に要素を挿入する Code Gear を定義しており、引数として 挿入する Queue と 挿入する要素を受け取る。 +例えば \coderef{queueInterface} 10行目は Queue に要素を挿入する Code Gear を定義しており、引数として 挿入する Queue の実装と 挿入する要素を受け取る。 この引数それぞれが \coderef{queueInterface} 3-4行目で定義した queue と data に対応する。 \coderef{queueInterface} の5-6行目は Interface の Code Gear の実行後に継続される Code Gear を定義している。 @@ -48,17 +47,27 @@ つまり、実行後に継続される Code Gear の Input Data Gear に対応する。 この ``...'' は通常のプログラミング言語では可変長引数のような扱いである。 -\coderef{queueInterface} の9-12行目は 振る舞い(API)となる Code Gear を \_\_code として定義する。 +\coderef{queueInterface} の9-12行目は 振る舞い(API)となる Code Gear を \_\_code として定義する。 \_\_code の実体は Code Gear への番号が格納される変数であり、実装した Code Gear に対応する番号を代入する。 この Code Gear の引数には Data Gear と Code Gear 実行後に継続される Code Gear 等を渡す。 引数の型と変数名は Interface で定義されている Data Gear 群に対応するように記述する。 -引数の Data Gear はその Code Gear のInput Data Gear になり、 - -この \_\_code の実体は Code Gear への番号が格納される変数であり、実装した Code Gear に対応する番号を代入する。 +引数の Data Gear はその Code Gear のInput Data Gear になり、 引数の Code Gear の中の引数が Output Data Gear になる。 +例えば\coderef{queueInterface} の11行目は Queue から要素の取り出しを行う Code Gear を定義しており、引数として 取り出すQueue の実装と、Code Gear 実行後に継続される Code Gear を受け取る。 +引数の Code Gear である``\_\_code next(union Data*, ...)``の ``(union Data*, ...)'' は Queue の要素取り出しを行う Code Gear の Output Data Gear であり、 実行後に継続される Code Gear の Input Data Gear になる。 \lstinputlisting[caption=QueueのInterface, label=code:queueInterface]{./src/queueInterface.h} \section{Interface の実装} -\coderef{singleLinkedQueue} は Queue Interface を用いた SingleLinkedQueue の実装である。 +Interface はあくまでも、 Data Gear の振る舞いである Code Gear とその Code Gear で扱われている Data Gear を抽象的に表現した Meta Data Gear であり、実際の実装は別に定義する。 +Interface の実装は、 Interface で定義された Code Gear の変数に実装した Code Gear を代入することで行う。 +この代入する Code Gear を入れ替えることで振る舞いは同じで処理は別の実装を複数表現することが出来る。 + +実装された Code Gear は引数の Data Gear、実際に実装した Data Gear 以外にアクセスすることはない。 +また Interface で定義された API の Code Gear 以外の Code Gear も実装には定義出来る。 +この Code Gear は Java の private メソッドのように扱われる。 +そのため、外から呼ぶのではなく、 Interface で定義された Code Gear から呼ばれる。 +この Code Gear も外から渡された Data Gear に自由にアクセス出来る。 + +\coderef{singleLinkedQueue} は Queue Interface(\coderef{queueInterface}) を用いた SingleLinkedQueue の実装である。 createSingleLinkedQueue(\coderef{singleLinkedQueue} 3-14 行目) は Queue Interface を実装した Data Gear の生成を行っている関数であり、 データ構造の初期化と実装した Code Gear の番号(enum)を Queue Interface で定義している Code Gear を示す変数に入れる(\coderef{singleLinkedQueue} 9-12行目)。 \lstinputlisting[caption=SingleLinkedQueue の実装, label=code:singleLinkedQueue]{./src/singleLinkedQueue.cbc}