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

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

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

2007-07-03 20:43:49 | 開発ネタ

 シリーズ「開発の初めから順番に書いていってみる」の続きです。

 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm)

 プログラミングでは決定表と自動生成のお話をします。
 今、画面の自動生成で、特にBREWの自動生成版とJavaの画面自動生成を共存させる形でのアプローチをしています。そのうち、今はイベントリスナーについて扱い、前回、その問題と解決の方向性を示しました。
 今回は、そのイベントリスナー部分のソースを示します。




■画面イベントクラスソース

 いま、サンプルにしているソースはここのgamen1.javaで、イベントは、gamen1クラスのインナークラス、
gamen1_HandleEventクラスです。

これを以下のように、単体のクラスにします。
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

public class gamen1_HandleEvent extends
					 SelectionAdapter
{
	gamen1	g = null;

	/*
	 * 	画面つきコンストラクタ
	 */
	public	gamen1_HandleEvent(gamen1 g)
	{
		this.g	=	g;
	}
	
	/*
	 * 	セッター(画面)
	 */
	public	void	setGamen(gamen1	g)
	{
		this.g	=	g;
	}
	
	/*
	 * 	ボタンが押されたときの処理
	 */
	public void widgetSelected(SelectionEvent e) 
	{
		Object o = e.getSource();
		shoriPro("widgetSelected",e.getSource());
	}
	

	/*
	 * 	すべての処理
	 */
	public void shoriPro(String eventCode,Object o) 
	{
		//  まだ、画面がセットされていなかったら、抜ける
		if ( g	==	null )
		{
			return;
		}

		//	仕様書に書いた条件分、ならぶ
		if ((eventCode.equals("widgetSelected") == true) &&	
			( o.equals(g.b1)== true) )
		{
			//	ここで処理呼び出し
			//	g.shori.shori1(g);
			return;
		}

		//	仕様書に書いた条件分、ならぶ
		if ((eventCode.equals("widgetSelected") == true) &&	
			( o.equals(g.b2)== true) )
		{
			//	ここで処理呼び出し
			//	g.shori.shori2(g);
			return;
		}
	}
}




■つまり
つまり手順としては、
1.クラスを(内部クラスではなく)外部におき
2.生成するとき、画面をもらってしまい
3.イベントがおきると、全部shoriProに流れるようにして、
4.そこで振り分ける。

なお、振り分け後の動きですが、
・あらかじめ、画面クラスに、処理を書いた処理クラス部分を生成しておいて
 →属性名が、shori
・そのイベントごとに、呼び出します
・なお、書き出し内容は、仕様書に書くようにします。




ってなかんじです。次は仕様書についてです。



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

Javascript(AJAX)で、レコードを扱う際、連想配列の配列にすると便利

2007-07-03 17:34:40 | JavaとWeb

 Javascriptで、というか、AJAXとかで、返り値がXMLで来る際に、レコードのノードが何回も繰り返し、そのレコードの中に、データが入っているっていうようなケース、多くないですか?

たとえば、RSS
ここ http://dailynews.yahoo.co.jp/fc/rss.xml
を見てもらうと分かるように、itemというタグのノードが繰り返しになっていて、itemの中に、title,link,pubDataというのが入っているようなケース、

 これ以外でも、RDBのデータを取得して、XMLにすると、こんな感じになるんだけど、このとき、このデータをJavascriptで簡単に操作したい場合、どうするか?という話。

 たとえば、上記のRSSのの場合、5番目のtitleが欲しいとき、
 data[4]["title"]
 のように、欲しい番目-1に項目名で取得できると楽ですよね。




 それには、1item分(=1レコード分)を、

   rec[項目名]=値

 の形で連想配列にいれて、このrecを配列に入れればいい。
 (つまり、連想配列の配列・・まとめていうと、よーわからん ^^;)

 そのための関数(もちろんJavascript)
//*==============================================//
//*	関数:getTableData()		  *//
//*	内容:XMLでTable型の中身取得	  *//
//*		xtree:ドキュメント		  *//
//*		rectag:レコードのタグ	  *//
//*==============================================//
function getTableData(xtree,rectag)
{
	retData	=	new Array();

			//	結果を取得する
	list	=	xtree.getElementsByTagName(rectag);
	if ( list	==	null )
	{
		return	retData;
	}

	for(recpos = 0 ; recpos < list.length ; recpos ++ )
	{
		node	= list.item(recpos);
		rec = new Array();
		for(cellpos = 0 ; cellpos < 
                       node.childNodes.length;cellpos++)
		{
			cellData =node.childNodes[cellpos];
			// エレメントのとき(nodeType=1)
			if ( cellData.nodeType == 1)
			{
				key = cellData.nodeName;
				val	=	"";
				if ( cellData.hasChildNodes())
				{
	 				val = cellData.firstChild.text;
				}
				rec[key] = val;
			} 
		}
		retData[recpos]	=	rec;
	}
	return	retData;
}

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

みたいな関数をつくると実現できる。




