diff jungle.tex @ 34:34ee004791a3

Modify
author tatsuki
date Wed, 30 Nov 2016 16:24:29 +0900
parents 388da5c83f48
children eea008c85b3b
line wrap: on
line diff
--- a/jungle.tex	Tue Nov 29 22:15:00 2016 +0900
+++ b/jungle.tex	Wed Nov 30 16:24:29 2016 +0900
@@ -1,8 +1,8 @@
 \section{非破壊的木構造データベースJungle}
-Jungleは等研究室が開発を行っているデータベースで、Javaを用いて実装されている。
+Jungleは、当研究室が開発を行っているデータベースで、Javaを用いて実装されている。
 
 Jungleは名前付きの複数の木の集合からなり、木は複数のノードの集合で出来ている。
-ノードは自身の子のListと属性名と属性値の組でデータを持ち、データベースのレコードに相当する。
+ノードは自身の子のリストと属性名と属性値の組でデータを持ち、データベースのレコードに相当する。
 通常のレコードと異なるのは、ノードに子供となる複数のノードが付くところである。
 Jungleでは、親から子への片方向の参照しか持たない。
 
@@ -23,7 +23,8 @@
 \end{figure}
 
 \newpage
-通常のRDBと異なり、Jungleは木構造をそのまま読み込むことができる。例えば、XMLやJsonで記述された構造を、データベースを設計することなく読み込むことが可能であり、実際、そのような機能が実装されている。この木をそのままデータベースとして使用することも可能である。しかし、木の変更の手間は木の構造に依存する。
+通常のRDBと異なり、Jungleは木構造をそのまま読み込むことができる。例えば、XMLやJsonで記述された構造を、データベースを設計することなく読み込むことが可能である。
+この木を、そのままデータベースとして使用することも可能である。しかし、木の変更の手間は木の構造に依存する。
 %特に非破壊木構造を採用しているJungleでは木構造の変更にo(1)からo(n)の様々な選択肢がある。つまり、アプリケーションに合わせて木を設計しない限り、
 特に非破壊木構造を採用しているJungleでは、木構造の変更の手間はO(1)からO(n)となりえる。つまり、アプリケーションに合わせて木を設計しない限り、
 十分な性能を出すことはできない。逆に、正しい木の設計を行えば高速な処理が可能である。
@@ -35,7 +36,7 @@
 
 \subsection{木の生成}
 初めにJungleにおける木の生成について述べる。
-Jungleは複数の木を一意な名前を利用して管理しており、名前を利用することで作成、編集、削除を行う。
+Jungleは複数の木を、名前を利用して管理しており、名前を利用することで作成・編集・削除を行う。
 以下にJungleクラスが提供している木の生成・管理を行うAPI(表\ref{jungleAPI})を記す。
 \begin{table}[htb]
 \begin{center}
@@ -72,37 +73,37 @@
 \caption{Childrenに実装されているAPI}
 \begin{tabular}{|p{8em}|p{14em}|}                                  \hline
 {\tt int size()}  &  子供の数を返す。\\ \hline
-{\tt <Either Error,TreeNode> at(int num)} &ノードが持つ子供の中から、 変数numで指定された位置にある子どもを返す。   \\ \hline
+{\tt <Either Error,TreeNode> at(int num)} &ノードが持つ子供の中から、 変数{\tt num}で指定された位置にある子ノードを返す。   \\ \hline
 \end{tabular}
 \label{Children}
 \end{center}
 \end{table}
 
 
-関数{\tt children.at(int num)}が返す{\tt Either\textless Error,TreeNode\textgreater} オブジェクトは、{\tt isA() }でErrorかどうかをチェックすることができる。
-Errorでない場合は{\tt b()}でTreeNodeオブジェクトを取り出すことができる。
+関数{\tt children.at(int num)}が返す{\tt Either\textless Error,TreeNode\textgreater} オブジェクトは、{\tt isA() }で{\tt Error}かどうかをチェックすることができる。
+{\tt Error}でない場合は{\tt b()}で{\tt TreeNode}オブジェクトを取り出すことができる。
 
 
 \begin{table}[htbH]
 \begin{center}
 \caption{Attributeに実装されているAPI}
 \begin{tabular}{|p{10em}|p{12em}|} \hline
