ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

要件から、クラス図までに落とし込む流れ

2007-06-21 19:45:02 | 開発ネタ

今日説明した内容のメモメモ
(1)要件の動詞部分に着目し、抜き出す
(2)動詞の主語、目的語を取り出し、
   「何々が、何々を、なんとかする」という単文の形にする
   →もし~ならば、「何々が、何々を、なんとかする」と、
    条件がつく場合もある

(3)
  <<クラス図の属性をうめる流れ>>
   ・(2)の名詞、目的語は、「モノ」なので、こいつをクラスとして
    クラス図を発生させ、名称部分を埋める
   ・使っている帳票などを、
      ・第一正規形
      ・第二正規形(トップダウン方式、エンティティは上記クラス)
      ・第三正規形
    まで行い、ER関係を明確にし、クラス図の属性部分を埋める

 <<クラス図のメソッドを埋める流れ>>
   ・(2)の動詞部分に着目し、現状のアクティビティ図を作成する
   ・アクティビティをコンピューター化するとどうなるか考える
   ・開発システムのアクティビティ図に書き換える
   ・アクティビティ図のアクティビティをユースケースとして
    ユースケース図に書き換える(やらなくても可)
   ・(2)の名詞、つまり、主語か、目的語のクラスのメソッドに、
    開発システムのアクティビティ図のアクティビティを埋める

(4)アクティビティの引数を確認し、アクティビティと引数、
   から、ユースケースシナリオを作成し、クラス図のメソッドの引数を
   確認する。




 ただし、これは、モデルクラスのクラス図であり、このモデルに対する、
 ビュー(画面のHTMLとか)、コントロール(StrutsのAction,サーブレットの
 サーブレットクラス)などが、他に存在する。

 その展開方法は、今日は話さなかったのでここまで。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

一般的な編集ソフトの作り方 その18:イベント発生時の動き(表示)

2007-06-21 18:25:49 | Weblog

ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
 ここでは、主に、

  ・メモリ上に、要素をもつ
  ・イベント発生時の動き
  ・画面の構成

ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
  ・印刷
  ・保存
  ・読み込み
  ・カット(切り取り)
  ・ペースト(貼り込み)
  ・プロパティ(属性設定・変更)
  ・表示
  ・要素の選択
  ・(要素の)移動
で、今日は表示についてやります




■表示、再表示のイベントと手順

 表示、再表示のイベントは、
・初めに表示するとき
・プロパティの変更、カット、ペーストなどで、再描画の必要がある
・ウィンドウの再描画、スクロールなどによる、再描画処理
とあります。これらのイベントが起きたら、

(1)背景を再描画します=つまり、現在の状況を消します
   ・場合によっては消しません、また、消す範囲が問題です
    →ウィンドウ全体を消すとは限りません。変更箇所のみで十分です

(2)描画順に従い、描画していきます。
     親から子へ描画するか、子から親へ描画するかは、
     モノによって違います。

(3)もし、ここで書いた方法で、クリックされたとこをを知る場合、
   IDによるRGB値を求めて、それで色を塗ります。

(4)ダブルバッファリングの場合、ここで、DISPLAY処理をして
   表示します




■表示の問題-表示順の問題と表示範囲

 印刷のときに書いたように、表示順の問題は、表示でも起こります。
 そのほかに表示範囲の問題があります。ウィンドウの場合、一部しか表示できないので、画面全体を表示するのでなく、一部分だけ表示することになります。
 とくに、スクロールされた場合、その部分を迅速に表示したいわけです。

 そこで、ウィンドウに関係なく、表示部分全体のグラフィックコンテキストをバッファとして持っていて、実際に表示するときには、表示範囲をそのバッファグラフィックコンテキストからコピーする(BitBltする)っていうのがいいかもしれません。これなら、表示範囲を意識しないで、項目は、表示できるし、スクロールなどは、バッファのコピーをしなおすだけでOKです。




■記述される場所

 イベントが発生するところはmodelクラス、そこから、各Itemのprintメソッドを呼び出すことになります。各Itemのprintメソッドでは、
  ・自分の表示(グラフィックコンテキストへの描画)
  ・子供のprintを呼び出す
 を行います。(どっちが先は、わからない)




ということで、今回も簡単ですが、表示おわり



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ネットイナゴ対策としてのコメント自動集約機能

