[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11935] 「アジャイルソ フトウェア開発の奥義」 : 第八回議事録 ( 案)



栗野@日大 です。

「アジャイルソフトウェア開発の奥義」 : 第八回議事録 (案)

をお送り致します。

PS.
[凡例]

	「26.2 天国への階段)」
	  ^^^^ 行頭から章番号から始まっているものは本の章のタイトル

	「proxy が二つの差を吸収する」
	 ^ 先行するものなにも無い場合は、本の内容や、メモ

	「Q. ここでいう API って ?」
	  ^^
	「A. JDBC のことでは ? ( 見方によるが.. )」
	  ^^	Q./A. で始まるのは主に、会話記録

-- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< --
java 読書会 <http://www.javareading.com/bof/>

BOF in 高津区民館 第 4 会議室 at 2005/06/18 10:00 - 17:00

出席者(敬称略)

		前

	開始 →
	+---------------+↓
	|		|
	|	机	|
	|		|
	+---------------+
	↑		←

吉村o, 岩永, 岩室o, 小棚木, 高橋(徹), 村上
栗野, 亀井, 村山
門脇, 高橋(智), 石黒, 金井, 遠藤, 吉本o, 奥
岡沢, 根本

朗読者: 吉村, 岩室, 吉本
書記: 栗野

本 : 「アジャイルソフトウェア開発の奥義」

==

自己紹介
	>>> 略 <<<

==

p.433 から

==

26.1 proxy パターン

proxy パターンの適用 (図 26-2 p.423)

	proxy が二つの差を吸収する
		test から作成する
			order proxy は order と全く同じ振舞いをする事を想定

		# public メンバがあるが、これは気にしなくてもよい
		#	なんでもかんでも setter/getter を付けるには変
		#		=> プログラムを複雑にしている

		# Q. 全てのメンバを private にし、インラインアクセッサを自動生成しては.. ?
		ID の生成 : 連続番号を作ればよい。

		proxy で、interface をつきぬけるような例外を投げる
			うっとうしい
				例外を Error にする ( try-cache が不要 )
					# Q. 本当にこれで良いの ?

	proxy パターンのまとめ
		[欠] 適用が難しい
		シンプルな委譲モデルになるとは限らない
			委譲モデルの後に別の処理の実装が必要
		キャッシュを考慮する必要がある場合がある ( パフォマーンスの問題 )
			必要な場合だけ考える

		[利] 強力な機能を持つ
		モジュール間の切離しが可能
			例 : ビジネスロジックと DB の分離

			3'rd party Package の API と Application の分離
				Appl で、直接 3'rd API を利用すると..
					後で、Package が更新されたら悲惨
					分離するための layer が必要
						=> proxy

			JDBC の例

	Q. 「JDBC の場合スキーマが Appl から分離されていない」の意味が解らない
		A. Text の例では、確かに、DB に依存したコードになっている

		Q. 「逆転させる」
			A. 「依存関係逆転」のことでは
				Q. 具体的には ?
					A. 26-8 を参照

	Q. ここでいう API って ?
		A. JDBC のことでは ? ( 見方によるが.. )
		A. DB という箱は p.438 の DB.java のこと
		A. Application は Data を渡すだけ、実際の構造は Appl が知らなくてもよい
		Q. 一番上のレベルでは確かに逆転しているが... 下の方では結局問題があるのでは ?
			# 設定ファイル等で、情報を外に追い出さないかぎり..
			A. ポイントは、「Product」という I/F の導入。他は、全てのモジュールが、これだけに依存する

	依存関係が Proxy に集中する
		=> Proxy の作成そのものは、大変になってしまうが..
			問題がどこにあるかが解っていることは良いこと..

