`
Lich_Ray
  • 浏览: 163337 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

胡侃:面向对象思想的进化

阅读更多
引用
本文作者还是那个无名小辈 lichray。他在考查了一些语言和历史之后,觉得有必要谈一谈自己对面向对象思想的一些诡异的想法。文中会提到许多编程语言,不过当然了,重点在于思想,文章不是用来推销语言的。


面向对象编程思想的提出已经不是几年而是几十年了,考查其思想的变化,一方面是对现有语言的一些评判,另一方面,也算是对前辈计算机科学家的缅怀。 ——题记

Kristen Nygaard在1962年发明的 Simula 语言现在被认同为世界上第一种明确实现面向对象编程中某些“必要”元素(比如 class)的语言。Simula 是从 Algol 发展来的,可以说,是一种增加了 class 这个数据类型的 Algol,并将参数传递的默认模式从“按名调用”换成了“按引用调用”,还提出了根据类型确定初始化过程的方法。
从 Simula 的时代开始,科学家们在解决软件复杂度方面的思路开始“异常开阔”——当然也有资深的老派牛人们不这么认为。比方说 Peter Norvig,写了Design Patterns in Dynamic Programming一书来反驳。他认为设计模式早已体现在以 Lisp 为首的一批语言中了,根本不需要什么面向对象。但我还是跟从偶像 Alan Kay 的观点。某些时候,把一种特定的编程风格做进语言里也是必要的。
言归正传。Simula 之后的语言开始试图把 class 作为编程的基础,并提出了一系列出色的、基于类的编程风格,最终确定了“万物皆对象”这一面向对象理论的“终极思想”。于是,Alan Kay 的 Smalltalk 在 70年代诞生了。它是世界上第一个真正把面向对象作为程序组织基础手段的编程语言。它首次明确实现了“消息”和“继承”这两个重要概念,对于“封装”和“多态”也给出了里程碑式的解决方案。在 Smalltalk 程序中,一切程序元素(除了词法元素)都是对象,一切操作都是消息。而且,Smalltalk 的实现本身就是用 Smalltalk 写成的,这也就意味着,对于一个 Smalltalk 程序来说,它的底层也是以面向对象为基础的。直到现在,也只有 Self 语言有资格在面向对象的程度方面与 Smalltalk 一较高下。
Smalltalk 在成为里程碑的同时,也成为了分水岭。Smalltalk 之后的面向对象语言的发展方向分成了两条路:一是继续把 Smalltalk 中封装的概念扩大化,为程序员添置更多的约束,以支持所谓的“大规模开发”的需要;另一方面,一些人主张继续理解面向对象的原理,为这一思想添加数学上解释,而不仅仅是“拿来主义”,使程序员更不易出错或“分神”。
正像大家所猜测的那样,前者指的是以 C++ 为代表的、坚持以命令式语言风格去实现面向对象的“有类”语言,后者是以 Self 为代表的、准备以函数式语言风格去理解面向对象的“无类”语言。
有类语言中,C++ 是曾经的“蔚然大宗”。它最初的名字是 C with class,很显然,一开始只是想对 C 作出像 Simula 之于 Algol 那样的修改。但是,C++ 诞生的时候(1983年),也是 Smalltalk 80 产生的时代,也是 Ada 语言正在开发的时代。在享受了 Smalltalk 提出的类方法、对象方法、私有方法等等语言设施之后,C++ 提出了3个为后来的有类语言广泛采用的关键字:private,public,protected。不避讳的话,可以简称3P。这种区分相对于 Smalltalk 来说略少了一点,但事实证明,在实际的抽象中是够用的。另外,C++ 还从 Algol68 (这只是一个失败的旧事物罢了)那儿学来了运算符重载,还有 Ada 中的泛型和程序包。堆砌了太多特性的 C++ 显得有些不堪重负,而且失败的教育(总是拿它当 C 的升级版讲解!)、失败的实现(尤以 Visual C++ 为甚)也是它后来在开源界不那么受欢迎的重要原因。C++ 之后的有类语言开始了消减多余特性,理清思路的努力。
紧接着 C++ 之后出现的语言主要有 Objective Pascal 和 Objective-C。后者是 Mac 公司的拳头开发语言,前者是什么?就是 Turbo Pacal 中的 Pascal 语言。二者试着给古老的语言们添加新的元素。前者只是很客气的添加了 new 和 unit,特性不足;后者的转型是成功的,但说句题外话:想象一下 C 的基础上直接加上 Smalltalk 的消息传递语法,这就是 Objective-C 的语法设计。
Java,原名 Oak。这个名字现在已经处于“无敌”状态,去年已经在语言排行榜上 K 掉 C 当上了老大。Java 没有什么新东西,正如上文所说,只是一个消除了多余特性后的产物。成功的原因,一是时代的召唤,而是官方实现的基于虚拟机的跨平台特性。虚拟机早已不是什么新事物了,不过有大公司出来宣传确实是新鲜事。也许是受了微软的影响,大多数普通程序员更愿意那种喜欢被某个大公司“罩着”的感觉,于是纷纷用起了 Java。历史就是这样,听不到你的嗟呀。
Java 火起来了,各大计算机方面的媒体上充斥着 Java、OOP 等等的字眼,仿佛面向对象只剩下 Java 一种模式。各种语言纷纷改头换面,以适应“新时代”的要求:Perl 加上了4P(package 也算一个);Objective Pascal 摇身一变成了 Boject Pascal,再改名 Delphi;Basic 名字前加上了 Visual,后来后面又加了 .Net;C++ 把 ++ 改成了 # 号;就连一向对面向对象嗤之以鼻的 PHP 都被迫升到了 4.0、5.0;我的“母语”Action Script”版本也升到了2.0、3.0。
在有些人眼中,这是一场“意义重大”的变革;但在我眼中,这是一场灾难。
因为,在某个角落,无类语言们正在为寻找面向对象的数学理论基础而努力。为什么要寻找数学理论基础?这个问题早在70吗=年代就已经不是个问题了,而现在居然还有人不明所以。有类语言和无类语言的区别,就像是命令式与函数式之间的区别,就像是图灵机和 Lambda 演算之间的区别,就是一字一次的编程和面向整体操作的区别,就是 Bug 多和少之间的区别,就是单线程与高效并发之间的区别,就是必将灭亡的旧事物和必将走向辉煌的新事物之间的区别……这么多,还不够吗?
无类语言从已有的 lambda 演算理论中寻找适合解释面向对象思想的部分。1986 年研究完成的 Self 语言首先抛弃了 class 关键字,从对类和对象这两个基本问题上做文章。“万物皆对象”,类就是对象,但用它可以产生对象;怎么产生?通过复制已有对象产生。这种手段称为“基于原型的面向对象程序设计”。Self 之于无类语言,相对于 C++ 之于有类语言。它是无类语言中的蔚然大宗。但可惜的是,Sun 公司的 Self 实现几乎没有进步;Smalltalk 可能因为受够了 Java 之流自称继承了自己,认为 Self 是它唯一的“知心朋友”,发起了一个叫做 Morphic 新体系,算是对经典的延续。
Self 之后,1993年出现了 Lua。Lua 是无类语言的一个特别“函数式”的版本,在继承了 Scheme 所有思想之后,消灭了专有 List 这一数据结构,全以哈希表代之,并出色地解释了许多程序表示上的一些不太明朗的问题,还区分了消息发送和普通函数调用。Lua 不论从那个角度(科学或者商业)来看都是成功的,是无类语言中的佼佼者。
Lua 之后出现了 JavaScript,原名 LiveScript(1995),国际标准收录名为 ECMAScript。JavaScript 与 Java 诞生于同一时代,生不逢时的同时又生而逢时。说它生不逢时,是因为在 Java 的盛名之下,不负众多程序员的“众望”,被他们指责为“假面向对象”;说它生而逢时,是因为,它总算没在一浪高过一浪的 class + 4P 的嚷嚷中倒下,成为我们最为熟知无类语言。它实在是太优秀然而又太谦虚了:它秉承了 Lisp 家族的一贯传统,能够用数据表示程序本身(JSO);它又有足够的函数式编程特性,但它谦虚地称之为 function;它用复制对象再用 new 关键字 apply 构造函数的方式漂亮地解释了类和对象的关系;相对于 Lua 取消了消息发送和函数调用之间的界限;在没有任何 4P 关键字的情况下还能用逃逸变量理论实现 4P 的所有特性(不要被 dojo 之类的库蒙蔽了双眼)。几乎是一个完美的 Self 的继任者,但还是那句话,真正会 JavaScript 的人不多啊。
至此,无类语言的发展似乎已经很令人满意了,理论似乎已经成熟,只剩下一个问题:函数本身是一个什么样的对象?E 语言(1987,提出很早,实现太晚)回答了这个问题。答案很简单。函数是对象的一种,对象和方法都是 lambda 算子,如果你愿意,又可以把函数的函数体再表示为对象的一个方法!看起来这个答案不那么起眼,但它确实让人们领教了 lambda 演算在抽象层次上的嚣张。同时,E 语言还大胆地加入了对象继承的概念——一个对象可以像类继承一样继承其它对象的属性——因为这仅仅是 lambda 算子的扩展罢了!
但是,无类语言的进步不会就此结束,还有更多、跟有力量的无类语言产生,比如 Scala,一个给无类语言添加了 ML 中的静态多态类型判定和惰性运算的变态……也许真的有一天,面向对象,甚至是面向策略,真的能和函数式编程达到和谐。
历史就是这样一个聋子,听不到你的嗟呀。不过,但愿后人会从这些嗟呀中借鉴到很多。

注:还有两个很牛语言没提到:Ruby 和 Python。其中前者学 Smalltalk 学地精神分裂,去掉了 Smalltalk 的强大 IDE 之后居然一炮走红;Python 是个不知道该站在那一边的语言,既没有 3P 又不知道逃逸变量或 block 是什么,惨兮兮的。
分享到:
评论
23 楼 qixinkui 2011-12-31  
看下来,感觉 zhh2007 的意思是 不许假牛B!只要我花点力气也可以装出来这种假牛B!
oxware 是真诚客观的。
像楼主致敬,真不错的帖子!现在大学要毕业了吧?哪里高就去了?
22 楼 Lich_Ray 2007-06-26  
引用
还要说什么“很有我当年的风采”,你不想想我玩汇编玩C语言时你还上小学4、5年级呢,

我“当年”在西祠上和人瞎扯时也是这样振振有词地回一大堆,想来好玩。
引用
你的强项是FP、JavaScript是吧,好啊,从现在起,一个星期后我这个从没接触过FP的老家伙就跟你深入讨论FP,你先别告诉我你FP学了N个月了或N年了,省得到时我会喷饭。。。

祝你好运。FP 不难,希望你能喜欢上它,虽然可能对你的工作用处不大。
引用
Scheme对于我来说就是一个“玩具语言”,昨晚还买了本<<ML程序设计>>,每次看到ML时就发出疑问:ML语言设计者是不是个色胚?
那位作者还好意思说“是不是C的年代就要结束了”。。。无语。。。。

ML 是用 C 实现的,他说这话的意思当然不会是 C 不行了,而是用 C 的人的编程思想应该进步了。
引用
还有你那个什么“ Mazy 编程语言”我也下来看了,听说你的JavaScript很牛X,没想到连广泛使用的IE都不支持。。。

IE 是什么?我怎么没听说过?
引用
看你对Java也12分的不屑,你也不想想JavaScript的名字前面为什么有“Java”???

越是有“名”的东西,就越是值得怀疑。真正优秀的事物,从来就不需要不优秀的人为它喝彩;只有不优秀的事物才需要人气。
PS: JavaScript 标准收录名为 ECMAScript。
引用
还有,你那个最多算个表达式解析器,跟真正的编译器差十万八千里,

和真正的编译器相差十万八千里是事实,因为那是“实验性”的;但你说那“最多算个表达式解析器”就有点草率了吧?

PS:
我现在有点不想和你比了,虽然我很想show一下自己。你不考研了不代表我没有考试——我今年的托福考试报名报上了,我还有更高的追求,我不需要现在就来证明我的实力,用现在一时的快乐断送前程。
不过当然了,你还是有机会来“揭我的短”的。你不是觉得Java语言很好吗?如果你能证明这一点,我算你赢。千万不要搬出 Sun 公司的那一番话来教育我,省得我喷饭。我只想听你谈谈你对其语言本身的看法。
还有,希望你能喜欢上 FP,不准说我是“小p孩”。
21 楼 Eastsun 2007-06-26  
呵呵,期待两位展现自己实力.
搬板凳学习:)
20 楼 Lich_Ray 2007-06-26  
此楼层作废。刚才在这儿占了楼层,改完后居然发现下面又有回帖了,速度够快。
19 楼 Lich_Ray 2007-06-25  
一开口就说这么多,很有我当年的风采。
18 楼 game_over 2007-06-25  
不行,看不明白,还得学习啊
17 楼 Lich_Ray 2007-06-25  
很好!很想和你下个“战书”!有人来激发我的斗志了!
既然你也对编译很感兴趣,那就讨论这个好了。最近很忙,等我第二篇讨论函数式编程语言优化的帖子放出来,我们就在那儿讨论吧。
PS1: 如果你确信自己可以“在短时间内”理解 lisp/scheme 以及函数式编程的话,我们也可以讨论这个。
PS2: 你说过“我曾经还放言说要“创造一门新语言”呢”。我去年放言要创造一个编队(12 个)编程语言及其各自的 7 套版本,现在已经创造了一个了;虽然还只是个实验性实现,不过用还是能用的。有兴趣吗?
16 楼 Elminster 2007-06-25  
Lich_Ray 写道
我说自己是在“胡侃”,只是怕人暗地里说我在“胡侃”;既然有人挑明了,那也无妨——我不惮就此展开讨论。
我也觉得这个被评为“精华贴”不太合适(但并不代表内容不好),写得有点急了;不如评这个:古老,但很神奇
不要指责我写错字——别字是输入法造成的,错字是编辑器造成的。
关于提升论坛“等级”的问题我非常有兴趣,这是我写好文章的动力,希望大家不要因为我不回帖就产生误解。
当然了,如果作为一个大学生,“在论坛有个很高的‘等级’应该不错”,还可以享受“JavaEye 提供的非常棒的招聘服务”;但让我深感可惜的是,我是个高中生,这么些星星都浪费了,还被人误解想要找工作。
LS 啊,不要总觉得别人有点智商就是“轻狂”。踏踏实实才是正道。


嚣张的胡侃是年轻人的专利,没什么不好。
不过你那篇“古老,但很神奇”写得很不妥当,那个例子糟糕透了。Scheme 在那个程序显得特别简短纯粹是因为:1、内置链表,2、内置 list-tail 函数,拿这个来说事只会让人觉得投机取巧。
15 楼 oxware 2007-06-25  
zhh2007 写道
oxware 写道
zhh2007 写道
Lich_Ray 写道
zhh2007 写道
真的是“胡侃”,
对语言真有兴趣看看<<程序设计语言-实践之路>>

原来楼上也看过<<程序设计语言-实践之路>>啊,正好可以交流一下啊;最近第二版要放出来啦,不过我在南京还没有看到。
那本书真的很好。不过其实也只覆盖了部分思想。真正要比较全面地了解这些东西,最好去查阅国外计算机科学家的论文。Google Scolar 是个不错的工具,Lisp 1.5 程序员手册我就是用它找到的。



书是入门级的,也太贵,所以我没买,只在书店角落里蹲了几次翻翻看。
只是你“胡侃”起来的思路让人跟不上,这可能是你到达了某个境界了,恭喜。


我不小心看到你另一篇已进入“激战”的良好贴,
是不是对编译感兴趣的人都看起来像“妖怪”?
也许这种自我暗示从心理上能激发一点动力,但旁人一看,哦,确实像“妖怪”。


谈论怎么使用一门语言有时候看上去很无聊,
就像我告诉你我8年前汇编考了99,C考了96一样无聊。


等你聚集了足够多的耐心好好研究一下现实中的某一编译器的源码后,你会发现
学习一门语言就像你把一豆腐块放入嘴中,没嚼几下就吞下去了。

不过我现在在想:语言知道了太多会不会抑制创造力?对思想造成污染?



最后,在乎星星、钻石的人也许有他(她)的目的,具体是什么这就不得而知了?
现在恰恰是程序员被所谓的有限几种工业语言严重限制了思维
这篇文章谈的不是语言,而是语言带来的思维
很多优秀的思维都被商业的浪潮所侵蚀


呵呵,难得有人回贴。
不过我想你不知道我在向楼主表达什么,楼主也不一定完全知道。
他本人倒是没回贴,只给我发了个站内消息(抱歉,我不想回站内消息)。

楼主自己都说是“胡侃”了,我还有什么好说,
只是对JavaEye网站定位什么是“精华良好贴”的风格有点不可思意,
就像我有一贴也被评为“精华贴”一样。。。

当然,想要讨论细节问题我倒是很有兴趣,有很多东西我也不懂,真要讨论我会认真准备,
不要总搞一些让外行人看起来很玄乎的概念,玄乎还不要紧,
最起码表达的思路不要那么混乱吗,每次发完贴自己再读读,错别字也不用太多吗!

至于如何提升论坛“等级”的问题我一点兴趣没有,
当然,要是还是学生的话,在论坛有个很高的“等级”应该不错,可惜
我不是学生,也用不到JavaEye提供的非常棒的招聘服务。


年少轻狂没什么错,我也年少轻狂过,还过之而无不及。

踏踏实实才是正道。


但是为什么我看得很顺畅呢……我只是在看回帖的时候看到了楼主的年龄,并没有太在意。我作为一个研究生并没有感觉到文中有任何幼稚和不妥的地方,相反有很多在浮躁的业界早已被遗忘的好东西。年龄不应该是一个障碍
这个文章里面没有任何玄乎的概念,都是基础理论。
14 楼 Lich_Ray 2007-06-25  
我说自己是在“胡侃”,只是怕人暗地里说我在“胡侃”;既然有人挑明了,那也无妨——我不惮就此展开讨论。
我也觉得这个被评为“精华贴”不太合适(但并不代表内容不好),写得有点急了;不如评这个:古老,但很神奇
不要指责我写错字——别字是输入法造成的,错字是编辑器造成的。
关于提升论坛“等级”的问题我非常有兴趣,这是我写好文章的动力,希望大家不要因为我不回帖就产生误解。
当然了,如果作为一个大学生,“在论坛有个很高的‘等级’应该不错”,还可以享受“JavaEye 提供的非常棒的招聘服务”;但让我深感可惜的是,我是个高中生,这么些星星都浪费了,还被人误解想要找工作。
LS 啊,不要总觉得别人有点智商就是“轻狂”。踏踏实实才是正道。
13 楼 oxware 2007-06-24  
zhh2007 写道
Lich_Ray 写道
zhh2007 写道
真的是“胡侃”,
对语言真有兴趣看看<<程序设计语言-实践之路>>

原来楼上也看过<<程序设计语言-实践之路>>啊,正好可以交流一下啊;最近第二版要放出来啦,不过我在南京还没有看到。
那本书真的很好。不过其实也只覆盖了部分思想。真正要比较全面地了解这些东西,最好去查阅国外计算机科学家的论文。Google Scolar 是个不错的工具,Lisp 1.5 程序员手册我就是用它找到的。



书是入门级的,也太贵,所以我没买,只在书店角落里蹲了几次翻翻看。
只是你“胡侃”起来的思路让人跟不上,这可能是你到达了某个境界了,恭喜。


我不小心看到你另一篇已进入“激战”的良好贴,
是不是对编译感兴趣的人都看起来像“妖怪”?
也许这种自我暗示从心理上能激发一点动力,但旁人一看,哦,确实像“妖怪”。


谈论怎么使用一门语言有时候看上去很无聊,
就像我告诉你我8年前汇编考了99,C考了96一样无聊。


等你聚集了足够多的耐心好好研究一下现实中的某一编译器的源码后,你会发现
学习一门语言就像你把一豆腐块放入嘴中,没嚼几下就吞下去了。

不过我现在在想:语言知道了太多会不会抑制创造力?对思想造成污染?



最后,在乎星星、钻石的人也许有他(她)的目的,具体是什么这就不得而知了?
现在恰恰是程序员被所谓的有限几种工业语言严重限制了思维
这篇文章谈的不是语言,而是语言带来的思维
很多优秀的思维都被商业的浪潮所侵蚀
12 楼 Lich_Ray 2007-06-13  
zhh2007 写道
真的是“胡侃”,
对语言真有兴趣看看<<程序设计语言-实践之路>>

原来楼上也看过<<程序设计语言-实践之路>>啊,正好可以交流一下啊;最近第二版要放出来啦,不过我在南京还没有看到。
那本书真的很好。不过其实也只覆盖了部分思想。真正要比较全面地了解这些东西,最好去查阅国外计算机科学家的论文。Google Scolar 是个不错的工具,Lisp 1.5 程序员手册我就是用它找到的。
11 楼 sp42 2007-06-13  
不是的。LZ这样说是有一定道理的。
10 楼 imjl 2007-06-13  
无语。

不知道lz到底做了什么,从什么角度再说事情。

给我感觉乱乱乱。。。。。。。。。。。。。。。
9 楼 Lich_Ray 2007-06-12  
我写的关于 JavaScript 实现OOP的文章终于完工了:
http://lichray.iteye.com/blog/89554
对无类语言有点兴趣的可以去看看。
8 楼 fredzhang 2007-06-12  
看LZ的BLOG发现LZ才17岁,真是江山待有才人出啊
7 楼 sp42 2007-06-12  
引用
Lua 之后出现了 JavaScript,原名 LiveScript(1995),国际标准收录名为 ECMAScript。JavaScript 与 Java 诞生于同一时代,生不逢时的同时又生而逢时。说它生不逢时,是因为在 Java 的盛名之下,不负众多程序员的“众望”,被他们指责为“假面向对象”;说它生而逢时,是因为,它总算没在一浪高过一浪的 class + 4P 的嚷嚷中倒下,成为我们最为熟知无类语言。它实在是太优秀然而又太谦虚了:它秉承了 Lisp 家族的一贯传统,能够用数据表示程序本身(JSO);它又有足够的函数式编程特性,但它谦虚地称之为 function;它用复制对象再用 new 关键字 apply 构造函数的方式漂亮地解释了类和对象的关系;相对于 Lua 取消了消息发送和函数调用之间的界限;在没有任何 4P 关键字的情况下还能用逃逸变量理论实现 4P 的所有特性(不要被 dojo 之类的库蒙蔽了双眼)。几乎是一个完美的 Self 的继任者,但还是那句话,真正会 JavaScript 的人不多啊


That's the POINT!!
现在不明白JS不要紧
看懂了EXT的source,就明白了!!
6 楼 LucasLee 2007-06-12  
粗看了一遍,觉得没什么内容;
再看了一遍,觉得实际是看不大懂,什么算子之类的概念,不明白啊.
5 楼 Lich_Ray 2007-06-12  
dogstar 写道
ruby也是无类语言了?我是在深入研究了javascript后才明白了ruby的一切皆是对象的概念,反而我觉得javascript的function作为一等功名,更是强大一些。

Ruby 是不是无类语言?回答这个问题就像回答 Smalltalk 是不是无类语言一样困难。如果想听点好听的话,那么可以这样说:它们都超脱了。
PS: 楼上在说什么啊。现在我语言已经没必要分编译与否了。Objc、Scheme、Haskell、Scala 等等语言都有编译器、虚拟机、解释器实现。编译与否只是个实现问题,和语言的关系正在淡化。
4 楼 huangyiiiiii 2007-06-12  
什么有类语言无类语言,不如直接说编译型语言解释型语言来得痛快。编译型语言都是你所谓的有类语言,解释型语言都是你所谓的无类语言。
解释型语言的所谓类本质上都只是个名字空间,一个哈希表而已。

相关推荐

    胡侃游戏自动化测试

    申明一下,只是在这里抛砖引玉,各位如果有好的方法和建议,欢迎指正。  首先,据我了解,国内的游戏(MMORPG)行业(国外的我不知道哈),几乎还没有比较成功的游戏自动化测试体系,或许是我孤陋寡闻吧!...

    胡侃软件开发之C#的委托

    C#的详细的委托介绍,包括委托链,事件,lambda等.

    胡侃软件开发之C#的线程

    主要讲述了C#的线程,线程池,task以及线程间的同步.包括各种同步类的详细介绍和代码示例.

    胡侃学习(理论)计算机.pdf

    计算机专业

    《白话C++》适合初学者

    这本书的特点在于语言生动,没有枯燥的感觉在聊天胡侃中学习C++,不会累!

    机器学习实战:基于Scikit-Learn、Keras和TensorFlow

    机器学习实战:基于Scikit-Learn、Keras和TensorFlow 机器学习实战:基于Scikit-Learn、Keras和TensorFlow 机器学习实战:基于Scikit-Learn、Keras和TensorFlow 机器学习实战:基于Scikit-Learn、Keras和TensorFlow ...

    Hands-On Genetic Algorithms with Python: Applying genetic algori

    Hands-On Genetic Algorithms with Python: Applying genetic algorithms to solve real-world deep learning and artificial intelligence problems pdf Hands-On Genetic Algorithms with Python: Applying ...

    SSD_CRM1.0.0.2客户关系管理系统

    SSD_CRM客户关系管理系统是在Sugarcrm与vtigercrm两套开源系统的基础上二次开发而成。本套系统开源免费,大家可以自由传播,安装,甚至二次开发。本系统拥有商业CRM系统的绝大部分功能。安装方式采用一键式安装。...

    基于matlab的分形插值程序(二维和三维都有)

    基于matlab的二维和三维曲面分形插值

    蚁群算法matlab版

    蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 ...

    Hands-On Deep Learning Architectures with Python Create deep neu

    Hands-On Deep Learning Architectures with Python Create deep neural networks to solve computational problems using TensorFlow... (Yuxi (Hayden) Liu, Saransh Mehta) (Z-Library) pdf ...

    蚁群算法python版

    蚁群算法Python实现案例蚁群算法Python实现案例 蚁群算法Python实现案例蚁群算法Python实现案例 蚁群算法Python实现案例蚁群算法Python实现案例 蚁群算法Python实现案例蚁群算法Python实现案例 ...

    SSD_CRM客户关系管理系统

    SSD_CRM客户关系管理系统是在Sugarcrm与vtigercrm两套开源系统的基础上二次开发而成。本套系统开源免费,大家可以自由传播,安装,甚至二次开发。本系统拥有商业CRM系统的绝大部分功能。安装方式采用一键式安装。...

    keil vision4

    2009年2月发布Keil uVision4[1],Keil uVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多...

    Fiddler 编程猫专用插件 1.0.8 预览版

    Fiddler 编程猫专用插件 1.0.8 预览版

Global site tag (gtag.js) - Google Analytics