2007-06-21 17:46:26 | Weblog

 ちょっと思った話(よたばなしです)・・
 ネットイナゴ対策として、にたコメントは集約して表示し、画面上にある一定程度の違いのあるものだけ、表示したら、どうだろう。

 つまり、あるコメントとあるコメントの類似性を比較し、類似性がある一定以上はなれている代表的なものだけ表示する。
 単純に2つの文が似ているかどうかを調べるだけだと、正反対の結論でもにていることになってしまうので、かかりうけまでしらべないといけないけど。。。

例:
(1)年金に不安はない
(2)年金に不安はある
(3)社会保険庁の不祥事が連発しているけど、大丈夫なのか?

(1)と(3)は同意見だが、言葉の重なりは少ない。
類似性を見れば、ある程度あるだろうけど・・・
一方(1)と(2)は、文字だけ見ると似てるけど
いっていることは正反対

なので、係り受けまでしらべて、否定的に使われている場合は、類似度を低くしないといけない。
1から-1までにして、否定されていたら、マイナスをかけるとか・・・



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Winny使用など”データ通信量が多い利用者への追加課金・通信規制を容認 …総務省

2007-06-21 16:02:21 | Weblog

そのうち、アップデートしたら、パッケージ買ったほうが安いとか(^^;)
ここの痛いニュース
“Winny使用など”データ通信量が多い利用者への追加課金・通信規制を容認 …総務省
http://blog.livedoor.jp/dqnplus/archives/992811.html

スパムメールを送る業者に追徴はありだとおもうけど、
追加課金の方法、量によっては・・・

Windowsアップデートを何回もやったり、
プログラムダウンロードをなんどもしてたら、
パッケージ買ったほうが安くなったりして・・(^^;)
なこたーない??

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

一般的な編集ソフトの作り方 その17:イベント発生時の動き(印刷)。

2007-06-20 19:01:16 | Weblog

ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
 ここでは、主に、

  ・メモリ上に、要素をもつ
  ・イベント発生時の動き
  ・画面の構成

ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
  ・印刷
  ・保存
  ・読み込み
  ・カット(切り取り)
  ・ペースト(貼り込み)
  ・プロパティ(属性設定・変更)
  ・表示
  ・要素の選択
  ・(要素の)移動
で、今日は印刷についてやります




■印刷-画面表示同様か、ファイル書き出しか?

 印刷に関しては、ここの印刷で書いたように、

・画面表示のときと同じようにグラフィックコンテキストがあって、それに書き出す
 というのと、
・PSなどで、各要素のファイル出力
 という場合があります。

 ただ、どちらの場合でも大丈夫なようなグラフィック出力メソッドを用意し、それを呼び出すことでも可能です。




■表示順が問題
 ここで問題なのは表示順だったりします。親子関係があるとき、子を配列で持っている場合、その子を表示順にするなどの手があります(親と子、どちらを先に表示するかは場合による)表示順の配列をもったり、リンクを持つのも手かもしれませんけどね・・・




■処理手順

1.印刷が選択されると、たいてい印刷ダイアログが呼ばれる

2.ダイアログが閉じられると、印刷メソッドが呼ばれる。

3.グラフィックコンテキストや出力先を用意して、

4.親から子へ、print(印刷用グラフィックコンテキスト)を呼び出す。

こんなこんなかんじでしょうかね。。




ってことで、簡単だけど、印刷終わり。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

年金問題”社保庁誤入力の主犯は「カナ変換ソフト」か”っていうけど??

2007-06-20 14:00:37 | Weblog

ここのニュース
社保庁誤入力の主犯は「カナ変換ソフト」か
http://www.itmedia.co.jp/news/articles/0706/18/news060.html

によると(以下斜体は上記サイトより引用)


社会保険庁が昭和54年に年金記録の氏名のカタカナ管理を導入した際に、漢字の一般的な読み方をカタカナに変換する「漢字カナ変換辞書」と呼ばれるソフトを開発、使用し、勝手な読み仮名をコンピューターに入力していたことが16日、同庁の資料から分かった。氏名の正しい読み仮名を本人に確認することもせず、読み間違いを前提としたシステムを導入していたわけで、新たな批判を招きそうだ。