このとき、RSS,たとえば、
http://dailynews.yahoo.co.jp/fc/rss.xml
のYAHOOニュースを受け取ったとして、
そのXML(RSS)を受け取った返り値がretObjだったとすると、

	xtree = retObj.responseXML;
	RssList	=	getTableData(xtree,"item");
	for(i=0 ; i < RssList.length ; i++)
	{
		document.write(RssList[i]["title"]+"<BR>");
	}

(上記< > ¥は、本当は半角)
 
みたいなかんじでかくと、タイトル名を書き出す。
getTableData(xtree,"item");
で、itemをレコードのタグとして、その結果をRssListにいれているので、
あとは、
RssList[i]["title"]
で、i番目のtitleをかきだす。

いじょう

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

ブロガーの“生の声”を抽出する評判検索

2007-07-03 13:40:02 | Weblog

ここ
ブロガーの“生の声”を抽出する評判検索
http://headlines.yahoo.co.jp/hl?a=20070703-00000026-zdn_n-sci

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

 リクルートと電通などが出資するブログウォッチャーは、ブロガーの生の体験談だけを抽出できるという評判検索サイト「SHOOTI」(シューティー)を7月3日に公開する。東京工業大学の奥村学准教授と共同開発したサービスで、ブログやレビューサイトなどの記事からうわさや他人の受け売りなどを排除し、本人の体験談と評価だけを抽出できるという。


そうな。。で、


書き込みが書き手本人の体験談かどうかを判定する仕組みは、ブログウオッチャーが開発した。文章の構文を解析し、主語や係り受けなどから誰の体験について書いているかを判断。他人の話の受け売りや、ニュースの引用などを排除できる仕組みにした。


ただ、なにかもらってたりすると、
本人が体験してても、良く書く気が・・(^^;)




 でも、行為者が確実に分かるなら、アクティビティ図のスイムレーンはわかるので、あとは動詞は抽出できるから、並列と条件を区別できるようにして(係り受けなどから)要求仕様から、アクティビティ図を書き出せるようにしてくれないかなあ。。

 あと、最近思うんだけど、ソースとか、コマンドだけ、ブログから抽出してくれるの、できないかなあ。。で、見たいものだけ、クリックすると、そのブログが見れると。。

 いや、ブログだけじゃなく、すべてのサイトでそれやってくれると便利なんだけど(説明が長い割りに、なにも書いてないサイトが結構あるので)

 どーしてないんだろう。。

 。。。スポンサーがいないからか(^^;)

 IPAが。。やるわけねーな(^^;)

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

オブジェクト指向で開発の最初から最後までの手順例-その2:要求分析の手順。

2007-07-03 10:46:11 | 開発ネタ

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、2回目の今日は、まず、なにをやるのか?と、手順のうち、要求分析の手順について書きたいと思います。




■流通システム開発センターのXML-EDIサブセットに出てくる発注やります。

 やるものについてですが、昨日はっきり書きませんでしたが、
 
 流通システム開発センターのXML-EDIサブセットというのがあり、そこで、「概説書」というのを出しています(入手方法はこちら
 ウィリアムのいたずらは、これの機能追加バージョンはもっていないので、そのまえのバージョンの「発注」について、

 発注電文(というか伝票というか)を、入力、一覧、修正できるものを作りたいと思います(卸売りに送信は範囲外、また、発注以外のほかの機能は範囲外とします。キャンセル、返品は入りません)。

 なお、発注とは、「小売」が「卸売り」に対して発注する。という意味の発注です。

 なお、実際には、「概説書」は持って”いない”ことを前提に進めます
(必要な部分は、ここで書いていきます)




■要求仕様の手順

要求仕様の手順は以下のとおり
(0)資料集め
  これは、終わっているものとします。
  概説書の内容があればOK

(1)エンティティの抽出
  ・登場人物と、そこに流れるモノの確認です

(2)機能要求をまとめる
  上記エンティティが繰り広げる業務をまとめる

(3)その要件の動詞をとりだす

(4)動詞から、
   (どういうときに)誰が、何を、どうするという
   単文にまとめる

(5-1)データ解析ルート

(5-1-1)データの項目をだしてくる
 ・今回は、概説書に書いてあります

(5-1-2)正規化理論を利用し、ER図にまとめる

(5-2)プロセス解析ルート

(5-2-1)アクティビティ図をつくる
 上記の単文から、(たいてい主語なのですが)担当者を割り出し、
 そこに動詞を業務順に置く

(5-2-2)今回、コンピューター化するものを取り出し
 ユースケース図にまとめる

(5-2-3)それをもとに、今回コンピューター化した場合の
 業務の流れをアクティビティ図に書く

(6)非機能要件をまとめる

ちなみに、このあと

(7)モデルのクラス図を作成する
手順は、
(5-1)をもとに、
 ER図のエンティティをクラスとし、そこのデータを属性として、
(5-2)のユースケースを
 メソッドとして、そのクラス図に入れる

という作業に続きますが、これは、要求分析より先の話とします。




ということで、今回はおしまい。
次回のこのシリーズは、登場人物のお話です。




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