2011年8月5日 星期五

Compositon and Aggregation in UML

http://en.wikipedia.org/wiki/Class_diagram

Stronger dependency
Composition > Aggregation > Association

Composition: owns a (Car owns an Engine)(UML symbol with solid diamond)
Aggregation: has a(Car Model has an Engine Model)(UML symbol with empty diamond)

UML symbols reference the wikipedia link above.

2011年8月4日 星期四

Design Patterns in Android

閱讀"高煥堂","Google Android 設計招式之美"的心得

此書不是直接給出最終Pattern的樣子,而是描述如何直覺的演變出最終型態(以Android Framework為例), 熟悉這個過程會比較能欣賞高竿的程式代碼, 自己設計系統時, 也能用進階的想法去處理, 擺脫土法煉鋼的寫法

若可以在做系統設計時,把這13個Pattern套進去, GoF的23個, 倒是以後再說, 能融會13招的武學, 雖不能稱霸武林, 但已經可以稱得上是俠客了吧, 絕對超越一般憑藉蠻力的莽夫

試著讓每個系統都能引用這13個Pattern, 畫出System Block Diagram with 13 Patterns

(我的理解, 以產品生產流程為例)(TBD: 以咖啡自動販賣機為例)

1. Template Method : 用繼承(Inheritance)方式, 依工廠產品的模板生產具差異化功能產品

2. Factory Method : 定義工廠生產表單(Factory Method), 業務(Client)依照產品需求填寫, 工廠依照表單廠內生產, 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節

3. Observer : 用委託(Delegation)方式, 依工廠產品的模板委外生產, 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節

4. Abstract Factory : 業務(Client)依照產品需求下單給代工廠,代工廠(Abstract Factory)自己依照產品類別調整產線(+ Observer or Template Method), 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節(Service in  Android)

5. Adapter : 代工廠將工廠出產的產品或是組件, 配合客戶需要包裝新的ID, 但內容並沒有改變; 將角色之間的行為規範再抽出更好用的介面, 封包了複雜或不直覺的底層行為(repackage Binder.onTransact() in Android)

6. Composite: 產品的BOM (ListView in Android)

7. Strategy: 半成品組件, 可以簡化BOM, 如果是單純生產半成品的工廠, 就可套用生產產品相關的pattern. (BaseAdapter for ListView)

8. State: 產品所處狀態, 從接單,生產到出貨之間的過程和狀態

9. Proxy: 和Adapter一樣的用意, 但與其背後之代理對象有一樣的介面,可視為真正的分身(AIDL code gen in Android)

10. Bridge: 使用同一介面橋接各種技術(包括程式語言, OS Platform, media codec)

11. Iterator: use Cursor to manipulate Records(Cursor or Iterator in Android)

12. Mediator: 工廠裡的生產管制中心, 協調各單位, 統一溝通管道(可以利用Adapter重新包裝溝通介面)(The class that implement the Listener of View in Android)(Binder Driver in Android)

13. Facade: 最外圍的介面, 以網路磁碟(NAS)為例, 網路介面是最外圍的介面, 裡面可能是直接硬體儲存, 或是多了一層Adapter, 例如1394, USB, eSATA, Network...; 郵政信封的格式規範;

2011年8月2日 星期二

Java/Android's access modifier : protected

找了很多說明,還不如一句定義

http://en.wikibooks.org/wiki/Java_Programming/Keywords/protected


protected is a Java keyword.
This keyword is an access modifier, used before a method or other class member to signify that the method or variable can only be accessed by elements residing in its class, subclasses, or classes in the same package.

2011年8月1日 星期一

C++的virtual和Java的abstract

Use to override functions in parent class.

(C++)virtual與pure virtual
Good summary table from the link above. There are good examples there also.

Virtual function: Differences between C++ and Java

C++Java
Pure Virtual Functionvitual void func() = 0;abstarct void func();
Impure Virtual Functionvitual void func();void func();
Non-Virtual Functionvoid func();final void func();
Hiding Inherited NamesYesNo
Prohibiting InheritanceNofinal class