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

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

一般的な編集ソフトの作り方 その21:画面の構成(概要)

2007-06-26 19:34:55 | 開発ネタ

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

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

ということで、前回、やっと「イベント発生時の動き」が終わりました。

 今回から、「画面の構成」に入りますが、今日は概要です。




■一般的な編集ソフトの画面構成

 編集ソフトは、一般的に画面構成は、似ています。

・メインとなるウィンドウがあり、ここに編集内容が表示されます。
・そのウィンドウにメニューがついていることが多いです。
・それ以外のウィンドウもあり、選択したものの属性値の設定や
 次に作成するものを選択できたりします。

 で、さらに、そのメインのウィンドウについているメニューの並び順、
内容も決まっています。

 左から、
  ・ファイル:保存、読み込み、印刷など、ファイル全体の操作
  ・編集:コピー、ペースト、カットなど、オブジェクトの操作
  ・属性設定など、選択オブジェクトに対する操作
  ・ツール:その他のソフトを使ったり・・などなど
  ・ヘルプ:ヘルプとバージョン情報
(ヘルプが一番右)

 です。まあ、違う編集ソフトを作っちゃいけないということではないと思うので、それ以外のものもあるかもしれませんが。。。

 なお、メニューの横に「...」とある場合は、サブメニューがあるようです。




■そこで問題点

 そこで問題点があるのは、

・別ウィンドウにある、属性値のウィンドウの値が変化したら、
・今まで書いてきた、「イベント発生時の動き」のような手順で、
・メインウィンドウを書き換えないといけないことがある

というように、ウィンドウ間の操作が起こることです。




 これを、行うための共有メモリの話(昔良く書いた、「カオル姫方式」)について、次回は書きたいと思います。



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

ワークフローの実装方法

2007-06-26 16:34:58 | Weblog

 上司が、申請書類等(企画書類なども)を眺めて、良ければ承認、悪ければ承認を拒否して、全員承認されたら、次の作業に入るという、承認のワークフローについてのお話。

 このワークフローの実装方法というのは、一般的(汎用的)に作成することが可能で、以下のように行います。




(1)ワークフローの流れを定義した、「承認フローテーブル」を作成します

 ある人が、ある申請書を作成したら、何番目に誰が承認するということを記述した、「承認フローテーブル」を作成します。項目は、以下のとおり
	申請者ID
	承認者ID
	申請書種別
	順位
	承認種別



 承認種別とは、同順位の人が、1人でも承認すればOKなのか、全員承認しないといけないのか(ただし、承認順は、同順位内だったら、だれから承認してもOK)をしめします。

(2)申請書を作成したら、「承認フローテーブル」を検索し、
   必要な承認者を、「申請承認者テーブル」にセットします

 申請書が作成されたら、その申請書の申請書種別と、申請者を元に「承認フローテーブル」を検索し、承認が必要な人を割り出し、その結果を、「申請承認者テーブル」にセットします。「申請承認者テーブル」の項目は、以下のとおり。
	申請者ID
	承認者ID
	申請書種別
	申請書ID
	順位
	承認種別
	承認状況 0:未承認、1:承認 2:拒否


このとき、順位-1で、承認者を申請者にしたレコードを追加しておくと、
承認拒否された場合、次の承認順位-1にすることで、申請者に戻ります。

(3)申請書にステータスという項目を追加、次の承認順位を入れます。

 申請時は、次に承認してもらう人の承認順位は1なので、ステータスに1を入れます。


(4)承認・拒否したら、「申請承認者テーブル」を更新します。
   その内容に応じて、ステータスに次の承認順位をセットします。

 まず、承認したら、「申請承認者テーブル」の承認状況を1に、
    拒否したら、承認状況を2にセットします。

 次に、申請書のステータスについて、
 拒否の場合は、申請者に戻るように、ステータスをー1にします。

 承認の場合、承認種別をみて、
   全員承認なのに、自分が承認してもまだ未承認の人がいれば
      ステータスは、そのままで、抜けます

   全員承認で、全員承認した場合、
   あるいは、1人でも承認すればいい場合   
      ステータスを1上げます。
      その1上げた状態で「申請承認者テーブル」を検索して、
      該当者がいなければ、すべての承認が終わったことになるので、
      ステータスを、承認終了のステータスにします。

 承認終了のステータスは、0にしたり、99とか、ある特定の数字にしたり、イロイロあると思います。