うん?新たに照合可能性を広げそうだ・・という朗報
ではなくて
批判なの?なんでなんで(@_@)?

そこの記事をまとめると、こんなかんじ

32年~53年まで 漢字をコード化していた
54年~      読み仮名がわからないので、「漢字カナ変換辞書」を開発
          本人に確認せずに、コンピューターに入力

で、

この結果、例えば「島崎藤村」(シマザキトウソン)は「シマサキフジムラ」、「裕子」(ヒロコ)が「ユウコ」、「秀一」(シュウイチ)が「ヒデカズ」に変換されるなど、誤った読み仮名が多数入力された可能性がある。


で、これが問題というんだけど・・




たしかに、読み仮名が違うということは問題。
ただし、名寄せをする場合、

1.現在登録されている名前を、32年当時の漢字コードに変換して
2.そのコードを、「漢字カナ変換辞書」に変換した読み仮名を求め、
3.2の読みがなで一致するデータも、名寄せ対象とすればいい

から、本当に、全部「漢字カナ変換辞書」でやっているのなら、その部分も、今度新しく作る、5000万人の名寄せ検索プログラムに入れれば(上記の作業をするプログラムを作る)、もっと検索精度があがって、いいことなんじゃあ・・

 むしろ、

 年金記録が5000万件以上も不明になったのは、平成9年の基礎年金番号導入以前の年金記録が、入力ミスにより不完全だったことが主な原因とされ、その入力ミスの多くは手書き台帳からの写し間違いといった単純なミスとみられてきた。


っていうけど、写し間違いのほうが、人がやるミスなので、どーいうミスかわからず、たいへんだと思う(^^;)

そーじゃないかなあ。。
ともかく、基礎年金番号の問題だけで片付けられないことは確かで、
まずは、問題を全部洗い出さないとねー


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その65:プログラミング(27)入出力の自動生成15

2007-06-20 12:29:15 | 開発ネタ

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 今、画面の自動生成で、特にBREWの自動生成版とJavaの画面自動生成を共存させる形でのアプローチをしています。

 前回は、ソースと仕様書の関係で
  ・アプリ起動
  ・各画面
  ・各画面のイベントリスナーのクラス
の仕様書とソースがあることを示しました。

今回は、各画面の仕様書と雛形ソースです。




■各画面に関するソース
ここのgamen1.javaのうち、Shoriのところはいらないかなと。。
 また、画面の中にある再描画や終了処理は、BREWとの対応でここにかきましたが、実際にはイベントリスナー内のメソッドでやってもらったほうがいいかなと・・そー考えると、こんなかんじ・・

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

public class gamen1 {
	
	//	共通領域
	public HashMap	map = null;

	//	画面項目項目
	Display		ff;
	Button		b1;
	Button		b2;
	Text		t1;

	/*
	 * 	生成
	 */
	public gamen1(HashMap map)
	{
		this.map = map;
		map.put("gamen1",this);
		draw();
	}

	/*
	 * 	表示
	 */
	public void draw()
	{
		
		//	フレームを作成する		
		ff	=(Display)map.get("display");

		f.setText("test");
		f.setSize(240,320);
		f.setLayout(null);

		//	アクションを作成する
		gamen1_HandleEvent al = new gamen1_HandleEvent();

		//	ラベル
		Label l1 = new Label(f,SWT.NULL);
		l1.setLocation(10,30);
		l1.setSize(100,30);
		l1.setText("早うちの練習");

		Label l2 = new Label(f,SWT.NULL);
		l2.setLocation(10,120);
		l2.setSize(150,30);
		l2.setText("これは、練習文です。");

		Label l3 = new Label(f,SWT.NULL);
		l3.setLocation(10,70);
		l3.setSize(100,30);
		l3.setText("以下の文を打とう!");
	
		//	テキスト
		t1 = new Text(f,SWT.NULL);
		t1.setLocation(10,160);
		t1.setSize(150,80);
		
		//	ボタン作成		
		b1 = new Button(f,SWT.NULL);
		b1.setLocation(120,70);
		b1.setSize(100,30);
		b1.addSelectionListener(al);
		b1.setText("挑戦する");

		//	ボタン作成		
		b2 = new Button(f,SWT.NULL);
		b2.setLocation(10,250);
		b2.setSize(100,30);
		b2.addSelectionListener(al);
		b2.setText("打ち終わった!");

		//	表示
		f.open();
		DispAppData();

	   	// ウィンドウが破棄されるまでループ
    	         while (f.isDisposed() == false)
    	         {
      		    if (ff.readAndDispatch() == false)
      		    {
        		       ff.sleep();
      		    }
	         }
	}
}

