[讨论] 关于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