goo blog サービス終了のお知らせ 

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

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

仕様書からプログラムソースを生成する方法(Excelの仕様書編 その15:下に続く場合-問題点)。

2006-11-30 18:25:14 | ケータイ

 以前やっていた仕様書からプログラムソースを生成する方法の続きとして、またちょっと書きます。

 いままで、これを利用してBREWの仕様書を出すという話、TextとHTMLは対応しているのですが、メニューに対応していません。

 それは、メニューは問題があって、その問題の解決法を示さないといけないからです。

 で、この問題が解決しないと、イベント部分もできず、さらにそうすると、先ほど書いた、iアプリとも一緒に対応することができないのです。

 ということで、今回は、その問題について書きます。




■問題点

 もし、メニューもやるとすると、以下のような形になると思います。


つまり、メニューの部品を書いて、その下に、メニュー項目を書くという形になります。

イベントと関数も追加したら、さらにその下にイベントを書くことになるでしょう。

ところが、雛形は、

#$REP 5$#$
   繰り返したい内容
$#$REPEND A$#$

のように、REPタグで、何行目からはじめるか、指定してしまいます。
そうすると、部品は5行目から書くのでいいのですが、
  メニュー項目は、部品が終わって、数行開いたところから、
  イベントも書くとすると、メニューが終わった後、、数行開いたところから
書くはずなので、メニューとイベントの書き始めが決まらず、
#$REP 5$#$
のように、行数が指定できません。どうしましょう。




■解決策:かきはじめに、下にあるものを横に書く
 これは、出力を始める前、つまり、VBAのマクロのinitAppDataのなかで、
1.新しいシートをつくり
2.備品までをコピーし
3.メニュー項目はP桁の5行目から、書き始めるように移して
4.イベントはU桁の5行目から、書き始めるように移します。

そうすると、メニュー項目の繰り返しは
#$REP 5$#$
   繰り返したい内容
$#$REPEND P$#$

イベントは
#$REP 5$#$
   繰り返したい内容
$#$REPEND U$#$
となってかけます。

このシートは処理が終了したfreeAppDataで削除します。




このシリーズの次回以降において、もっと具体的な解決策を書いていきます。



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

ソフトウエアの品質管理とか、知識体系のメモ

2006-11-30 17:18:16 | 一人勉強会

■ソフトウエアにおける品質管理
●ISO9000-3と、ISO90003
 ISO9001が品質管理の標準とされたが、それが摘要しにくいということで、ISO900-3が生まれた。その後ISO9001が、2000年に改定され、それに対応する形で、ISO90003が作成されている。

詳しい経緯
http://www.itscj.ipsj.or.jp/topics/tr90003.html

ISO90003のポイント(英語)
http://www.praxiom.com/iso-90003.htm


●共通フレームSLCP-JCF98
 ISO9003、ソフトウエアの品質管理をさらにひろげて、ソフトウエア全般にかんする、供給サイド、需要(取得)サイド両者のソフトウエアにおける「共通のものさし」が必要になった。
 ソフトウエア全般(ソフトウエアライフサイクル)にわたる規約としては、ISO12207があるが、これを日本で、ものさし化?したもの。

概要(体系図:PDF)
http://www.meti.go.jp/policy/it_policy/si_so/si_slcp98.pdf




■品質管理を含んだソフトウエア開発のモデル

●CMMI
ソフトウェア能力成熟度モデル、ソフトウエア開発をレベル化し、そのレベルで達成すべきプロセスについて書いてある。

概要
http://www.netlaputa.ne.jp/~hijk/study/pmp/cmmi_overview.html



■知識体系

●SWEBOK
 ソフトウエア開発の知識体系
団体(英語):
http://www.swebok.org/

●PMBOK
 プロジェクトマネジメントの知識体系
概要
http://pmos.jp/honpo/method/PMBOK.htm
ウィリアムのいたずらページ
http://blog.goo.ne.jp/xmldtp/e/98b7a1f786a573bdbee81394da813653

●ITIL
 運用の知識体系
概要が書いてある本が買える(そこの書籍のところ)
http://www.itsmf-japan.org/itil/



■各社の開発体系(標準)

●富士通SDAS
http://magazine.fujitsu.com/vol57-1/2006_01.html

●NEC WATool
http://www.nec.co.jp/products/pdf/WAtool.pdf


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

BREWでiアプリっぽくリスナーをつけるため、1イベント1関数にする方法(その1:概要)

2006-11-30 16:07:08 | ケータイ

 いままで、シリーズBREWで複数画面を開発する場合の方法論をやってきましたが、

