- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我阅读或听到以下句子:
The Java Persistence API (JPA) is a Java application programming interface specification...
JavaServer Faces (JSF) is a Java specification...
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);
}
最佳答案
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?
简单且不太令人满意的答案是,如果规范被关心规范的人称为规范,那么规范就是规范。 (或者更一般地说:被认为是一种规范。)
不同的社区对规范有不同的看法。以及他们的不同名称。
例如, scheme 的原始规范编程语言只是发表在一份科学报告中。然后经过几轮改进和新报告,他们发布了《算法语言方案的修订报告》。之后是“关于算法语言方案的修订版修订报告”。随之开始了一种笑话,该语言的当前版本在“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/
Feel free to skip straight to TL/DR if you're not interested in details of the question 简短的序言: 我最近决定
我一直在阅读 A Tour of Go学习Go-Lang到目前为止一切顺利。 我目前在 Struct Fields类(class),这是右侧的示例代码: package main import "fm
Last time I got confused顺便说一下PowerShell急切地展开集合,基思总结了它的启发式如下: Putting the results (an array) within a
我是一名优秀的程序员,十分优秀!