z****e 发帖数: 54598 | 1 专业一点就是paradigm了
java就是最接近纯粹oop的impl语言
其他语言有各自的定位
比如haskell是fp之类的等等
那从一个人使用语言的角度出发
越纯粹的paradigm越好
paradigm如果混用,哪怕只有两个
都会造成非常可怕的后果
就是各自表述,互相之间会冲突
例子?
c++和scala都是如此
c++是procedural programming(pp)和oop还有其他p的混杂
c++自己说自己是oop,其实扯淡,无数的人写成了pp
scala则是oop和fp的混杂
fp本身的历史很不堪,就跟小菊花说的那样
fp在oop以前造成了灾难性的后果
所以才有了oop的推广,最初几次oop的尝试都取得了一定的进展并发展到现在
你今天学的四人帮的最常见的design pattern那本书
里面就用smalltalk, c++和java做例子
smalltalk就是oop最初的impl
所以
第一,多个paradigm混杂所带来的后果是灾难性的
其次,某些paradigm本身就很不堪
比如fp
所以oop至少可以说是目前为止,少数得到大多数人接受的paradigm
所以不仅是java,大部分现在流行的语言,都在往oop上靠拢
所以你可以看到ruby就是强化了oop部分的perl
公孙大神也在鼓吹python是oop,说python很靠近java
php也差不多
从理论上说,你要想让项目成功,第一步,不要弄多个paradigm
否则内部员工会冲突,不同paradigm的思维方式不一样
思维方式不一样的话,哪怕是同一个员工,神经都会错乱的
就像小手说的,一开始不让传状态你会发疯,后来看到别人传状态你会发疯
那算了吧,为了不发两次疯,我情愿不要fp了
毕竟出活是第一优先
然后在此基础之上,做优化,这里的优化就涉及到其他的p了
这个我一般定义为将官技能,也就是你在保证oop的基础之上
再在一些需要战斗力提升的地方恰当地使用其他p
比如我常用的aop,用来做log用
还有reflection就是meta programming paradigm(mpp)
这些,不过这样说太抽象,很没有意思
还是让那几个跳脚好玩 |
z****e 发帖数: 54598 | 2 当然说要100%只用一个p,有一定难度
但是尽量保持纯净性
java是这么做的
首先java保证自己是一个oop
其次,通过增加一些相对高级的类库
来添加其他的p
比如aop,你不用aspectj或者spring或者app server的话
是没有办法用的,而你如果主动去download这些东西的话
你应该知道自己在做什么
再比如reflection,也就是mpp
那这个大多数时候,不是常见的功能
而且学习有一定难度,很多人甚至搞不懂为什么要reflection
更谈不上使用,所以通过这种方式有效地控制了低级程序员乱搞
而c++和scala则基本上不存在这种控制
c++如果涉及到一些底层编程的话,那还有另外一种p
那就是imperative programming(ip)就有点汇编那种感觉
总之到底是什么p,弄到最后你也不知道是什么p
p就好比是一只军队的战斗纪律,如果战斗纪律混乱的话
那就意味着战场上士兵会有收到多个命令
肯定会乱,士兵一乱,等着死吧 |
z****e 发帖数: 54598 | 3 现在发展的方向是这样
以后争取让一个module用自己的p
而不是从一个工程的层面来讨论p
就是把每一个大项目切割成不同的modules
然后每一个modules通过自己的需要来选择p
这样就可以让不同的组用不同的p
而不至于互相冲突
但是要做到这一点,首先要实现多语言的支持
比如vert.x做的那样,支持多个语言
否则一个语言有多个p的话,不能保证module内部不会出现多个p
但是如果不同的module只能用一个语言的话
那只要控制这个语言在这个module上不要出现多个p
那这个应该还是可以的,因为scope首先被缩小了
其次就是不同语言本身或多或少对p会有控制
所以从约束p的滥用的角度出发,c++前途很明显是不行的
因为c++的p太多太滥,p可不是越多越好的东西
反过来说越少越好恐怕还是对 |