26.2 天国への階段
	依存関係を逆転させてくれるパターン ( Proxy と同様 )

	Q. クラス図が読めない..
		# 多重クラス継承ができる言語でないと実装できない。

	Q. 「プロダクトが自分自身をみつけてしまっている」って.. ?
		# 「侵害されてしまっている」の意味は ?
		A. ダイアモンド継承のために複数の継承の経路で、同じメソッドが見付かる

		[宿題] 原文をみる

		A. 仮想継承だと、一箇所にまとめられるので...

		A. 「Tree 構造になっていない」ってこと ?

	[利点] ビジネスロジックと DB 分離

	Q. 凄いキャスト
		A. 継承構造がみえない..
		Q. 実体はパーシステントプロダクト ? アセンブリ ?
			=> 両方を継承していることを仮定している

		Q. 失敗するパターンは ?
			A. プロダクトの時 ( 0 が却ってくる )

	# R/W をパーシステントから切離す

26.2.1 天国への階段の例

	Q. 不死ってどうなる ?
		A. このコードを読んだ担当者が死ぬ.. ?
			自分で書いたコードが読めない..

	Q. 二重継承を防ぐには、仮想継承しなければならない
		忘れた時に何が起きる ?
		具体的に何が問題 ?
		プロダクトが二つあると何がいけない ?
			インスタンスが二つできる..
			Q. virtual をつけないと二重になる。
			Q. 下からみると、上に二つあるので..
			Q. キャストの仕方によって、違うものをアクセスしてしまう..

		Q. 結局、死にはしない.. ?
			A. 死ぬこともあるでしょう..

			[宿題] 死ぬパターンを作れたら作る

	Q. 「PersistentObject は .. 知っているようだ..」.. て..

	Q. 「private な virtual ?」
		なぜ、public/protected でない ?
		どうゆう意味があるの ?
			Q. 毎回実装 ?
				だから Header/Fodder のみ

			[宿題] 上記を試してみる (実装のバリエーションが欲しい..)

		A. C++ の言語仕様の Document の PDF が公開されている
			検索もプリントもできないが.. View Only
			Q. なんとか Hack できない ?
				cf. 「グラーバ」PDF Soft
				自分で viewer を作れば何とでも ..
				Text 化はできるが..
				画像かも..
					OCR で..
					Screen OCR では ?
				Q. 暗号化されている ?

	Q. private は親クラスの実装を再利用させない仕組

	Q. これはリスコムを守っていない

	Q. そもそも、この名前がよく解らない (何が天国..)
		A. 扉の絵の映画の中にオチあるのでは ?
			マーチンの本には書いてあるのでは ?
				本はない.. Web にあるかも..
					多重継承の良い使い方
						aspect/mix-in 的な多重継承

						# mix-in をするならば、mix-in を使って欲しい.. 多重継承を mix-in の代わり使うのは問題では..
						#	歴史の問題では.. (mix-in はなかったんでしょう..)

		Q. 言いたい事は結局、「パーシステントにできる」ってこと ? そのためにここまでやる ?

	Q. 依存関係が逆転している
		A. パーシステントにいれなければならなくなる..


26.3 データベースと組合せることができる他のパターン

26.4 結論
	
27. ケーススタティ

	Q. java の選択は本当 ?
		A こじつけでは

		A. realtime に対応した VM もある。

		Q. VM の移植問題はないの ?

		Q. System がないのに何故、言語が先に決る .. ?
		Q. C で書けない ?
			A. 低レベルのコードが大変なのでは ?

		Q. まず、評価用ボードがないと始まらないでは ?
			java の動くボードにする
				soft の開発工程を減らすために hard に制約を..
				     理論上の話..

==

# 午後

# p.497 を目標