(上記 < > ¥は、本当は半角)




■仕様書

 BREWの場合と違うのは、当時のBREWは、大体縦横幅が決まってました。
 しかし、今回のウィンドウは、縦横幅自由で、実際、
     f.setSize(240,320);
 で大きさを決めています。なので、この指定が必要です。
 それと、コントロール種別はTEXTCTLは、テキストボックスとしても、
他のものはありません。そこで、LABELとBUTTONを導入します。
 そうすると、こんなかんじ。

 セルF3,H3が縦横指定です。




■雛形ソース

そうすると、雛形ソースはこんな感じ
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

public class $#$CELL D2$#$ {
	
	//	共通領域
	public HashMap	map = null;

	//	画面項目項目
	Display		ff;
$#$REP 5$#$
$#$IFKETA C,BUTTON$#$
	Button		$#$KETA B$#$;
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	Text		$#$KETA B$#$;
$#$IFEND$#$
$#$REPEND A$#$

	/*
	 * 	生成
	 */
	public $#$CELL D2$#$(HashMap map)
	{
		this.map = map;
		map.put("$#$CELL D2$#$",this);
		draw();
	}

	/*
	 * 	表示
	 */
	public void draw()
	{
		
		//	フレームを作成する		
		ff	=(Display)map.get("display");

		f.setText("test");
		f.setSize($#$CELL F3$#$,$#$CELL H3$#$);
		f.setLayout(null);

		//	アクションを作成する
		$#$CELL D2$#$_HandleEvent al = new $#$CELL D2$#$_HandleEvent();

$#$REP 5$#$
$#$IFKETA C,LABEL$#$
		Label $#$KETA B$#$ = new Label(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
		$#$KETA B$#$.setText("$#$KETA H$#$");
$#$IFEND$#$
$#$IFKETA C,BUTTON$#$
		//	ボタン作成		
		$#$KETA B$#$ = new Button(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
		$#$KETA B$#$.addSelectionListener(al);
		$#$KETA B$#$.setText("$#$KETA H$#$");
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
		//	テキスト
		$#$KETA B$#$ = new Text(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
$#$IFEND$#$
$#$REPEND A$#$

		//	表示
		f.open();
//		al.disp(map);

	   	// ウィンドウが破棄されるまでループ
    	         while (f.isDisposed() == false)
    	         {
      		    if (ff.readAndDispatch() == false)
      		    {
        		       ff.sleep();
      		    }
	         }
	}
}

(上記 < > ¥は、本当は半角)




■BREWとの共存
 縦横についてはBREWのときは見ないだけだから問題ないと思います。
 BREWのときにあったHTMLCTLがなくなり、BUTTON,LABELが追加された件ですが、BREWの場合、$#$IFKETA C,BUTTON$#$に、BUTTONやLABELがないので、その行は無視されます。
 同様に、JAVAのほうにHTMLCTLを書いても、無視されます。
 そのため、仕様書に、両方の場合のケースを書いておけば、雛形指定に応じて、それぞれにあった部品だけを選んで、ソースにするため、共存できます。




 ということで、各画面はおしまい。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

YouTube日本語版と携帯版

2007-06-20 01:57:35 | Weblog

YouTube日本語版ができたそうな。
ここのニュース
YouTube日本語版が公開に
http://www.itmedia.co.jp/news/articles/0706/19/news064.html

によると(以下斜体は上記サイトより引用)

YouTubeは6月19日、日本語版サイトを公開した。「動画」「カテゴリ」「メンバー登録」など、各種のメニューが日本語化されている(関連記事参照)。

 従来も日本語による動画の検索などは可能だったが、メニュー部分やアカウント作成・ログイン後ページなどが日本語化され、日本人には使いやすくなった。

そうな。ちなみに、そのYouTube日本語版は、
ここ http://jp.youtube.com/




また、YouTube携帯版に関しても
携帯版YouTubeが本格スタート
http://www.itmedia.co.jp/news/articles/0706/16/news012.html

