爱飞 发表于 2015-1-18 10:59:54

了解下JAVA的Java 下一代: 没有承继性的扩大(二)探究 Clojure 协定

windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的
“没有承继性的扩大,第1部分”次要会商了Goovy、Scala和Clojure中为现有类增加新办法的机制,这也是Java下一代言语完成无承继扩大的办法之一。本文将切磋Clojure的协定怎样以立异的办法拓展Java扩大功效,为表达式成绩供应杰出的办理计划。
只管这期文章次要存眷可扩大性,但也会略为触及一些同意Clojure和Java代码无缝互操纵的Clojure特征。这两种言语有着基本性的不同(Java是命令式、面向对象的;而Clojure是函数式的),但Clojure完成了一些便利的特征,使Clojure可以在确保最小磨擦的条件下处置Java布局。
Clojure协定回忆
协定是Clojure生态体系的主要构成部分。上一期文章展现了怎样利用协定向现有类增加办法。协定也能匡助Clojure摹拟面向对象的言语的为人熟知的很多特征。比方,Clojure可摹拟面向对象的类—数据与办法的组合,办法是经由过程协定将纪录与函数绑定在一同的。为了了解协定与纪录之间的交互,起首必需先容映照,这是作为Clojure中纪录基本的中心数据布局。
映照与纪录
在Clojure中,映照就是一组称号-值对的汇合(其他言语中罕见的观点)。比方,清单1中的“读取-求值-打印”轮回(REPL)的第一步就是创立一个包括有关Clojure编程言语信息的映照:
清单1.与Clojure映照交互

user=>(deflanguage{:name"Clojure":designer"Hickey"})
#user/language
user=>(getlanguage:name)
"Clojure"
user=>(:namelanguage)
"Clojure"
user=>(:designerlanguage)
"Hickey"Clojure普遍利用映照,因而个中包括特别的语法糖,可简化与映照的交互。为检索与某个键有关的值,您可使用熟习的(get)函数。但Clojure会尽量地简化此类经常使用操纵。
本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
在Java情况中,言语的源代码并不是原生数据布局,必需对它举行剖析和转换。在Clojure(和其他Lisp变体)中,源代码暗示属于原生数据布局,好比列表,列表有助于注释言语中的奇异语法。在Lisp注释器将列表作为源代码读取时,它会实验着将列表的第一个元素注释为某些可挪用的元素,好比函数。因而在清单1中,(:namelanguage)表达式将前往与(getlanguage:name)表达式不异的了局。Clojure之以是供应这类语法糖,是由于从映照中检索项目属于经常使用操纵。
别的,在Clojure中,某些布局可放在函数挪用插槽中,这扩大了可挪用性(像挪用函数一样挪用这些布局的才能)。Java程序只能够挪用办法和内置言语语句。清单1展现了映照键(如(:namelanguage))在Clojure中可作为函数加以挪用。映照自己也是可挪用的;假如您以为替换语法(language:name)更简单浏览,也能够利用这类替换语法。Clojure丰厚的可挪用图表使得这类言语更容易于利用,从而削减了反复的语法(比方Java程序中罕见的get和set)。
但是,映照其实不能完整摹拟JVM类。Clojure供应了其他办法来匡助您建模包含数据和举动在内的成绩,加倍无缝地集成底层JVM。您能够创立对应于相似的底层JVM类且完全性各有分歧的多种布局,包含范例和纪录在内。您可使用(deftype)创立一个范例,一般用该范例来建模机器布局。比方,假如您必要一个数据范例来持有XML,那末很有大概会利用(deftypeMyXMLStructure)暗示XML内嵌的数据提取布局。在Clojure中,习气于利用纪录取得数据,信息纪录是使用程序的中心。为撑持这类用法,Clojure将在包括可挪用性等特征的底层纪录界说中主动包括大批接口。清单2中的REPL交互演示了纪录的底层类和超类:
清单2.纪录的底层类和超类

user=>(defrecordPerson)
user.Person

user=>(defbob(Person."Bob"4260601))
#user/bob
user=>(:namebob)
"Bob"
user=>(classbob)
user.Person
user=>(supers(classbob))
#{java.io.Serializableclojure.lang.Countedjava.lang.Object
clojure.lang.IKeywordLookupclojure.lang.IPersistentMap
clojure.lang.Associativeclojure.lang.IMeta
clojure.lang.IPersistentCollectionjava.util.Map
clojure.lang.IRecordclojure.lang.IObjjava.lang.Iterable
clojure.lang.Seqableclojure.lang.ILookup}在清单2中,我创立了一个名为Person的新纪录,它包括用于name、age和postal代码的字段。我可使用Clojure针对机关函数挪用的语法糖来机关此类新纪录(利用类称号加一个句点作为函数挪用)。前往值为带着名称空间的实例。(默许情形下,一切REPL交互都产生在user称号空间内。)可挪用性划定规矩仍旧存在,因而我可使用清单1展现的语法糖来会见纪录的成员。
挪用(class)函数时,它将前往Clojure创立的称号空间和类名(可与Java代码交互)。我还可使用(supers)来会见Person的超class。在清单2的最初四行中,Clojure完成了几个接口,包含IPersistentMap等可伸缩性接口,该接口同意利用Clojure的原生映照语法来处置类和对象。主动包括的一组接口是纪录与范例之间的一个主要不同,范例不包括任何主动接话柄现。
<p>
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。

飘飘悠悠 发表于 2015-1-20 12:30:22

Java 编程语言的风格十分接近C、C++语言。

小妖女 发表于 2015-1-22 08:30:14

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

精灵巫婆 发表于 2015-1-29 06:17:27

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

简单生活 发表于 2015-2-5 18:52:34

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

兰色精灵 发表于 2015-2-13 04:51:41

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

金色的骷髅 发表于 2015-3-3 14:02:29

Java 编程语言的风格十分接近C、C++语言。

愤怒的大鸟 发表于 2015-3-11 11:12:37

是一种突破用户端机器环境和CPU

仓酷云 发表于 2015-3-18 07:48:01

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

老尸 发表于 2015-3-25 13:26:27

是一种突破用户端机器环境和CPU
页: [1]
查看完整版本: 了解下JAVA的Java 下一代: 没有承继性的扩大(二)探究 Clojure 协定