## 読物っぽいので、進みそう

	Q. 後ろの付録は何時読む ?
		A. 短いので今読む。

	[誤殖] p.488
		 「#11:相対温度船さ」=> 「相対温度センサ」
		 「#12:風速船さ」=> 「風速センサ」

	Q. 27-5 の図が良くわからない
		# Sequence 図
		A. 確かに、このような書き方はないが、解ればよい.. ?

		Q. Sequence 図の方が理解りやすい ?
		
		Q. 図 27-4 での点線は、正い ( 依存関係 ? )
			# なぜ、「点線?」
			#	Object 同士は関係ないが、class に関係はある
			A. 初期化の時に関係している
				Q. 初期化の話がどっかで..
					A. Factory モデル/自分で、? /インジェクション ?

		Q. スケジューラが read を投げているのは ?
			A. 確かにトリガーという気分ですね..
			Q. read からは何時帰ってくるの ? ( 遅くない ? )
				A. スレッドにするんでしょう..
					Q. オブザーバパターンは、マルチスレッドを仮定しているのでは ?
						A. かならずしも.. 特に今回の場合は、時間に問題ないので..

		Q. 「1分間に一度」という記述がない
			A. ハードと関係があるので、記述できない ?
			A. java でも、そこは native method
				# 1.0 なら Posix, 2.0 なら windows mulit media ..

	[誤殖] p.461 l.6 「それ観察」 => 「それを観察」

		Q. 27-6 図 : Trend から引かれている「点線」は ?
			A. Trend の計算に Pressure が必要だから、関係が生じる
			A. 点線は、
				1. リファレンスを内部に保持しない
				2. でも、何らかの形で、他のクラスを利用する
				という意味

				Q. 点線だとコンパイル時に必要 ?
					A. Yes

		Q. scheduler は read を呼ぶ ?

		A. 今は、設計が固まっていないので、あまり議論しても..

		Q. Ovserver と Senser の関係は、責任をもって合せる必要がある ?
			A. Yes


	Q. 図 27-7 ?
		A. 図の下の本文の説明を読んでから..
		A. 要は名前(設計)が変った
			Scheduler => AlarmClock

		Q. 図中の ◯+の記号の意味は ?
			A. インナー (無名) クラスとして登録
			右側の ( <<anonymous>> は java の無名クラス (AlarmListener を実装している) を意味 )

	Q. AlarmClock の実装はどこ ?
		A. 簡単な Class なので..
		Q. せっかく java なので、実装が知りたい
			A. ハードにデペンドしているから書けない ?
			Q. 実際には、他から tic() で、kick されているだけなので、ハードには、関係なさそう。でも、非同期か同期かは決っていないのかも..

	Q. <<anonymous>> というのは ?
		A. java 固有では ..
		Q. 他の言語でも在り得るのでは ? ( Lisp の LAMBDA 式とか.. )
			A. anonymous & internel という組み合わせ..

		[宿題] 実装を、最後まで行う
			OS 別にがんばろう..
			Q. AlarmClock が大変 ?
				A. java なら簡単かも
					cf. util.timer class がある
					タイミングを指定して呼出してくれる
					[宿題] API を紹介

			Q. C 言語だと大変 ?
				A. OS 組み込み ? POSIX にある ?
				A. まあ、java なので、

		Q. タイミング(定期実行)を考えると OS まで考えないと..
			A. 遅延を許せばある程度は大丈夫
				ただし、永続化も考える必要がある
					# プロセスが死んでいたら、再起動する仕組とか..

				Q. サマータイム問題もある..
				A. CORBA, EJB の Timer Service を使えば

				Q. 信頼性は ?
					A. 大問題

		Q. cron は、OS によって実装 ( サマータイムの扱い ) が異る
			A. HP は一回必ず。Sun は、呼ばれたり、二回呼ばれたり..

		Q. サマータイムって、結局.. ?
			A. java の class が内部で処理しているから..

		Q. 6/60 24:00 の次は 7/1 の 1:00 になってしまうが.. ?

		Q. サマータイム問題は、解決済の問題
			A. アメリカ人は、ASCII しか考えない, 日本人はサーマータイム/タイムゾーンを考えない
				A. Localize をすればどうせ..

			([宿題?] サマータイム問題を考える.. ??? )

==

# 10 分休憩

