gpt4 book ai didi

java - 规范究竟是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:45:26 24 4
gpt4 key购买 nike

我阅读或听到以下句子:

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)?



或者,我是否必须创建接口(interface)并分发源代码?
public interface JMA{
int jmaAdd(int x,int y);
}

还是我必须编译接口(interface)并将其发布为 jar?

此外,规范是否可以包含抽象类或类?或者它必须只包含接口(interface)?

什么使规范,规范?

最佳答案

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?

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


我不一定将其称为规范。那是代码,因此是一个实现。

注意:当然,在 Java 中, interface s 提供行为规范 class es 然后执行。但这不是您在问题中使用它的方式术语规范的含义。

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?



简单且不太令人满意的答案是,如果规范被关心规范的人称为规范,那么规范就是规范。 (或者更一般地说:被认为是一种规范。)

不同的社区对规范有不同的看法。以及他们的不同名称。

例如, 的原始规范编程语言只是发表在一份科学报告中。然后经过几轮改进和新报告,他们发布了《算法语言方案的修订报告》。之后是“关于算法语言方案的修订版修订报告”。随之开始了一种笑话,该语言的当前版本在“Revised Revised Revised Revised Revised Revised Revised Revised Revised只是“ R7RS”。

这些报告中没有一个被称为“规范”,但每一份报告都是一个规范。在 Scheme 之前,ALGOL 也使用了术语“报告”,其他几种语言也是如此。

Internet 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)
  • 关于java - 规范究竟是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456615/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com