によると(以下斜体は上記サイトより引用)

Verizon独占だったモバイル版YouTubeが、ほかの携帯からも利用できるようになった。

そうな。(ただし、英語版)、そのYouTube携帯版は
ここ http://m.youtube.com/warning
らしい
はじめに、ケータイ定額性にしたほうがいいよみたいな英語のメッセージ
がでて、continueをクリックするとみれる
(パソコンでも見れる。ウィリアムのいたずらの場合、Realがアップグレードされて3GPPに対応して、見れるようになった)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

GoogleのPCを、検索されたくない出版社社長が盗む

2007-06-19 23:30:45 | Weblog

ここの記事
検索されたくない出版社社長、GoogleのPCを盗む
http://japanese.engadget.com/2007/06/18/google-book-search/

によると(以下斜体は上記サイトより引用)

書籍検索に反対する出版社のCEOがGoogleのPC 2台を盗むという怪事件が発生しました。

ことが起こったのは先日ニューヨークで開かれた書籍イベント。出版社Macmillan PublishersのボスRichard Charkin氏は知人と協力してGoogleブースからノートPC 2台を持ち出し、盗難に気付いたGoogleのスタッフが慌てはじめたところに悠然と現れ「盗まれる方の気持ちが分かっただろう」といいつつ返却したとのこと。奇行の説明は「ノートPCのどこにも「盗まないでください」と書いてなかったから」。


は?そんなの書いてないの、当たり前だろう・・・
だから盗みって??と思ったら


別に頭がおかしいわけではなく(たぶん)、Googleが図書館と提携して大量の書籍をスキャンするプロジェクトに対する高邁な抗議活動ということのようです。


どうも、グーグルはインデックスを張って、読めるようにしている

 =著作物を盗んでいるのと同じ

 =著作物にインデックスを張っちゃいけないって書いてないから、
インデックスをはって、著作物をよめるようにする(盗んでいる)

のがいいのか?という論理の抗議らしい。。
(申請者にはインデックスを張らない=ノートPCに盗むなと書いてあれば盗まないというノリ??)

うーん。。。
ただ、どーも抗議運動らしいことはわかったぞ(^^;)




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

韓国版ネットイナゴで自殺者。。。

2007-06-19 19:12:10 | Weblog

ここの記事
悪意のコメント「アクプル」が韓国で社会問題に
http://news.goo.ne.jp/article/mycom/business/it/20070619-09-mycom.html

によると(以下斜体は上記サイトより引用)

このところ、韓国ではブログや掲示板などに寄せられる「アクプル(悪意のあるコメント)」が社会問題化しているのだが


おお、韓国版ネットイナゴ??


アクプルによるものと思われる被害がまた発生した。


ほうほう。。。


○番組出演がきっかけで自殺

事件発生の発端となったのは、テレビ局SBSの「スターキング」という番組だ。この番組は、検索ポータルで人気キーワード1位となり得るほど優れた才能を持つ人、不思議な出来事を体験した人、特異な人物、動物、物などを紹介する番組だ。

この番組に出演した女子高生が、先日自殺してしまうという事件が起こった。この女子高生がスターキングに出場できた理由は、3カ月でなんと約40Kgものダイエットに成功したため。番組ではダイエット前の写真も公開するなどして、彼女の驚くべき変貌ぶりを紹介した。

しかし女子高生が番組に出演した後、彼女のダイエット方法について根拠のない憶測やアクプルが多く掲載された。また、彼女が有名芸能人と一緒に撮った写真がインターネットに流出し、嫉妬したファンたちから言葉の攻撃を受けることになってしまったのだ。女子高生はこうしたアクプル攻撃に耐えられなくなり、自殺したと言われている。


うーん。。。
将来的には、日本でも起こりそうな話なのかしら・・・??



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その64:プログラミング(26)入出力の自動生成14

2007-06-19 17:56:39 | Weblog

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 前々から、画面の自動生成で、前々回は、ソースを示しました。
 前回は、ソースと仕様書の関係で
  ・アプリ起動
  ・各画面
  ・各画面のイベントリスナーのクラス
の仕様書とソースがあることを示しました。

今回は、アプリ起動の仕様書と雛形ソースです。