-ByteBuffer get(String key)   &ノードが持つ値から、属性名 keyとペアの属性値をByteBuffer型で返す。 \\ \hline
-String getString(String key) &ノードが持つ値から、属性名 key とペアの属性値をString型で返す。 \\ \hline
+{\tt ByteBuffer get(String key)}   &ノードが持つ値から、属性名 {\tt key}とペアの属性値を{\tt ByteBuffer}型で返す。 \\ \hline
+{\tt String getString(String key)} &ノードが持つ値から、属性名 {\tt key} とペアの属性値を{\tt String}型で返す。 \\ \hline
 \end{tabular}
 \label{Attribute}
 \end{center}
 \end{table}
 
  \newpage
-以下にルートノードの2番目の子供から、属性名 nameとペアになっている属性値を取得するサンプルコードを記述する。
+以下にルートノードの2番目の子供から、属性名 {\tt name}とペアになっている属性値を取得するサンプルコードを記述する。
 \begin{lstlisting}[frame=lrbt,numbers=left,label=getAttributeCode]
 JungleTree tree = jungle.getTreeByName("TreeName");
 TreeNode root = tree.getRootNode();
 Children children = root.getChildren();
 Either<Error,TreeNode> either = children.at(2);
 if (either.isA()) 
-    throw new IllegalStateException();
+    throw new IOException();
 TreeNode child = either.b();
 Attribute attribute = child.getAttribute();
 String value = attribute.getString("name");
@@ -111,20 +112,20 @@
 \begin{enumerate}
 \item Jungleから名前を指定して木を取得する。 
 \item 取得した木のルートノードを取得する。
-\item 木のルートノードからChildren型の子ノードを取得する。
+\item 木のルートノードから{\tt Children}型の子ノードを取得する。
 \item 変数{\tt children}から2番目の子供を取得する。
 \item 2番目の子供が取得できたかを調べる。
 \item 取得できていなかった場合{\tt Exception}を投げる。
 \item 取得に成功していた場合、{\tt either}から子ノードを受け取る。
-\item 取得した子ノードからAttributeクラスを取得する。
+\item 取得した子ノードから{\tt Attribute}クラスを取得する。
 \item 取得した{\tt attribute}から属性名 {\tt name}がペアの値を取得する。
 \end{enumerate}
 
 
 \subsection{NodePath}
-Jungleでは、木のノードの位置をNodePathクラスを使って表す。
-NodePathクラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。また、ルートノードは例外として-1と表記される。
-NodePathクラスが{\tt < -1,1,2,3>} を表している際の例を図\ref{NodePath}に記す。
+Jungleでは、木のノードの位置を{\tt NodePath}クラスを使って表す。
+{\tt NodePath}クラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。また、ルートノードは例外として-1と表記される。
+{\tt NodePath}クラスが{\tt < -1,1,2,3>} を表している際の例を図\ref{NodePath}に記す。
 \begin{figure}[h]
 \begin{center}
 \includegraphics[height = 6cm , bb=0 0 568 455]{images/nodePath.pdf}
@@ -138,8 +139,8 @@
 \newpage
 
 \subsection{木の編集API}
-Jungleの木の編集はJungleTreeEditorクラスを用いて行われる。
-JungleTreeEditorクラスには編集を行うために、表\ref{editor}で定義されているAPIが実装されている。
+Jungleの木の編集は{\tt JungleTreeEditor}クラスを用いて行われる。
+{\tt JungleTreeEditor}クラスには編集を行うために、表\ref{editor}で定義されているAPIが実装されている。
 
 \begin{table}[htb]
 \begin{center}
@@ -154,9 +155,9 @@
 {\tt Either< Error, JungleTreeEditor> deleteAttribute( NodePath path,String key)}&
 変数{\tt path}で指定した場所にあるノードが持つ、属性名 変数{\tt key}とペアで保存されているデータを削除する。\\ \hline
 {\tt Either<Error, JungleTreeEditor> moveChild( NodePath path,int num,String move)} &