(5)こうすると、今承認しなければいけない人は、
   申請書のステータス=申請承認者テーブルの順位
   でわかります。


 終了していれば、承認終了のステータスになりますし、
 承認拒否の場合、-1です。
 なお、承認が拒否され、再登録する場合、「申請承認者テーブル」も、過去のものをクリアし、(2)からやり直すのが普通だと思います。


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

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

2007-06-26 11:42:57 | Weblog

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

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

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

今回は、各画面のイベントリスナーのクラスに関して、その方向性についてです。




■画面イベント処理の方法

 いま、サンプルにしているソースは

ここ
のgamen1.javaで、イベントは、gamen1クラスのインナークラス、
gamen1_HandleEventクラスです。
 これを、今回は、インナークラスではなく、外に出して1つのクラスとして扱うことにします。
 1画面に対し、1イベントクラスとします。

 そのとき、
・クラスのextendsは、画面で利用している部品(TextとかButtonとか)
 によって決まります
 →仕様書の型からマクロを使って、抽出すれば、求まります。

・イベントクラス内のメソッドも画面で利用している部品によって決まります

・どこで、イベントが起きたかに関しては、イベントeを受け取り、
 Object o = e.getSource();
 として、そのoに対し、

    if ( o.equals(b1)== true)

(ここで、b1は、画面の部品オブジェクト)と聞けばOKです。

・で、イベントと、そのイベントが起きた部品が分かったので、
 それに基づいて、処理を行えばいいです。




■方向性

で、どうやって、イベント処理をするかということなのですが、
・まず、仕様書に、どの部品が、どのイベントが起きたとき、
 イベント処理するかを書いてもらいます。

・各部品で、起きるイベントは、きまっています。そこで、たとえば、
	//	共通領域
	public HashMap	map = null;

	/*
 	 * 	ボタンが押されたときの処理
 	 */
	public void widgetSelected(SelectionEvent e) 
	{
		Object o = e.getSource();
		shoriPro("WS",o);
	}

		:
	(ほかのイベント処理が続く)
		:
		:
	/*
 	 * 	全部のイベント処理
 	 */
	public void shoriPro(String eventCode,Object o) 
	{
		Gamen1 g = (Gamen1)map.get("gamen1");

		if ( ( eventCode.equals("WS") == true) &&
                     ( o.equals(g.b1)	==	true ) )
		{
			//	呼び出し
			//	mapを引数に渡せば、
			//	map.get("gamen1")で、画面の値が取れる
		}
			:
		(ほかの呼び出し処理が続く)
			:
			:
	}


のように、

  *まず、コントロールから、必要なイベントを並べ、すべて、
   shoriProにとばします。

  *そこで、仕様書に書かれた、イベントと部品があったら、
   処理を呼び出すようにします。

こうすると、生成しやすいし、あとでイベント内の処理を書きやすいです




■で、このときに

