読書会(アジャイルソフトウェア開発の奥義)第8回議事録
[ 戻る ]
「アジャイルソフトウェア開発の奥義」 : 第八回議事録 (案)
をお送り致します。
PS.
[凡例]
「26.2 天国への階段)」
^^^^ 行頭から章番号から始まっているものは本の章のタイトル
「proxy が二つの差を吸収する」
^ 先行するものなにも無い場合は、本の内容や、メモ
「Q. ここでいう API って ?」
^^
「A. JDBC のことでは ? ( 見方によるが.. )」
^^ Q./A. で始まるのは主に、会話記録
-- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< --
java 読書会
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. インナー (無名) クラスとして登録
右側の ( <
Q. AlarmClock の実装はどこ ?
A. 簡単な Class なので..
Q. せっかく java なので、実装が知りたい
A. ハードにデペンドしているから書けない ?
Q. 実際には、他から tic() で、kick されているだけなので、ハードには、関係なさそう。でも、非同期か同期かは決っていないのかも..
Q. <
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 の <
A. 「Monitoring Screen は<
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 から
[ 戻る ]