2014年6月25日水曜日

Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems (Week 4)

==== Lecture ====
Section 1 Module 3 Part 6: The AsyncTask Framework (Part 1) (9:56)
[AsyncTask framework]
HaMeR: must understand pattern, lose connected
AsyncTask: strongly connected, handler, message, runnable等を理解しなくても使える。
public method: execute(), cancel(). アプリによって実行される。
protected method: onReExcecute, doInBackground等
hook methids overriddenで振る舞いを変える。
長くかかる処理をbackgroundで行う。UIの裏側など。UIを簡単にする。
cancel()の方が難しい。
frameworkの特徴: inversion control, Domein-specific, semi-complete

Section 1 Module 3 Part 7: The AsyncTask Framework (Part 2) (8:14)
[AsyncTask framework]
black-box framework: strategy, decorator, interfaceのみ知っていればよい。
white-box framework: template, state, 実装を知っている必要がある。
AsyncTaskのWhite-box elements: template(hook) mothods, sub classで実装。
AsyncTaskのBlac-box elements: strategyを渡すことでconfig出来る。
作りやすさと使いやすさのtrade-offs

Section 1 Module 3 Part 8: Programming with the Android Concurrency Frameworks (Part 1) (7:17)
[ThreadedDownload App]
HaMeR, AsyncTask
3 waysの実装方法を試す。
Posting & processing Runnables
Sending & handling Messages
Executing AsyncTasks
image URLを入力して、メニューボタンから処理を選んで、progress dialog、imageを表示。
Reset imageボタンも作る。

[Androidの3つのkey elements]
java source code
resource files: ボタンのアイコンデータ、UIのレイアウト、国際化文字列等。
manifest: xmlでapplicationの実行に必要な情報を定義する。
permissionやmain Activity(ThreadedDownload class)
UNレイアウトはmain.xmlで決める。処理を選ぶbuttonのhandler登録もここで行う。
ThreadedDownload AppのjavaのコードにUIのボタンなどをhard-configしなくて良い。

Section 1 Module 3 Part 9: Programming with the Android Concurrency Frameworks (Part 2) (13:10)
[ThreadedDownload App]
3つの手法の比較。
AsyncTaskは簡単で使いやすいが拡張性と効率は劣る。
Messageは拡張性、効率は上だが作るのが難しい。
Runnableは効率は良いが拡張性は低い?? 作りやすさは中間。
ダウンロードをbackgroundで行う。
イメージの表示は共通部品にする。

Benefits and Limitations of Patterns and Frameworks (Part 1) (25:00) [Optional Lecture]
Benefits and Limitations of Patterns and Frameworks (Part 2) (17:30) [Optional Lecture]
More Information on Patterns and Frameworks (11:30) [Optional Lecture]

==== Quiz ====
Lectureが4つだったので各2問で8問。
一回目は22/29, 2回目で満点だった。

==== Assignment ====
[Week-4-Assignment-3]
今週はPingPongでまたLectureの内容とはずれてた。
DownloadのAppは来週つくるのか??

FairとNon-Fairどちら? => 特に指定なし。non-fairで十分??
await()はtryするべき? => 呼出し元が割り込みを投げるので不要??
countDown()はtry不要? => non-blockingなので不要。
定数はfinal staticするべき? => TODOになってないから不要??
run,それともstart,join? => 例を見るとstartでjoinなし?
ping,pongどちらを先に実行? => どちらでもOKなので、ping?
acquire()のinterruptは? => catchしてstack traceする??
変数は出来るだけfinalにする? 初期化する? => 初期化がの場合が多そう??
=> Semaphoreの方も直す? => 今更面倒だから直さない??

try/finally, final, this, private, volatile, Lock, 初期化
constructorはlock不要。(W2-A1と同様)
volatileを使えばcacheの一貫性は保てる? => yes.
Uninterruptiblyでもtry/finallyするべき? => yes?
countのreturnでもlock必要? => yes.
ローカル変数も初期化すべき? finalをつけるべき? => yes.
thisはつけるべき? => 付けていない人の方が多い感じなのでつけないで命名規則で。
インスタンス変数にはmXxxxの名前にすべき? => yes.
importのunusedがある場合は親クラスとして使うかもしれない。
=> ちょっと待って。W4-A3ではimport Lockが削除されている。。。W3-A2も直すべき?
=> W3-A2はそのままになっているので、そっちはそのままにする。

Your work was submitted. Review your work to make sure everything looks OK.
のリンクから提出状況を確認できる。submit直後のみ。

[Evaluation]
thisを使っている人もそれなりにいた。
配列を使わない人もいた。
配列の初期化はメンバ変数宣言時点で行う人が多い。
finalは使わない。
fairがほとんどだった。どこかに記載あった??

S1
thisを使っている。
配列を使わないでメンバ変数を二つ用意している。
System.out.formatを使っている。
acquireUninterruptibly()
fair

S2
reflect.Array
concurrent.CyclicBarrier
importしているが使っていない。skeltonが古い??
acquireUninterruptibly()
fair

S3
acquireUninterruptibly()
fair

S4
acquire()、関数も勝手にthrowを付け加えている。
fair
await()をtry/catchしている。

S5
acquireUninterruptibly()
no-fair
await()をtry/catchしている。
JUnitTestでfail!!
引数で渡された文字列を使わずに、文字を直に書いてしまっていたため。

Self
TODOのコメントを2カ所間違って消してしまった。。。
引数のリストの中のコメントだったので。まあ良いとしよう。

[Results]
無事に満点で完了!

==== Etc ====
今週はAndroidの話が中心。
画像ダウンロードの演習の説明。
オプションの講義が半分あるが手が回らない。。。

Javaでは未使用の引数があってもwarning出ない??
Eclipseでも特に出ている様子はないが、オプションで変えられる??
メンバ変数で未使用の場合はwarningが出ている。

[Eclipse]
formatterでindentにtabを使わないでスペースを使うようにする。

==== log ====
2014/06/05 00:45 Lecture
2014/06/06 00:45 Lecture
2014/06/07 00:25 Lecture, Quiz
2014/06/07 02:20 Assignments
2014/06/19 01:15 Evaluation
2014/06/25 00:10 Result

0 件のコメント:

コメントを投稿