今後の方向性として、
  iアプリの高レベルAPI(Panelを使うやつ)と、
  BREWの画面(コントロールを使うやつ)について、
BREWでいままで書いてきたExcel仕様書をつかって、雛形を切り替えるだけで対応する

という話をやりたいと思ってます。




 で、その話をするためには、iアプリのイベントというか、Javaのイベント処理方法と、BREWのイベント処理方法をあわせないといけません。

 で、そのためには、なにをしたらいいか。

 BREWプログラミング実践バイブルの(私の持っている第1版第2刷では)91ページに書いてある

イベントモデルとコントロールコンテナは表裏の関係にあり、階層化されたコントロールコンテナのフォーカス管理が存在して

とありますので、これを実現すればよさそうに見えます
(これが実現されていないのでBREWはだめだめだ!というのが、上記の本の主張でなので)。

 で、これを実現する方法をこれから書いていくのですが、いっぺんに書くと・・・
 ??なんじゃこりゃ??

 と奇想天外プログラムになってしまううえ、

 そこまでしなくても、実は、BREWとiアプリを仕様書レベルで共通化できるので、

 まあ、順番にやっていって、適当なところでとめることにします。




■方針

 では、どのようにやっていくかというと、

・Javaのように、イベントリスナーをAddして、そのイベントが起きたとき、
 指定された関数に飛ぶようにします

・このイベントを階層化します

・BREWのコントロールとiアプリのコントロールを対応させます
 →その際BREWのコントロールに皮をかぶせて、この中にイベント処理を入れます

・BREWのコントロールの対応アクションとiアプリのコントロールの対応アクション
 を対応させます

 で、まずは、イベントリスナーの話から




■仕様

 つまり、どういうことをやるかというと、

1.あるイベントが発生したときに、ある関数に飛ぶように登録します
  →Javaだと、画面クラス.addなんとかListener(クラス)ってするんですけど、
   BREWには、クラス概念はないので

     add(画面クラス,関数)

   とやることにします。

2.そのイベントがきたら、登録してある関数をディスパッチします

3・結果として、イベントごとに関数を用意すれば、その関数に飛んでくれることになります。

・そして、2のディスパッチを、アプリ-現在表示画面-部品と階層化すれば、
階層化されたコントロールコンテナのフォーカス管理画実現するのですが、

 今回は、上記1、2、3を実現します。
 話を簡単にするため、アプリレベルで考えましょう。




■概要

で、どうやるかというと、

1.まず、イベントを保持しておくリストを用意します。
 そのリストは、こんなかんじ
typedef struct _IEventList
{
	int		eventsu;		//	イベントの数
	int		*kind;		//	判断種別
	AEEEvent	*eCode;			//	コード
	uint16		*wParam;		//	第一詳細引数
	uint32		*dwParam;		//	第二詳細引数
	PFNAEEEVENT 	*func;		//	呼び出し関数
	void		**pArg;		//	引渡し関数
} IEventList;


2.アプリのinitAppDataで、そのイベントリストを生成し、
  イベントを登録します。
	//	イベント領域確保
	if ( (pMe->pElist = IEVENTLIST_Create() )	==	NULL )
	{
		return FALSE;
	}

	//	イベント設定

	//スタート時に、event1_STARTEventを実行
	IEVENTLIST_Add(pMe->pElist,pMe,0,EVT_APP_START,0,0,event1_STARTEvent);

	//クリアキーが押されたら、event1_CLREventを実行
	IEVENTLIST_Add(pMe->pElist,pMe,1,EVT_KEY,AVK_CLR,0,event1_CLREvent);

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

3.イベントがきたら、イベントリストをチェック
  イベントがあったらディスパッチします(下記のIEVENTLIST_HandleEvent)
	if ( pMe	==	NULL )
		return	FALSE;

	if ( pMe->pElist	==	NULL )
		return	FALSE;

	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);

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

4.アプリ終了時(freeAppData)に、解放します
	IEVENTLIST_Release(pMe->pElist);




そうすると、このとき、以下の関数を作ればいいことになります。

//   生成
IEventList *IEVENTLIST_Create();

//   解放
void IEVENTLIST_Release(IEventList *pMe);

//  イベント登録(addListenerにあたる)
int IEVENTLIST_Add(IEventList *pMe,void* pArg,int kind,AEEEvent eCode,
    uint16 wParam,uint32 dwParam,PFNAEEEVENT func);

//  イベント処理(ディスパッチ)
boolean IEVENTLIST_HandleEvent(IEventList *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);

次回は、これらの関数の中身についてです。

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