descargar java specifications requirements

java - descargar - ¿Qué es exactamente una especificación?



java offline (4)

Leo o escucho oraciones como:

La API de persistencia de Java (JPA) es una especificación de interfaz de programación de aplicaciones Java ...

o

JavaServer Faces (JSF) es una especificación de Java ...

pero no estoy seguro si entiendo qué es exactamente una especificación ..

Digamos que creo una nueva especificación JMA, Java Math API, que es una especificación Java Math.

¿Es suficiente que defino mi especificación de la siguiente manera?

¿JMA debe proporcionar un método que agregue dos enteros?

o, tengo que crear un documento algo como:

JMA debe proporcionar el método: int jmaAdd (int x, int y)?

O, ¿tengo que crear las interfaces y distribuir el código fuente?

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

¿O tengo que compilar las interfaces y publicarlas como jar?

Además, ¿puede una especificación contener clases abstractas o clases? ¿O debe consistir sólo en interfaces?

¿Qué hace una especificación, una especificación?


¿Es suficiente que defino mi especificación de la siguiente manera?

¿JMA debe proporcionar un método que agregue dos enteros?

Esa es una especificación.

No es muy útil porque no ofrece muchas garantías al usuario de una implementación de esa especificación. Si quisiera escribir un programa que agregue dos enteros, no podría hacerlo simplemente leyendo la especificación.

Sin embargo, le da mucha libertad al implementador . Generalmente, desea que su especificación sea precisa en los puntos que son importantes para el usuario , pero vagos en los puntos que son importantes para el implementador . De esa manera, el usuario obtiene las garantías que necesita para poder escribir sus programas, pero también le da al implementador la libertad de adaptar su implementación a su nicho particular.

Por ejemplo, la especificación del lenguaje Java no dice nada sobre la recolección de basura. Solo define cuando los objetos son y no son alcanzables, y define que puede crear nuevos objetos. Cómo funciona la asignación de memoria, cómo funciona el recolector de basura, ya sea un recuento de referencias, un rastreo o un recolector basado en regiones, etc., todos se quedan fuera, y por lo tanto diferentes implementaciones para diferentes nichos pueden usar diferentes implementaciones de recolectores de basura , y diferentes implementaciones para el mismo nicho pueden competir entre sí.

o, tengo que crear un documento algo como:

JMA debe proporcionar el método: int jmaAdd (int x, int y)?

Esa es también una especificación. Es incluso menos útil que el anterior. Sí define el nombre del método, pero no define lo que hace.

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

Es una implementación perfectamente válida de esa especificación, como es

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

Nuevamente, no hay garantías para el usuario y demasiado margen de maniobra (o más precisamente: margen de maniobra en las áreas equivocadas) para el implementador.

O, ¿tengo que crear las interfaces y distribuir el código fuente?

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

No necesariamente llamaría a eso una especificación. Eso es código, y por lo tanto una implementación.

Nota: por supuesto, en Java, las interface proporcionan una especificación del comportamiento que las class implementan . Pero eso no es lo que significa el término especificación de la forma en que lo usaste en tu pregunta.

¿O tengo que compilar las interfaces y publicarlas como jar?

Una vez más, eso es una implementación.

Además, ¿puede una especificación contener clases abstractas o clases? ¿O debe consistir sólo en interfaces?

Una especificación no contiene nada. Es un pedazo de papel.

Típicamente, las especificaciones están escritas en inglés. Bueno, en realidad, están escritos en un lenguaje especializado de escritura de especificaciones, que a menudo es un subconjunto formal muy estilizado de inglés con semántica específica. Por ejemplo, BCP14 / RFC2119: Palabras clave para usar en RFC para indicar niveles de requisitos definen el significado preciso de algunas palabras comunes en inglés en relación con los documentos de estándares IETF. (Curiosamente, también es una especificación, por lo que es una especificación para escribir especificaciones).

La lógica formal también se usa a veces, especialmente en las especificaciones del lenguaje de programación para describir las reglas de escritura. Y a veces, incluso se usan lenguajes de especificación formal especializados, como la notación Z.

¿Qué hace una especificación, una especificación?

La respuesta simple y no muy satisfactoria es que una especificación es una especificación si se llama especificación por personas que se preocupan por las especificaciones. (O más generalmente: pensado como una especificación.)

Diferentes comunidades tienen diferentes puntos de vista sobre las especificaciones. Y diferentes nombres para ellos.

Por ejemplo, la especificación original para el lenguaje de programación del scheme se publicó simplemente en un informe científico. Luego, después de algunas rondas de mejoras y nuevos informes, publicaron el "Informe revisado sobre el esquema de lenguaje algorítmico". Y después de eso, el "Informe revisado revisado sobre el esquema de lenguaje algorítmico". Con eso comenzó una especie de broma, y ​​la versión actual del lenguaje se define en el "Informe revisado revisado revisado revisado revisado revisado sobre el esquema de lenguaje algorítmico", comúnmente escrito el "Informe revisado 7 sobre el esquema de lenguaje algorítmico" o simplemente " R7RS ".

Ninguno de esos informes se llama una "especificación", sin embargo, cada uno es una especificación. Antes de Scheme, ALGOL también usaba el término "Informe", al igual que varios otros idiomas.

Los RFC de Internet son también un buen ejemplo. Técnicamente, todo un RFC es, es una "Solicitud de comentarios". Solo muy pocos de esos RFC se elevan realmente al estado de "Estándares". Algunos también son "Mejores Prácticas Actuales". Ninguno de ellos se llama "Especificación", pero muchos de ellos se tratan de esa manera. Por ejemplo, HTTP no es un estándar, pero se trata como un estándar y una especificación, y partes significativas de nuestra nueva economía mundial se basan en eso.

Si desea familiarizarse con las especificaciones, probablemente sea mejor si acaba de leer algo:


Creo que la idea clave aquí es "la especificación no incluye una implementación".

Cuando Sun era el administrador de Java, escribían especificaciones para funciones como Java EE y JPA, dando a otros proveedores la libertad de implementar lo que quisieran. Por lo general, Sun tendría una implementación propia con la que competir, pero su objetivo era vender hardware. Alentar a otros proveedores a proporcionar implementaciones competitivas solo fomentó ese objetivo.

Las especificaciones de Sun no vendrían con código ni JARs; eran descripciones en prosa de cómo funcionaría el código.


En Java-land, estas especificaciones se inician como solicitudes de especificación de Java (JSR).

Aquí se define:

https://jcp.org/en/jsr/overview

Una vez aceptadas, estas son las especificaciones.


Si uno hace una búsqueda en Google , obtiene:

spec · i · fi · ca · tion ˌspesəfəˈkāSH (ə) n / noun noun: especificación; sustantivo plural: especificaciones

un acto de describir o identificar algo con precisión o de establecer un requisito preciso.

Ejemplo : "dar una especificación completa del trabajo anunciado"

(...)

Por lo tanto, significa que usted describe cómo debería funcionar algo, no lo que uno tiene que hacer para que funcione (que es la implementación ).

Hay lenguajes formales para especificar, por ejemplo, las condiciones previas y posteriores de un método. Entonces se pueden usar herramientas para (semi) verificar automáticamente un subconjunto de estas condiciones.

Otros lenguajes formales le permiten realizar una programación de restricciones automatizada (como, por ejemplo, mi especificación para resolver un rompecabezas de varios sudokus ).

Otro ejemplo es CSS: usted especifica cómo debe verse su página web, las instrucciones sobre cómo hacer que un botón verde no sea parte de CSS.