==

	[誤殖] 27-1 ( 27-2 も.. )
		5 行目の「;」の後に 「())」が必要
		13行目の最後に「;」が必要

	Q. 「)」を「こっか」と呼ぶの ?
		A. Local Rule

	Q. UML では 「1.0」 と表記されている物が list 27-1 では 1_0 になっているけど、
		A. どっかの tool が処理してくれる

		Q. 全角空白で、こける !!
			A. コーディング規約で頑張る ( IME で半角のみにする )
			A. 全角空白を「とうふ」表示するエディタを使う。

	Q. 27-12 : Code を読んだほうが簡単
		A. もっと綺麗に書かないと理解りにくい

	Q. これでは、AlarmClock が StationKit に depend するので..

	Q. StationTookKit って何物 ?
		A. SunToolKit との関係があるのでは.. ?
			Q. new する場合としない場合があるけど..

	Q. p.470 の頭の部分がよくわからない..
		A. 27-14 で、main が weatherStation に入っていたとすると、問題だと述べているらしい。

	Q. 図 27-15 の <<parameter>> って何 ?
		A. 「Monitoring Screen は<<parameter>> としてWeather Station Componet を利用している」の意味

	Q. 実線と点線の違いって何 ? (図 27-16)
		A. パッケージ間であれば
			実線:構造的に、かたく結びついている
			点線:関係はあるが、緩やかな結びつき
		Q. main はパッケージではないが..

	Q. NVRAM って ?
		A. Non V.. (揮発) RAM

	Q. list 27-7 ?
		A. 名前で、保存や復元ができて、ついでに、名前 list も取れるようなものと理解すれば十分では..

	Q. midnight と update の呼出すタイミングは ?
		ひょっとしたら、逆になるかも ?
		# update の引数に date がないので..
		# 困らない ?

		A. 実装しだいか.. ?


	Q. 日の切り分け ( 0:00 ) の最低最高温度は、二日で共有される
		A. 業務要件で定める
		Q. やっぱり、read で date をやり取りしたい..
			A. センサーは、時間と切離したい。

		Q. ハードによって、どのような情報が来るかが解らないと..
			A. 実際にやってみたけど、やっぱり、時間がない
				確かに、時間がずれるが、気にしない..

			A. Application が時間にシビアでないので..

		Q. update に、time を持たせたい
			A. Sensor が時計をもっていると色々不便
			A. Simple & 誤差に対する許容の結果の判断

			A. GPS は別扱いかも..

			A. 単一責任
			Q. value() に引数がない方が..

			Q. 使う側の重用度
				A. Sensor としては、それだけで十分

		Q. update のタイミングだけでデータを保存していたら、あちらこちらで欠落が..
			A. どっかで補間する ?

==

# 休憩

	Q. 結局、時間ってどうやって决めるの ?
		A. セシウム時計を..


==

27.2.2 HiLo アルゴリズムの実装

	Q. Scop という名前のクラスの意味は ?
		A. 後で捨てるクラス
			パッケージスコープを解決するに、一次的に導入したもの
			グローバル変数の置場 ?
			パッケージに入るグローバルを収納するための入れ物 ?

	[誤殖] 図27.11 は DataToolkitImpl() を new すべき

==

6 部 ETS のケーススタディ

28 章 Visitor パターン

28.2 Visitor パターン
	デュアルディスパッチを使う
		ポリモーフィズムを使ったディスパッチを二度行っている

	Q. 実行時間が速い ( 何に比較して ? )
		A. if 文と比較して速いのでは ?
		# cf. 28.2.1 を参照

		Q. 関数行列って ?
			A. 関数 Ponter の 2 次元配列を作って、table lookup で呼出す。

	Q. 90 度回転って ?
		# acyclic では 180 度といっているが..


==

次は p.500 28.3 から

-- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< --

--
栗野 俊一 <kurino@xxxxxxxxxxxxxxxxxxxxxx>