加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 什么是规范?

发布时间:2020-12-14 05:20:14 所属栏目:Java 来源:网络整理
导读:我读或听到如下句子: The Java Persistence API (JPA) is a Java application programming interface specification… 要么 JavaServer Faces (JSF) is a Java specification… 但我不知道我是否明白什么是一个规范. 让我说我创建一个新的规范JMA,Java Math
我读或听到如下句子:

The Java Persistence API (JPA) is a Java application programming
interface specification…

要么

JavaServer Faces (JSF) is a Java specification…

但我不知道我是否明白什么是一个规范.

让我说我创建一个新的规范JMA,Java Math API,它是一个Java数学规范..

是否足够我定义我的规范如下:

JMA must provide a method that adds two integers?

或者,我必须创建一个文件:

JMA must provide the method: int jmaAdd(int x,int y)?

或者,是否必须创建接口并分发源代码?

public interface JMA{
    int jmaAdd(int x,int y);
}

或者我必须编译接口并将其发布为jar?

另外,规范可以包含抽象类还是类?还是只能由接口组成?

什么是规范,规范?

解决方法

Is it enough that I define my specification as follows:

JMA must provide a method that adds two integers?

这是一个规范.

这不是一个非常有用的一个,因为它不给予用户该规范实现的许多保证.如果我想编写一个添加两个整数的程序,我只能从阅读规范中做到这一点.

尽管如此,它确实给予了实施者很多的自由.一般来说,您希望您的规范在对用户重要的位置上是精确的,但对于与实施者相关的要点则是模糊的.这样一来,用户获得了他能够编写程序所需的保证,同时也使实现者可以自由地将他的实现定制到他的特定利基.

例如,Java语言规范对垃圾收集没有任何意义.它只定义何时对象是可访问的,并且它定义了可以创建新对象.内存分配如何工作,垃圾收集器的工作原理,无论是引用计数,跟踪还是基于区域的收集器等等,所有这些都被忽略,因此不同的利基的不同实现可以使用不同的垃圾收集器实现,同一个利基的不同实现可以相互竞争.

or,do I have to create a document something like:

JMA must provide the method: int jmaAdd(int x,int y)?

这也是一个规范.它甚至比上面那些有用.它定义了方法的名称,但它没有定义它的作用.

int jmaAdd(int x,int y) { return x - y; }

是一个非常有效的规范实现

int jmaAdd(int x,int y) { return 0; }

再次,对于实施者来说,用户不能保证和太多的余地(或更准确地说,在错误的区域中的余地).

or,do I have to create the interfaces and distrubute the source code?

06002

我不一定会称该规范.这是代码,因此是一个实现.

注意:当然,在Java中,接口提供了类实现的行为规范.但是,这不是术语规范在您的问题中使用它的方式的意思.

or do I have to compile the interfaces and publish it as jar?

再次,这是一个实现.

Also,can a specification contain abstract classes or classes at all? Or must it consist only of interfaces?

规格不包含任何内容.这是一张纸.

通常,规格是用英文写的.那么实际上,它们是用专门的规范写作语言编写的,这种语言通常是具有特定语义的英语的高度程式化的正式子集.例如,BCP14/RFC2119: Key words for use in RFCs to Indicate Requirement Levels定义了与IETF标准文件相关的一些常用英语单词的确切含义. (有趣的是,它也是一个规范,因此使其成为编写规范的规范.)

有时还使用正式逻辑,特别是在编程语言规范中描述输入规则.有时甚至使用专门的正式规范语言,如Z Notation.

What makes a specification,a specification?

简单且不令人满意的答案是,规范是规范,如果被关心规范的人称为规范. (或更一般地说:作为一个规范).

不同的社区对规格有不同的看法.和他们不同的名字.

例如,scheme编程语言的原始规范只是在科学报告中公布.经过几轮的改进和新的报道,他们出版了“修订的算法语言计划报告”.之后是“修订的算法语言计划修订报告”.随之而来的是一种开玩笑的语言,而现行的语言版本则是在“修订的经修订的经修订的经修订的经修订的算法语言计划修订报告”中定义的,通常写成“修订的关于算法语言计划的7个报告”或只是“R7RS”.

这些报告都不被称为“规范”,但每一个都是一个规范.在计划之前,ALGOL还使用了“报告”一词,和其他几种语言一样.

互联网RFC也是一个很好的例子.从技术上讲,所有RFC都是“请求注释”.只有极少数的RFC实际上提升到“标准”状态.有些也是“最佳实践”.他们都不称为“规范”,但其中许多都是这样对待的.例如,HTTP不是一个标准,而是被视为一个标准和一个规范,而我们新的世界经济的重要部分是建立在这一点上的.

如果您想了解规格,最好只要阅读一些:

> Haskell 2010 Language Report(另一个名称为“报告”)
> Scala Language Specification Version 2.11
> ECMA-262 6th Edition,The ECMAScript 2015 Language Specification
> The Java Language Specification,Java SE 8 Edition
> The Java Virtual Machine Specification,Java SE 8 Edition
> HTTP Specifications,包括但不限于

> RFC7230: HTTP/1.1 Message Syntax and Routing
> RFC7231: HTTP/1.1 Semantics and Content
> RFC7540: HTTP/2
> RFC7541: HPACK Header Compression for HTTP/2

> The HTML Living Standard (aka HTML5)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读