2011-05-01から1ヶ月間の記事一覧

簡単な入れ子構造を扱う #20

いけなくない。 locationsそのものを公開することが問題のポイントなので、 Itemが利用しているTreeSetを要素数0にできないものに置き換えるか、 Itemが外に提供するセットを要素数0にできないものに置き換えればいい。 ここでは後者の方法をとってみる。 変…

簡単な入れ子構造を扱う #19

Itemがlocationsをパッケージ内にそのまま公開し、 また、Indexがそれを外部に直接公開しているのは追加や削除の利便性のためだが、 locationsが持つ位置情報を全て削除してしまうと、 「位置情報リストは1個以上の重複のない位置情報の並びである」 の制約…

簡単な入れ子構造を扱う #18

索引は0個以上の重複のない索引項目の並びであり、 索引項目は項目名と位置情報リストから成り、 位置情報リストは1個以上の重複のない位置情報の並びである。 項目名と位置情報はそれぞれがある順序集合の元であり、 索引における索引項目の並びは項目名に…

平方根の2進数表記

\documentclass{jsarticle} \begin{document} \section*{平方根の2進数表記を得る開平} 正の実数$x$の正の平方根$\sqrt{x}$を2進数で表記した時、 第$i$位、つまり$2^i$の桁の値を$b_i$とする。 すなわち、 \begin{eqnarray*} \sqrt{x} = \sum_{i \in \mathb…

簡単な入れ子構造を扱う #17

XMLは手段であって目的ではないと書くと他のデータ提示方式もあった方がいいのか。 school.csv ねんちょうさん,さくら,Arlene,154 ,,Bret,170 ,,Cindy,157 ,もも,Don,161 ,,Emily,153 ねんしょうさん,ひまわり,Franklin,167 ,ちゅうりっぷ,Gert,164 ,,Harvey…

簡単な入れ子構造を扱う #16

SchoolBuilderはスキーマschool.rncにinvalidなXMLデータの一部も受け入れる。 一つは、要素内にテキストが含まれているようなもの。 これは単にそのテキストを無視する。 もう一つは、school、grade、group要素が子要素を持たないもの。 schoolの場合は子デ…

簡単な入れ子構造を扱う #15

XMLで書かれたものからSchoolオブジェクトツリーを構築できるようにしてみた。 SchoolBuilder.java import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import javax.xml.parse…

最も古いデータを捨てるリスト #3

適当に応用。 EverchangingPane.java import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Paint; import java.awt.R…

最も古いデータを捨てるリスト #2

スレッドセーフではないので少し変更してみた。 ビュー用のリストを得るたびにコピーするのでコストは高そう。 追加のたびにビュー用のコピーを作成するCopyOnWriteArrayList的方法もとれるが、 リストへの追加が多い場合は同様にコストが高くつく。 コピー…

最も古いデータを捨てるリスト #1

要は、制限された容量を持ち、それを超えてデータを追加する場合は最も以前に追加されたデータを消すリスト。 使い方の制約として、データの追加は1個ずつ、参照は格納データ全部を追加された順に走査する、ということにする。 素直に楽するならLinkedListで…

簡単な入れ子構造を扱う #14

SchoolとGradeはSetContainerの拡張で済む。 school/School.java package school; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; public class School extends SetContainer<Grade> { public Grade add(String name) </grade>…

有限桁の2進数(ついでに5進数)は有限桁の10進数で表現できる

\documentclass{jsarticle} \begin{document} \section*{2進数表現の有限桁小数は10進数表現でも有限桁で表すことができる} $2^{-m} \ (m \in \mathbf{N})$に$10^m$を乗ずると、 $2^{-m} 10^m = 2^{-m} (2^m 5^m) = 5^m \in \mathbf{N}$であるので、 $2^{-m}…

簡単な入れ子構造を扱う #13

Studentは同じであり、Groupもほとんど変わり映えしない。残念。 school/Student.java (reproduction) package school; public class Student { private String name; private int height; Student(String name, int height) { if (name == null) throw new …

簡単な入れ子構造を扱う #12

SchoolやGradeはLinkedHashMapを利用したコンテナ要素の管理をおこなっている。この機能を取り出す。 school/SetContainer.java package school; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; abstract class…

簡単な入れ子構造を扱う #11

次はSchoolやGrade、Groupのようにコンテナとしての機能を持つものから抜き出す。 ただ、考えてみるとIterableを実装すべきであること以外に共通性はない気がする。 そこで新たにクラスやインタフェイスを作ることなくIterableを実装することという制約を課…

簡単な入れ子構造を扱う #10

まずは名前で識別される性質を持っている側面からのGradeやGroupから抜き出す。 Studentも名前を持つが名前だけで識別されるわけではないので仲間ではないと考える。 school/Named.java package school; interface Named { String getName(); } school/Named…

簡単な入れ子構造を扱う #9

同じような意味を持つコードが並ぶとまとめてみたくなることもあるだろう。 意味をまとめるために無駄にたくさんのクラスを作るやり方は混沌を呼び寄せる楽しみになる。

簡単な入れ子構造を扱う #8

何ということはない。大枠はバインディングツールが自動生成していたものを手書きしたようなものだ。 school/School.java package school; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; public class School …

簡単な入れ子構造を扱う #7

スキーマと利用側ソースとバインディングツールの組み合わせは楽でいいが、 その楽さゆえに細かい扱いをしようとすると面倒さが増えていく。 さらに、結局のところ、このやり方は*XML*とのやり取りのためにあるという点がひっかかる。 目的は入れ子構造のデ…

簡単な入れ子構造を扱う #6

RELAX NGの短縮記法からJAXBでXMLデータを扱うということならわざわざxjcを介するまでもない。 Relaxer自身にJAXBのやり方で利用できるようにソースを生成してくれるオプションがある。 relaxer -dir.package -java.package:school -java.jaxb school.rnc利…

簡単な入れ子構造を扱う #5

スキーマ言語からxjcを介してJAXBを使うなら結局XML Schemaの利用が王道であるわけで。 でも生のXMLなんてできれば扱いたくない。ということで再びRelaxerの出番。 relaxer -xsd school.rnc xjc -p school school.xsd生成されたschool.xsdのルート要素のtarg…

簡単な入れ子構造を扱う #4

せっかくだから純正のJAXBでバインディングを行ってみる。 JDK付属のxjcにはスキーマ言語としてRELAX NGを受け付ける(はずの)オプションがある。短縮記法用もある。 $ xjc -relaxng-compact -p school school.rnc parsing a schema... [ERROR] syntax erro…

簡単な入れ子構造を扱う #3

バインディングにはとりあえず今は亡きRelaxerを使用してみる。手元のRelaxerは1.1ベータ(20070814)版だ。 relaxer -dir.package -java.package:school school.rnc生成されたクラス群を使用してみる。 SchoolUser.java import java.io.IOException; import…

簡単な入れ子構造を扱う #1

┌ [ねんちょうさん] ┬ [さくら] ───┬ [Arlene, 154cm] │ │ ├ [Bret, 170cm] │ │ └ [Cindy, 157cm] │ └ [もも] ────┬ [Don, 161cm] │ └ [Emily, 153cm] ├ [ねんしょうさん] ┬ [ひまわり] ─── [Franklin, 167cm] │ ├ [ちゅうりっぷ] ┬ [Gert, 164cm] │ │ ├ [Ha…

簡単な入れ子構造を扱う #2

見た目通りに木構造として扱うならXMLスキーマ言語で構造を表現し、対応するJavaクラスを自動生成するのが手軽だろう。 使用するスキーマ言語としては、寂寥感漂うRELAX NG界だが短縮記法は書くのも理解するのも楽だ。 school.rnc element school { element …