[討論] 關於COP混合導向語言
Composite Oriented Programmint
對比OOP似乎是更適合描述現實世界狀態
我在Apache Zest Project中看到這個觀念
Zest是由Qi4j納入Apache後改的名稱
而Qi4j原先提倡觀念如下:
1.Behavior depends on Context
2.Decoupling is a virtue
3.Business Rules matters more.
4.Classes are dead, long live interfaces.
有人對COP程式設計有研究嗎?
會是未來新的語言的設計考量嗎?
目前Zest是屬於將Java轉化為COP思考模式的做開發的一個框架
https://zest.apache.org/java/2.1/two-minutes-intro.html
Hello world範例如連結
我理解的觀念是
將Interface看成是一個Role
class是實作方法的地方
一個Role可能會有早上當程式設計師晚上下班兼職做網路賣家
所以可以寫
Developer.class實作coding() ,debug()
Seller.class 實作sell(), shipping()
隨時想要讓這個Role處理什麼事情
只要Role跟class混合(mixin)
就可以使用該方法。
所以Role去mixin Develope.class
會產生一個Instance
就可以用coding() debug()
不知道理解有沒有錯。
感覺這樣的設計思想還不錯,
估計可以提升class的重用機率,
比起不斷的繼承造成肥大的體系似乎來的好的多?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.57.11
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1470506956.A.DDA.html
※ 編輯: ripple0129 (223.137.57.11), 08/07/2016 02:53:09
推
08/07 05:45, , 1F
08/07 05:45, 1F
→
08/07 05:45, , 2F
08/07 05:45, 2F
事實上我也只是猜測而已,相關的設計思維似乎是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
→
08/07 09:26, , 3F
08/07 09:26, 3F
→
08/07 18:54, , 4F
08/07 18:54, 4F
→
08/07 18:55, , 5F
08/07 18:55, 5F
→
08/07 18:57, , 6F
08/07 18:57, 6F
其實不算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
→
08/07 19:38, , 7F
08/07 19:38, 7F
個人覺得應該是不止這樣,上面寫的其實也是我的猜測,有可能有誤解。可能還是要讀原
文免得被我誤導XD
※ 編輯: ripple0129 (223.140.224.5), 08/07/2016 19:47:06
推
08/08 01:27, , 8F
08/08 01:27, 8F
推
08/08 03:41, , 9F
08/08 03:41, 9F
→
08/08 03:41, , 10F
08/08 03:41, 10F
→
08/08 03:42, , 11F
08/08 03:42, 11F
→
08/08 03:45, , 12F
08/08 03:45, 12F
→
08/08 03:49, , 13F
08/08 03:49, 13F
→
08/08 03:49, , 14F
08/08 03:49, 14F
→
08/08 03:53, , 15F
08/08 03:53, 15F
→
08/08 03:53, , 16F
08/08 03:53, 16F
→
08/08 03:58, , 17F
08/08 03:58, 17F
→
08/08 03:58, , 18F
08/08 03:58, 18F
→
08/08 03:58, , 19F
08/08 03:58, 19F
→
08/08 03:58, , 20F
08/08 03:58, 20F
→
08/08 04:00, , 21F
08/08 04:00, 21F
→
08/08 04:00, , 22F
08/08 04:00, 22F
→
08/08 04:14, , 23F
08/08 04:14, 23F
→
08/08 04:14, , 24F
08/08 04:14, 24F
→
08/08 04:14, , 25F
08/08 04:14, 25F
→
08/08 04:14, , 26F
08/08 04:14, 26F
C++不熟,原生就支援多重繼承的語言能輕鬆做到相同效果不意外。對C++的使用者來說,
不過就是提供了另一種coding style的想法吧。除了ios android這類語言綁定的之外,
還真想不到有什麼是C++辦不到的XD。
※ 編輯: ripple0129 (223.140.224.5), 08/08/2016 04:25:06
→
08/08 04:25, , 27F
08/08 04:25, 27F
→
08/08 04:25, , 28F
08/08 04:25, 28F
推
08/08 04:37, , 29F
08/08 04:37, 29F
→
08/08 04:37, , 30F
08/08 04:37, 30F
推
08/08 04:39, , 31F
08/08 04:39, 31F
用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
推
08/08 05:11, , 32F
08/08 05:11, 32F
→
08/08 05:11, , 33F
08/08 05:11, 33F
→
08/08 05:11, , 34F
08/08 05:11, 34F
→
08/08 05:12, , 35F
08/08 05:12, 35F
→
08/08 05:12, , 36F
08/08 05:12, 36F
→
08/08 05:12, , 37F
08/08 05:12, 37F
→
08/08 05:12, , 38F
08/08 05:12, 38F