-変数{\tt path}で指定した場所にある、ノードの変数numで指定された位置の子供を変数{\tt move}の方向に移動させる。 \\ \hline
+変数{\tt path}で指定した場所にある、ノードの変数{\tt num}で指定された位置の子供を変数{\tt move}の方向に移動させる。 \\ \hline
 {\tt Either<Error, JungleTreeEditor> pushPop()} &
-ルートノードの上に新しいルートノードを追加する線形のTree等を作る際に使用することで計算量をO(n)からO(1)にできる。\\ \hline
+ルートノードの上に新しいルートノードを追加する。線形の木を作る際に使用することで計算量をO(n)からO(1)にできる。\\ \hline
 {\tt Either<Error, JungleTreeEditor> success()}  &
 木へ行った変更をコミットする。自分が編集を行っていた間に、他のJungleTreeEditorクラスによって木が更新されていた場合、コミットは失敗する。 \\ \hline
 \end{tabular}
@@ -165,11 +166,11 @@
 \end{table}
 
 
-編集後に返されるJungleTreeEditorクラスは、編集後の木構造を保持しているため、編集前の木構造を保持しているJungleTreeEditorクラスとは別のオブジェクトである。
-編集を行った後は、関数{\tt editor.success()}で今までの編集をコミットすることができる。他のJungleTreeEditorクラスによって木が更新されていた場合はコミットは失敗し、{\tt success()}はErrorを返す。
+編集後に返される{\tt JungleTreeEditor}クラスは、編集後の木構造を保持しているため、編集前の木構造を保持している{\tt JungleTreeEditor}クラスとは別のオブジェクトである。
+編集を行った後は、関数{\tt editor.success()}で今までの編集をコミットすることができる。他の{\tt JungleTreeEditor}クラスによって木が更新されていた場合はコミットは失敗し、{\tt success()}は{\tt Error}を返す。
 その場合は、木の編集を最初からやり直す必要がある。
 
-以下にJungleTreeEditorクラスを用いて、木の編集を行うサンプルコードを記述する。
+以下に{\tt JungleTreeEditor}クラスを用いて、木の編集を行うサンプルコードを記述する。
 
 \begin{lstlisting}[frame=lrbt,numbers=left,label=editorCode]
 JungleTreeEditor editor = tree.getTreeEditor();
@@ -182,13 +183,13 @@
 \end{lstlisting}
 
 \begin{enumerate}
-\item 関数{\tt tree.getEditor()}で編集を行う木から、JungleTreeEditorクラスを取得する。 
-\item 次に変更するノードの場所を示す、NodePathクラスを作成する。
+\item 関数{\tt tree.getEditor()}で編集を行う木から、{\tt JungleTreeEditor}クラスを取得する。 
+\item 次に変更するノードの場所を示す、{\tt NodePath}クラスを作成する。
 \item 関数{\tt editor.addNewChildAt()}を用いて、変数{\tt path}で指定したノードの子供の0番目に子ノードを追加する。
-\item 返り値の変数{\tt either}がErrorクラスを保持していないか(編集に失敗していないか)を確認する。
-\item Errorクラスを保持していた場合Exceptionを投げる。
-\item 編集に成功していた場合、編集後のJungleTreeEditorクラスを取得する。
-\item 取得したJungleTreeEditorクラスを用いて木の変更をコミットする。
+\item 返り値の変数{\tt either}が{\tt Error}クラスを保持していないか(編集に失敗していないか)を確認する。
+\item {\tt Error}クラスを保持していた場合{\tt Exception}を投げる。
+\item 編集に成功していた場合、編集後木を持った、{\tt JungleTreeEditor}クラスを取得する。
+\item 取得した{\tt JungleTreeEditor}クラスを用いて木の変更をコミットする。
 \end{enumerate}
 
 これらのAPIにより、Jungleは木構造を格納、編集する機能を持っている。