[討論] 關於COP混合導向語言

作者: ripple0129 (perry tsai)   2016-08-07 02:09:14
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的重用機率,
比起不斷的繼承造成肥大的體系似乎來的好的多?
作者: CoNsTaR ((const *))   2016-08-07 05:45:00
看起來是在避免多重繼承造成的問題吧 還有你那樣的用法不會產生一堆意義不明的免洗 classes 嗎 @@
作者: wesley234 (掃地)   2016-08-07 09:26:00
要喇賽了嗎?
作者: manaup   2016-08-07 18:54:00
看起來像是限制比較多的OOP。所以結論還是OOP?有種c++爛掉了,所以做一個限制比較多的java的即視感。不過那也得COP有那麼好才行。 要改誰都行,改好就很難說。其實每個OOP語言應該都蠻容易去實現OOP這種程式設計風格:)
作者: brucetu (sec)   2016-08-08 01:27:00
我覺得就是用組合而不用繼承
作者: CoNsTaR ((const *))   2016-08-08 03:41:00
剛剛去看了你的網址 其實我覺得它只是在做 c++ 原本就在做的事而已…Java is not my native language 覺得我亂講請見諒interface 就像是在模擬 c++ 的 header 一樣我不懂 Java,但就我的認知,你一樣要在 interface 裡面宣告 prototype 才能 mixin 對應的實作是嗎@@如果是的話 那其實講白了不就只是原型實作分離 然後用比較酷炫的方式動態的合併?就算不需要在 interface 裡預先宣告好可能被 mixin 的東西的 prototype它其實也只是讓 Generic 的東西可以像 member 一樣被操作而已如果是這樣的話 c++ 的 friend 就是這個功用,只是需要在class 裡面宣告這個 Generic function 為 friend如果要說機動性,可以隨時 mixin 來用的話,interface的 extends 組合看樣子是固定的,c++ 則可以用 template編譯期動態決定繼承組合(police-based design),也是一樣效果,而且 c++ 還比較滿足高聚合這點,低耦合則差不多不是在比較 Java 和 c++,而是拿我比較熟悉的語言來看所謂的 COP 帶來了什麼特性看到你在 Java 版的文了 那這其實就是 C 語言 .h 宣告 .c實作的概念啊 XDD那這應該是不會成為未來語言的設計考量啦 (被毆 XDDJava 沒有原型這種東西 這裡就是用 interface 模擬原型,class 實作C 和 C++ 通常原型宣告在 header,實作定義在 source,我上面只是想表達這個而已如果你真的喜歡這樣的設計,推薦你鑽研 c++,它提的東西很多都和 c++ 預設風格不謀而合,不過它倒是給了這些平常在用的東西一個全新的解釋,原來還可以這樣解讀啊 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com