■BREWの自動生成との関係

 以前、BREWで画面自動生成というお話を書きました。
ここ http://www.geocities.jp/xmldtp/bw_makebrew.htm
それを利用して(修正して)Javaもできればいいので、そいつの
利用を考えます。





■仕様書

 そうすると、アプリ起動の仕様書は、

なので、今回作ろうとするソース
ここ http://blog.goo.ne.jp/xmldtp/e/fb0d5b4fcbab43d4bbeed5ce0f56b759
のtest.javaとくらべると、

モデルクラスの生成と共通領域への値設定は、今回いらないものとして。。
→「モデルクラスの生成」はいれてもいい。
 「共通領域への値設定」は、そのサンプルプログラム固有の話なのでいらない




■雛形ソース

第一画面作成にセルD2が、クラス名をアプリ名(セルB2)とすると、
雛形ファイルはこんな感じになります。

import java.util.*;
import org.eclipse.swt.widgets.*;

public class $#$CELL B2$#${

	/*
	 * 	メイン処理
	 */
	public static void main(String[] args) 
	{
		HashMap map= new HashMap();

		//	フレームを作成する		
		Display ff	=new Display();
		map.put("display",ff);

		//	第一画面作成
		$#$CELL D2$#$ g = new $#$CELL D2$#$(map);
	}

}

(上記< > ¥は、本当は半角です)




ってことで、アプリ起動画面はおしまい



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

一般的な編集ソフトの作り方 その16:イベント発生時の動き(保存)

2007-06-19 13:40:13 | 開発ネタ

ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
 ここでは、主に、

  ・メモリ上に、要素をもつ
  ・イベント発生時の動き
  ・画面の構成

ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
  ・印刷
  ・保存
  ・読み込み
  ・カット(切り取り)
  ・ペースト(貼り込み)
  ・プロパティ(属性設定・変更)
  ・表示
  ・要素の選択
  ・(要素の)移動
で、機能は「読み込み」だったので、今日は書き出し=保存についてやります。




■仕様(書き出しファイル)

 書き出しファイルは、きのうの読み込のファイルとおなじくここにかかれているtest.xmlのような形式です。




■ソースについては・・・

 読み込み同様、ソースについては、すでに、ここでかいています。

また、そこで呼び出される、各要素の共通部分の.saveDataに関しては、
ここに書いてあります。




■処理手順

まず、保存イベントがあがると、
1.上書きのときは2へ
  ファイルを選ぶ場合、書き出しファイルを決めます。

2.決まったら、ファイルをオープンします
  →その処理が上記のソースtest.javaのmain中、
			//	書き出し
			f = new File(outfname); 
			FileOutputStream fo = new FileOutputStream(f); 
			model.save(fo,top);
			fo.close();

    の部分です

3.一気に書き出す場合もありますし、処理しながらの場合もあります
  今回は、XML形式なので、DOMを作成して、それをOutputStreamに変換します
  →この処理がModel.javaのsaveです。
   XMLなので、Domを生成し、一番上の親のtopから
   3-1の処理をさせています。

  3-1.今回の例のように、親子関係がある場合は、
      親のデータを書き出し、
      →共通部分ItemのsaveDataで
       createElementで自分のエレメントを作成するときに
       自分の名前を設定して、
       setAttributeで自分の属性値を設定します

  3-2.子供のデータ部分を取り出し、子供のデータがあれば、
      子供を生成して、子供に対し、3-1の処理を行います。
      →共通部分ItemのsaveDataの「子供のセット」の部分です
      そして、子供のデータを受け取ったら、
      appendChildで子供を付けます。 

  3-3.子供がなければ終わりです。

4.Domが完成したら、DOMSourceを取得し、
  OutputStreamのStreamResultも取得して、
  Transformerで、DomからOutputStreamに変換します。
  →Model.javaの「変換のための元生成」以降の処理ですが、
  やっていることに関しては、ここの説明のほうが詳しいです。




ということで、書き出し(=保存)もできました(^^)v
(つーか、できたことにします)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ネットコミュニティが崩壊するとき

2007-06-18 18:57:51 | Weblog

ここのGIGAZINEの記事
ネットコミュニティが崩壊するとき
http://gigazine.net/index.php?/news/comments/20070617_net_community_collapse/

