推 CoNsTaR: 看起來是在避免多重繼承造成的問題吧 還有你那樣的用法08/07 05:45
→ CoNsTaR: 不會產生一堆意義不明的免洗 classes 嗎 @@08/07 05:45
事實上我也只是猜測而已,相關的設計思維似乎是Domain Drive Design。我的理解是Int
erface做為一個Domain物件,在該Domain物件下它能結合不同的class(可以說是方法庫了
),面對不同的狀況下能透過混合產生不同的能力來處理。所以在需要時就生成instance
,用完就毀滅。至於classes會不會產生一堆免洗classes,我覺得可能還是會有個misc c
lass來處理那種不常用方法吧。一切純猜測,待有經驗的高手分享。
※ 編輯: ripple0129 (223.137.57.11), 08/07/2016 06:21:13
→ wesley234: 要喇賽了嗎?08/07 09:26
→ manaup: 看起來像是限制比較多的OOP。所以結論還是OOP?08/07 18:54
→ manaup: 有種c++爛掉了,所以做一個限制比較多的java的即視感。08/07 18:55
→ manaup: 不過那也得COP有那麼好才行。 要改誰都行,改好就很難說。08/07 18:57
其實不算OOP,真的要說算IOP(interface)。我(Role)是一個接口,當我是程式設計師時
,我要有與developer class的能力。我是賣家時要有seller class的能力。唯一對外面
向的都是我(Role)。如果以OOP的觀念設計,我白天是developer晚上變seller,會是兩
種物件,就無法充分描敘現實狀況。
其實每個OOP且帶有interface的語言應該都蠻容易去實現這一種程式設計風格。
※ 編輯: ripple0129 (223.140.224.5), 08/07/2016 19:23:17
※ 編輯: ripple0129 (223.140.224.5), 08/07/2016 19:25:13
→ manaup: 其實每個OOP語言應該都蠻容易去實現OOP這種程式設計風格:)08/07 19:38
個人覺得應該是不止這樣,上面寫的其實也是我的猜測,有可能有誤解。可能還是要讀原
文免得被我誤導XD
※ 編輯: ripple0129 (223.140.224.5), 08/07/2016 19:47:06
推 brucetu: 我覺得就是用組合而不用繼承 08/08 01:27
推 CoNsTaR: 剛剛去看了你的網址 其實我覺得它只是在做 c++ 原本就在 08/08 03:41
→ CoNsTaR: 做的事而已… 08/08 03:41
→ CoNsTaR: Java is not my native language 覺得我亂講請見諒 08/08 03:42
→ CoNsTaR: interface 就像是在模擬 c++ 的 header 一樣 08/08 03:45
→ CoNsTaR: 我不懂 Java,但就我的認知,你一樣要在 interface 裡面08/08 03:49
→ CoNsTaR: 宣告 prototype 才能 mixin 對應的實作是嗎@@08/08 03:49
→ CoNsTaR: 如果是的話 那其實講白了不就只是原型實作分離 然後用比 08/08 03:53
→ CoNsTaR: 較酷炫的方式動態的合併? 08/08 03:53
→ CoNsTaR: 就算不需要在 interface 裡預先宣告好可能被 mixin 的東 08/08 03:58
→ CoNsTaR: 西的 prototype 08/08 03:58
→ CoNsTaR: 它其實也只是讓 Generic 的東西可以像 member 一樣被操作 08/08 03:58
→ CoNsTaR: 而已 08/08 03:58
→ CoNsTaR: 如果是這樣的話 c++ 的 friend 就是這個功用,只是需要在 08/08 04:00
→ CoNsTaR: class 裡面宣告這個 Generic function 為 friend08/08 04:00
→ CoNsTaR: 如果要說機動性,可以隨時 mixin 來用的話,interface 08/08 04:14
→ CoNsTaR: 的 extends 組合看樣子是固定的,c++ 則可以用 template08/08 04:14
→ CoNsTaR: 編譯期動態決定繼承組合(police-based design),也是一08/08 04:14
→ CoNsTaR: 樣效果,而且 c++ 還比較滿足高聚合這點,低耦合則差不多 08/08 04:14
C++不熟,原生就支援多重繼承的語言能輕鬆做到相同效果不意外。對C++的使用者來說,
不過就是提供了另一種coding style的想法吧。除了ios android這類語言綁定的之外,
還真想不到有什麼是C++辦不到的XD。
※ 編輯: ripple0129 (223.140.224.5), 08/08/2016 04:25:06
→ CoNsTaR: 不是在比較 Java 和 c++,而是拿我比較熟悉的語言來看所 08/08 04:25
→ CoNsTaR: 謂的 COP 帶來了什麼特性 08/08 04:25
推 CoNsTaR: 看到你在 Java 版的文了 那這其實就是 C 語言 .h 宣告 .c 08/08 04:37
→ CoNsTaR: 實作的概念啊 XDD 08/08 04:37
推 CoNsTaR: 那這應該是不會成為未來語言的設計考量啦 (被毆 XDD 08/08 04:39
用C比好像怪怪的,非OOP語言,#include跟interface差距還是很大吧。倒比較像Java im
port。其實說起來語言要限制住這樣的思考模式來設計也反而有點死,可能這種方式還是
適合框架來實現比較實在。
※ 編輯: ripple0129 (223.140.224.5), 08/08/2016 04:50:52
也可以參考Zest在設計Application的思維,
https://zest.apache.org/java/2.1/howto-assemble-application.html
組合service entity成module,
module組合成layer,layer堆疊成application.
※ 編輯: ripple0129 (223.140.224.5), 08/08/2016 04:54:23
推 CoNsTaR: Java 沒有原型這種東西 這裡就是用 interface 模擬原型, 08/08 05:11
→ CoNsTaR: class 實作 08/08 05:11
→ CoNsTaR: C 和 C++ 通常原型宣告在 header,實作定義在 source, 08/08 05:11
→ CoNsTaR: 我上面只是想表達這個而已 08/08 05:12
→ CoNsTaR: 如果你真的喜歡這樣的設計,推薦你鑽研 c++,它提的東西 08/08 05:12
→ CoNsTaR: 很多都和 c++ 預設風格不謀而合,不過它倒是給了這些平常 08/08 05:12
→ CoNsTaR: 在用的東西一個全新的解釋,原來還可以這樣解讀啊 XD 08/08 05:12