で、このときに、shoriProの中に、処理内容を書いてしまうと、画面の修正があったとき、再度自動生成すると、書きつぶしてしまいます。
そこで、
	public void shoriPro(String eventCode,Object o) 
	{
		Gamen1 g = (Gamen1)map.get("gamen1");
		Shori  shori = new Shori();

		if ( ( eventCode.equals("WS") == true) &&
                     ( o.equals(g.b1)	==	true ) )
		{
			shori.b1_ws(map);
		}
	


のようなかんじで、一回、別のクラスの別のメソッドを呼び出し、そこで、処理をさせるようにすれば、イベントクラスを上書きされても、大丈夫です(shori.b1_ws(map)の呼び出し部分が消えてしまいますが、そこも自動生成すればいいようにします)。




 ということで、イベント部分も自動生成できそうです。

 

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

グーグルを抜き、Yahoo! Japanのページビュー数、世界1位

2007-06-25 19:22:01 | Weblog

ここのGIGAZINEの記事
Yahoo! Japanのページビュー数がついに世界第1位に
http://gigazine.net/index.php?/news/comments/20070625_yahoo_japan/

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

ネットレイティングスの発表によると、Yahoo! Japanの2007年5月度の月間ページビューが318億ページビューを突破、ついに世界第1位になったとのこと。


で、2位以下は

2位:米国Yahoo!……316億ページビュー
3位:News Corp. Online……296億ページビュー
4位:Google……212億ページビュー
5位:Microsoft……155億ページビュー


ほー、Googleより、YAHOOのほうが、ページビュー多いんだ。。
(日本だけでなく、アメリカにおいても)
へー・・・

時代はGoogleからYAHOO?


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

一般的な編集ソフトの作り方 その20:イベント発生時の動き(カット・ペースト)。

2007-06-25 17:34:01 | 開発ネタ

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

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

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




■処理手順

この2つと、前回のプロパティ変更で大きさが変わる場合は、似たような動きをします。

まず、カットもペーストも
1.対象を確認します
  →対象が選択されてなければエラー
2.カットあるいはペーストができるか確認
3.カットの場合は、対象をコピー領域に入れます
  ペーストの場合、コピー領域の対象をとってきます
4.カットの場合は削除処理、
  ペーストの場合は、3の領域の追加処理をします

あとは、「プロパティ変更」同様

5.削除・挿入したものの親に対し、
  子供(削除・挿入したものとその兄弟)の位置決めをする

6.削除・挿入したものとその兄弟は、値を変更し、親に結果
  通知する。
  値を変更できない場合は、親に変更できない通知
   →変更できない場合、削除・追加処理を取り消し、元に戻す

7.削除・挿入したものの子供に対し、位置決めをする
   →変更できない場合、変更処理を取り消し、元に戻る

8.7の位置に子供の属性を変更する。自分の属性も変更する

9.再描画する
  →クリックされたとこををバッファをもって調べている場合、
   そのバッファにも書き出し

なお、5~9の順番は違う場合がありますが、とにかく、親兄弟、子供に対し、位置や幅の再設定、再描画が必要となります。
 このとき、どこまで再設定、再描画したらいいかによって、処理スピードなどが、左右されます。




ということで、「イベント発生時の動き」はここまでです。
あとは、画面の構成についてです。




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

MVCで要件→画面に落とし込むまで

2007-06-25 14:39:31 | 開発ネタ

前に、要件から、クラス図までに落とし込む流れを書いたとき、これは、MVCでいうモデルに相当すると書きました。
 で、MVCのコントローラーについては、MVCで要件→モデルのクラス図から、コントローラーに落とし込むで書きました。

 ということで、残りのView、画面についてです。




■画面とコントローラーの関係

 コントローラーで、StrutsならAction、サーブレットならサーブレットクラスで定義されたところ(=モデルの画面用メソッド)は、画面のなんらかのアクションに対応し、そこで呼び出されないといけません。

 つまり、サーブレットのクラスは、ボタンを押すと呼び出されるとか、画面が書き出されたとき(ロード)呼び出されるとか、なんらかのイベントに対応して、呼び出されます。多くは、ボタンに対応します。




■画面とクラスの対応は、方針によるが・・・
 画面とクラスの対応は、その設計方針によりますが、1画面1クラスを割り当てると、楽かと思います。




■問題は、画面と、コントローラーを呼び出すイベントの関係

 で、問題は、画面と、コントローラーを呼び出すイベントの関係です。
 これにより、画面割が変わります。。。

 が、これ、

 コントローラーを呼び出すイベントが起きる時点で、そのコントローラーに
渡す値すべてが、どこかで入力されていなければいけない
(=そうしないと、入力が足らなくなる)


 ということ以外は、好き勝手にできます。

 たとえば、1画面しか作らないで、そこに全部の情報を入れる、ログイン名もパスワードも、入力情報も出力情報も・・・っていうことは、可能ではあります(現実的ではないけど)

 逆に、1つ入力されるごとに、1画面というのもありえます(対話型の入力の場合、ダイアログがどんどん出る形とか、チャットしてるようなかんじで実行する)




■とはいえ、標準形はある

 とはいえ、大体世の中のおとしどころといいますか、標準形はあります。

要件のとき、

    何々が、何々を、どうする

というかたちで、主語(=人)、目的語(=対象物)、動詞(アクティビティ)という形で書きました。なので、今回も、

まず、主語を確定する
  =>ログイン画面で、操作している人を決定=この人が主語

そのものを表示するが、
  複数あり、検索が必要な場合は、
     (検索)一覧画面(検索は画面をわけることもある)
     詳細画面
  検索が必要ない場合は、
     詳細画面

になります。

そして、データ入力・編集では、CRUD,つまり、新規作成、検索、編集、削除が必要なのですが、一覧画面がある場合、そこから削除、新規作成、編集がある場合が多いです(編集は、一覧リストをダブルクリックのケースもあります)
 検索は、検索画面があるところに、検索実行ボタンがあります。
 検索画面と一覧画面が分かれているときは、一覧画面を出し、そうでないときは、検索結果を一覧にセットします。

 一覧画面にある、新規作成、あるいは編集のイベントが起こると、詳細画面が表示されます(編集の場合はそのデータがセットされ、新規作成の場合は初期値)入力されると、登録等のボタンが押されて、新規作成、編集の処理に行きます。

 削除のとき、内容確認をかならずさせるために、一覧でなく、詳細のほうにおく場合もあります。

 だいたい、こんなかんじで画面割りは行われます。




 ということで、このシリーズ?の話、おしまい。


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

動画のプレゼンのほうが、PowerPointより、効果ありそう。TVMLもプレゼンに使えば?

2007-06-24 23:28:55 | Weblog

 エイベックスの株主総会は、前期の報告のところ、ビデオでやるんですよね。他の会社は、株主招集通知の、該当箇所を読み上げるとかで、つまんないんだけど、エイベックスの場合、ビデオでわかりやすいって言うこともあるし、かっちょいい。

 やっぱ、プレゼンも、動画ですかねえ。。。
 PowerPointのプレゼンが今主流だけど、この上を行くとなると。。
 動画のプレゼンも、ありかなあと。。

 とはいえ、エイベックスのビデオみたいな、すごいものは素人にはつくれない。

 だけど、ちょっとした動画でいいとなれば、素人が、動画を簡単に作る手段として、テキストの(読み上げる)台本と、場合によっては、途中に出す静止画を用意すれば、あとはキャラクターがしゃべってくれるTVMLなんかも、使えるんじゃないかなあ。。と思って。。

 いや、TVML、この前日経ビジネスにもでてたけど、プレゼンに使うということをふと思ったので、ちょっと書いてみた。

P.S ただ、読み上げる日本語が不自然なのよね。。

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

Hello World程度のデータベース(その25:外部スキーマ(9)SQLその8)

2007-06-24 19:48:26 | 土日シリーズ

情報処理とは何から、データベースの基本的な話(情報処理試験のデータベーススペシャリスト程度の話まで)を書く、土日のシリーズ「Hello World程度のデータベース」です。

いま、SQLをやっています。
SQLは検索(select)、挿入(insert)、削除(delete)、更新(update)とあって、前回でSELECTが終わったので、今回はINSERTです。




■INSERTの種類

 INSERTには
  1行追加する
      1レコード全部指定
      項目を指定して追加
  複数行追加する

という方法があります。




■1行追加する

INSERT INTO テーブル名 VALUES (値1,値2,・・・・)

と1レコード分の値を指定して入力できます。
たとえば、

というテーブルがあったとき

INSERT INTO SYUSSEKI_TBL VALUES (4, 1, 120);

と書けば、値を追加します。
ただ、こうすると、1レコードの値をすべて指定しないといけませんが、指定しない項目はデフォルト値でいい場合は、

INSERT INTO テーブル名(項目1,項目2・・・) VALUES (値1,値2,・・・・)

のように、項目を指定して挿入できます(省略不可の項目を省略することは出来ません)

たとえば、

というテーブルに対して(映ってないところに項目が続きます)

INSERT INTO OUBO_TBL ( OUBOID, SEI, SEI_KANA, MEI, MEI_KANA, OUBONEN )
VALUES (5, '平野', 'ひらの', '麻樹子', 'まきこ', 2005);

というように、項目を指定してもOKです(文字の値は’’で囲みます)

なお、項目を指定したほうが、将来テーブル構造の変更が起こった場合のことを考えると、いいかもしれません。(項目を書いておかないと、項目が増えたら、そのたびに修正しないといけない)




■複数の行の追加

上記のVALUES(値・・・)のところを、SELECT文に変えると、検索結果を挿入することが出来ます。たとえば、

INSERT INTO SHAIN_TBL ( SHAINID, SEI, SEI_KANA, MEI, MEI_KANA )
SELECT OUBO_TBL.OUBOID,OUBO_TBL.SEI, OUBO_TBL.SEI_KANA, OUBO_TBL.MEI, OUBO_TBL.MEI_KANA
FROM OUBO_TBL
WHERE OUBO_TBL.OUBOID=5;

のように、応募テーブルの検索結果を社員テーブルに追加することも出来ます。




ということで、とりあえずINSERTはここまで


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

Second Lifeのケータイ版ってできたら、人気にならないかな?

2007-06-24 17:51:59 | Weblog

 ふと思ったんだけど、最近話題のSecond Life、あれ、ケータイ版がでれば、よりいっそう、人気になりそうな気がする。。
 ソフトをダウンロードして、インターネットを利用する形なので、ソフト部分をアプリで作って、通信部分は、インターネットアクセス。。。となれば、大容量アプリが組めるBREWのほうが有利なのかしら。。。ただ、パソコンで見えるキャラクタと同じように見えなくてもいい気がするが。。。

 まー、かなり大きな開発になりそうなので、民間では無理なのかしら・・

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

DTPの構造を考える-その13:アルゴリズムとメモリ構造 その4 編集関係。

2007-06-23 20:08:57 | 土日シリーズ

 土日シリーズ「DTPの構造を考える」です。

 このシリーズ、第9回までで、本の構造、さらにDTPソフト全体でもつ、フォント、色、ライブラリの構造を概念的に説明してきました。
 それ以降、機能のお話しを書いています。

 今回は、編集関係の機能についてです。




■カットアンドペーストと、プロパティ変更

 一般的な機能としては、一般的な編集ソフトの作り方 その12:イベント発生時の動き(概要)。 で、あげたように
  ・印刷
  ・保存
  ・読み込み
  ・カット(切り取り)
  ・ペースト(貼り込み)
  ・プロパティ(属性設定・変更)
  ・表示
  ・要素の選択
  ・(要素の)移動

とあり、とくに、プロパティの変更に関しては、ここで取り上げました。
 プロパティ変更には、
 ・大きさ、位置がかわるもの
 ・大きさ、位置はかわらず、中身のみ変わるもの
とあり、それぞれ処理が違うと書きました。
 この、大きさ位置が変わる処理と、カットアンドペーストの動きはにているので、今回はまとめて、編集機能として書きます。




■位置決めが問題
 で、先ほどあげたところでは、処理は、こんな漢字に書きました。

1.ダイアログや、その他いろいろな操作で、プロパティ変更を受け付ける

2.現在選択されているもの(=変更するプロパティ)を決定

3.変更するものの親に対し、子供(変更するものと、その兄弟)
  の位置決めをする

4.3の値に変更し、変更するものに通知する。
   →変更できない場合、変更処理を取り消し、元に戻る

5.変更するものの子供に対し、変更後の位置決めをする
   →変更できない場合、変更処理を取り消し、元に戻る

6.5の位置に子供の属性を変更する。自分の属性も変更する

7.再描画する
   →クリックされたとこををバッファをもって調べている場合、
    そのバッファにも書き出し

つまり、3で自分の親が自分を含めた子供に対し、
5で、自分が、子供に対して、位置決めを行います。

この位置決めを、どの範囲で、どのようにやるのかが問題です。




■どの範囲で、どのように位置決めするか

 位置決めについて、どのように行うかが問題というのは、わかっていただけると思います。
 どの範囲の問題なのですが、親が、子供全体に行うのであれば、何も問題はないのですが、それだと時間がかかります。たとえば、10行書いて、文末の。を削除した場合、。の文字1字分だけ処理すればいいです。しかし、文頭の文字を削除した場合、全部の文字に影響が出ます。
 前者の1文字だけ処理すればいい場合、全部の子供(10行分)を処理するのは無駄になってしまいます。なので、範囲があるといいのですが、このとき、修正した文字からでいいかというと、そうではないです。

 英語などで、追い込んで入れたり、文字を追い出したりする場合、その行1行分使って処理します。つまり、変更文字の前も含めて変更行全体を処理します。なので、前の部分も含まれることがあります。




 次回は、この位置決めについて、さらに深く考えます。




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

一般的な編集ソフトの作り方 その19:イベント発生時の動き(プロパティ変更)

2007-06-23 18:35:18 | Weblog

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

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

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




■プロパティの変更は2種類にわかれる

 プロパティは、図形等の場合、色など、文字の場合フォント、装飾(下線など)などですが、子のプロパティ変更は、
  ・大きさ、位置がかわるもの
  ・大きさ、位置はかわらず、中身のみ変わるもの
とあります。後者の「大きさ、位置はかわらず、中身のみ変わる」場合は簡単で、

1.ダイアログや、その他いろいろな操作で、プロパティ変更を受け付ける
2.現在選択されているものの、属性値を1で指定されたものに変える
3.再描画する

ですみます、しかし、大きさが変わる場合、例えば、文字枠の大きさが変わると、中に入っている文字の位置も当然変わりますが、外側の文字を排除しているような場合、外側も変わります。
 そのため、ちょっと面倒な処理になります。




■大きさ、位置が変わる場合のプロパティ変更

 この場合、親に、プロパティ変更することを通知し、変更後の位置決めを、(変更するものもふくめ、その兄弟の)子どもに対して決定し、設定したら、子供のプロパティに変更した旨をつうちしないといけません。また、変更するプロパティの子供の位置決めも必要です。
 
そこで
1.ダイアログや、その他いろいろな操作で、プロパティ変更を受け付ける
2.現在選択されているもの(=変更するプロパティ)を決定
3.変更するプロパティの親に対し、
  子供(変更するものとその兄弟)の位置決めをする
4.3の値に変更し、親に通知する。
  変更できない場合は、位置変更せずに、通知
   →変更できない場合、変更処理を取り消し、元に戻る
5.変更する対象の子供に対し、変更後の位置決めをする
   →変更できない場合、変更処理を取り消し、元に戻る
6.5の位置に子供の属性を変更する。自分の属性も変更する
7.再描画する
   →クリックされたとこををバッファをもって調べている場合、そのバッファにも書き出し




 とこんなかんじです。


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

サーブレットの雛形

2007-06-23 12:56:28 | JavaとWeb

ちょっとある人に説明するために、
サーブレットの入出力の方法と処理の流れがわかる
雛形をつくってみた。

こんなかんじ
/**
 * 
 * プロジェクト名:サンプルプログラム
 * クラス内容	 :サーブレットサンプル
 *
 */

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

/*
 * クラス:testServlet
 * 内容 :サーブレットの見本
 * 
 */
public class testServlet extends HttpServlet {

	/*
	 * メソッド:service
	 * 内容  :PostでもGetでも、ここにくる
	 * 
	 */
	public void service(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {

		//==============================//
		//	データの取得	     //
		//==============================//
			//	セッション開始・取得
//	 	HttpSession session	=	request.getSession(true);
			//	セッションの値の取得
//		String sessionValue1	= 	(String)session.getAttribute("key1");

			//	引数の取得
//		String argValue1	= 	(String)request.getParameter("key2");
//	なお、バイナリのようなケースで、引数ではなく、ボディ部分の値全体を取得
//	したい場合は、
//	ServletInputStream	is	=	request.getInputStream();
//	で、InputStreamを取得して、処理する
		


		//==============================//
		//	処理実行		     //
		//==============================//

		//	データチェック

		//	モデル部分呼び出し

		//	出力データ作成

		
		//==============================//
		//	出力する		     //
		//==============================//

			// ContentTypeを設定
//		response.setContentType("text/html; charset=Shift_JIS");

	    		// 出力用PrintWriterを取得
//    		PrintWriter out = response.getWriter();
//		out.println("<html>");
//		out.println("</html>");
//	なお、バイナリのようなケースで、ボディ部分の値を書き出したい場合は、
//	ServletOutputStream	os	=	response.getOutputStream();
//	で、OutputStreamを取得して、処理する

	} 
}


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

USB顕微鏡は、たしかに夏休みの宿題によさそう!

2007-06-22 21:45:25 | Weblog

ちょっと昔の記事になるんだけど・・・
博士! 夏休みの自由研究に最適なUSB顕微鏡を見つけました!
http://headlines.yahoo.co.jp/hl?a=20070618-00000005-giz-ent

USBの顕微鏡(デジタル顕微鏡というらしい)って、便利そう
っていうか、楽しそう・・・・
理科の自由研究にいいよね・・・
でも、9198円、うーん。。。

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

MVCで要件→モデルのクラス図から、コントローラーに落とし込む

2007-06-22 16:22:11 | 開発ネタ

 きのう、要件から、クラス図までに落とし込む流れとして、要件から、モデルのクラス図に落とし込むまでの流れを書きました。

 MVCの形で考えると、そーすると、ビューの部分、コントロールの部分のクラスはどうなるんだ?ということになります。
 今日は、そのことについて、画面という立場から、コントロールのクラスを書きます。




■モデルのメソッド=アクションの分類

 前回のモデルのクラス図におけるメソッドは、アクションから来ていますが、これは、主に以下のように分けられます。

・ユーザーが能動的に動かすもの
   画面を使ってアクションを起こす
   画面以外(バッチプログラム等)を使ってアクションを起こす

・ユーザーが意識しないけど動くもの
   定刻になると、何かがおこると等、自動的に条件がそろうと動く
   アクションから呼び出される、あるいは他アクション直後に
     自動的に実行するもの

今回は、画面が話題なので(たいてい画面が多いと思います)、画面を使ってアクションを起こすについて考えます。




■フレームワークによって、クラスは決まってしまう。

 この場合、画面のフレームワークによって、クラス関係は決まってしまいます。

 たとえば、Strutsの場合、1つのアクションに対しては、1つのアクションクラスが必要です。
 なので、1アクションクラスを作成し、その中で値をチェックし、モデルのアクション(モデルのクラスのメソッド)を呼び出すことになります。

 サーブレットの場合も、HttpServletから継承された1クラスが1アクションに対応し、そのクラスで、値をチェックし、モデルのアクション(モデルのクラスのメソッド)を呼び出すことになります。

 ということで、モデルのメソッド(アクション)に対応する画面のコントロールクラスの場合には、Strutsの場合、アクションクラス、サーブレットの場合HttpServletから継承されたクラス、というように、決まっています。




 ということで、あとは、コントローラーとビューのクラス関係ですね。
 (ただ、モデルとも関係するけど)



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

ニフティの「グフフ動画」って、東大に似たようなCAIがなかったっけ?でも。。

2007-06-22 11:29:26 | Weblog

ここのニュース
ニフティ、「ニフニフ動画」に続いて今度は「グフフ動画」を提供開始
http://gigazine.net/index.php?/news/comments/20070621_nifty_gufufu/

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

つい先日、ニフティが動画にコメントをつけられる「ニフニフ動画」を開始ということを紹介しましたが、ニフティは早くも次のサービスを開始したようです。その名は「グフフ動画」。なんなんだ、その名前は…。


ちなみに、その「グフフ動画」は、
ここ http://gufufu.nifty.com/index.jsp
たしかに、そのネームセンスは・・・(^^;)


動画の下についているのが評価ボタン。ムービーの面白い場所で右の「グフフ」を、つまらない場所では左の「ブー」を押す。


そうするとね。。


ムービーの右側に他の人が評価した「グフフッ」と「ブー」が表示されます。


自分が押したものは左に表示される。


たしか、東大で、似たようなシステムがあるっていうのを見た気がする・・
放送大学大学院の・・科目をわすれた(^^;)
で紹介していたような気が・・・

それは授業の動画を流すんだけど、そこで、大事だと思うところは、
クリックするようになっていて、みんなが大事だと思ったところ
(=多くクリックされたところは)赤だったっけかなあ、で大きな
マークがつくというもの・・・

だから、みんなが、「星ふってマーク」するようなところは、
大きなマークになって、わかるから便利っていうものなんだけど、
ニフティのグフフは、こんなに大きく出ては、
邪魔なような気が・・(^^;)



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