炎上やネットイナゴの問題などを、体系的に扱っていますね。
ほー。。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その63:プログラミング(25)入出力の自動生成13

2007-06-18 17:42:43 | Weblog

シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 前回から、画面の自動生成で、前回は、ソースを示しました。
 今回は、ソースと仕様書の関係です。




■3種類のソース

 前回、ここ
Javaの画面表示-その13:SWTによる画面表示(その3:複数画面を表示する場合)
http://blog.goo.ne.jp/xmldtp/e/fb0d5b4fcbab43d4bbeed5ce0f56b759


のソースを基に作成すると書きました。
ここのソースは、

・アプリ起動のプログラム(test.java)
・各画面(たとえば第一画面はgamen1.java)

でした。でも、画面の中にサブクラスとして、
・イベントリスナーのクラス

があります。
自動生成は、生成のしやすさから、この3種類をそれぞれわけます。
つまり、クラスは、
・アプリ起動
・各画面
・各画面のイベントリスナーのクラス

となります。
つまり、これらの雛形ファイルを作成することになります。




■3種類の仕様書

雛形ファイルに対して、仕様書が出来ます。
つまり、最終的な仕様書は、 
・アプリ起動
・各画面
・各画面のイベントリスナーのクラス
となります。実際には、各画面と各画面のイベントリスナーのクラスを1つの仕様書であらわし、最終的に前処理で2つのファイルに分ける可能性もありますが、とにかく、生成時に存在する仕様書は、この3つになります。




以下これらの雛形と、仕様書を示していくことになります。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

一般的な編集ソフトの作り方 その15:イベント発生時の動き(読み込み)。

2007-06-18 11:48:03 | 開発ネタ

ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
 ここでは、主に、

  ・メモリ上に、要素をもつ
  ・イベント発生時の動き
  ・画面の構成

ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
  ・印刷
  ・保存
  ・読み込み
  ・カット(切り取り)
  ・ペースト(貼り込み)
  ・プロパティ(属性設定・変更)
  ・表示
  ・要素の選択
  ・(要素の)移動
で、今日は「読み込み」についてやります。




■ソースについては・・・

 読み込みのソースについては、すでに、ここでかいています。

また、ここで、呼び出される、各要素の共通部分のreadDataに関しては、
ここに書いてあります。





■処理手順

まず、読み込みのイベントがあがると、
1.ふつうダイアログなどが出て、読み込むファイルを決めます。

2.決まったら、ファイルをオープンします
  →その処理が上記のソースtest.javaのmain中、はじめの
			File f = new File(infname);
			byte[] b = new byte[(int) f.length()];
			FileInputStream fi = new FileInputStream(f);
			Item	top	= model.read(fi,"doc");
			fi.close();

    の部分です

3.一気に読み込む場合もありますし、処理しながらの場合もありますが、
  とにかく読んで、メモリにデータを入れていきます。
  →この処理がModel.javaのreadです。
   XMLなので、Domにいれて、一番上の親を呼び出し、
   3-1の処理をさせています。

  3-1.今回の例のように、親子関係がある場合は、
      親のデータをセットし、
      →共通部分ItemのreadData
       自分の名前を設定する
       自分の属性値を設定する
の部分です

  3-2.子供のデータ部分を取り出し、子供のデータがあれば、
      子供を生成して、子供に対し、3-1の処理を行います。
      →共通部分ItemのreadData
      子供の設定の部分です

  3-3.子供がなければ終わりです。




■ファイル
 今回、このような形式を実行するため、ここに書かれているtest.xmlのような形式、つまり、

<自分のタグ  属性項目=属性値・・・>
  <子供のタグ・・・・>
    :
    :
  </子供のタグ>
</自分のタグ>

のように、
  自分の名前をタグ名
  自分の属性値を属性に
  子供を自分の中に
書くようなXMLにしています。

 これは、XMLでなくてもOKで、たとえば、子供を親がラップする(ネットワークで、TCPのパケットをIPのパケットがラップして、それをイーサネットのパケットがラップしているように)形でも同じように出来ます。




■それ以外のフォーマット
ただし、親子関係でなく、要素を配列やベクターに入れる方法も書きましたが、その場合は、このような親子ではなく、要素を順々に書いて行き、処理する形になります。




ということで、簡単ですが、読み込みはおしまい。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする