Conhecendo a JSR-385: Units of Measurement 2.0

Daniel Dias
Jul 29, 2019 · 4 min read
http://unitsofmeasurement.github.io/

Neste post vamos conhecer um pouco de uma API muito interessante e muito util, ele é similar a Money API .

Um framework que suporta representação robusta e tratamento correto de quantidades é uma necessidade básica dos desenvolvedores Java em vários domínios, incluindo ciência, engenharia, medicina, finanças ou manufatura.

Introdução a JSR-385: Units of Measurement

A API Unit of Measurement fornece um conjunto de interfaces de programação de linguagem Java para manipular unidades e quantidades.

As interfaces fornecem uma camada que separa o código do cliente, que chamaria a API, do código da biblioteca, que implementa a API.

A especificação contém Interfaces e classes abstratas com métodos para operações unitárias:

  • Verificação da compatibilidade da unidade
  • Expressão de uma quantidade em várias unidades
  • Operações aritméticas em unidades

Os desenvolvedores freqüentemente encontram a necessidade de modelar unidades de medida, porque os objetos no mundo real estão sujeitos a essas medidas.

Ao trabalhar com unidades, os desenvolvedores precisam entender a matemática das unidades, como converter entre sistemas, e como formatar e analisar representações de strings de unidades. A maior parte deste trabalho pode ser consolidada em um ou dois pacotes Java, que é o principal objetivo desta JSR.

Os principais tipos desta API, ou seja, Dimension, Quantity e Unit,, são definidos no javax.measure de nível superior.

O pacote javax.measure.quantity define tipos de quantidade (por exemplo, massa, comprimento), enquanto o pacote javax.measure define as unidades em que as quantidades podem ser expressas (por exemplo, grama, medidor). Quantidades e unidades trabalham em sinergia através do uso de Java Generics.

Provavelmente a interface mais fundamental com a qual o usuário precisa estar familiarizado é javax.measure.Unit.

O tipo de unidade representa uma quantidade conhecida que foi adotada como padrão de medição. Por exemplo “quilômetro” e “watt” são unidades.

A interface de dimensão representa a dimensão de uma unidade. Dimensões concretas são obtidas através do Método getDimension() da Unit. Portanto, enquanto dimensão é um aspecto muito importante de uma unidade, raramente usado ou instanciado por si só.

Essa interface representa uma propriedade quantitativa ou atributo de algo. Massa, tempo, distância, calor e separação angular estão entre os exemplos familiares de propriedades quantitativas.

Esta API suporta apenas quantidades mensuráveis — todas as instâncias de quantidade são conceitualmente (número, unidade <Q>).

Bem feita essa rápida introdução sobre a API , vamos partir para construção do nosso projeto .

Aqui estarei usando o Java 11, mais também funciona com Java 8 . Então crie o seu projeto com o seguinte pom.xml :

Na linhas 19–23 adicionamos a RI (Indriya) que implementa a API .

Agora vamos começar a usar um pouco a JSR com pequenos exemplos de codigos bem simples .

Primeiro vamos criar um app que vai calcular o IMC (Índice de massa corporal) e a sua fórmula é a seguinte :

https://sportadictos.com/2014/09/calcular-imc

a fórmula é bem simples e no exemplo vamos desconsiderar as condições de peso ideal.

Essa fórmula na API fica da seguinte forma :

Na linha 11 passamos uma quantidade chamando a interface Quantity<Q> que recebe um tipo de quantidade que no caso é do tipo “Mass” , em seguida passamos a classe Quantities e chamamos o método getQuantity() passando o valor da nossa massa (peso) e em seguida informamos uma Unit(unidade) que é o KiloGrama .

Na linha 12 fazemos a mesma coisa, porém ao inves de Mass e Kilogram, passamos o Length para Quantity e a Unit(unidade) para Metre(metros) .

Já na linha 14 fazemos o nosso cálculo para retornar o nosso IMC, aqui passamos uma Quantity<?> com parâmetro desconhecido pois não sabemos que tipo o cálculo vai retornar no resultado .

Feito isso a saída é :

Legal não ? vejamos outro exemplo utilizando a fórmula da Segunda lei de Newton :

https://mundoeducacao.bol.uol.com.br/fisica/segunda-lei-newton.htm

Onde F é a força, M é a Massa e A é a aceleração , então isso na Api é assim :

Até aqui nas primeiras linhas tudo igual ao último exemplo.

Porém na linha 11 informarmos um tipo para o nosso Quantity<Q> onde sabemos examente que o tipo de retorno depois da equação e no final informamos que ele é do tipo FORCE .

Em seguida na linha 13 exibimos o seu valor convertendo para unidade Newton :

Bem isso é tudo, espero que os leitores tenham gostado de conhecer um pouco da JSR-385(UoM), explore mais aqui :

->{ http://unitsofmeasurement.github.io/}

Código fonte :

Daniel Dias

Software Engineering, Open Source Enthusiast. Apache and EclipseEE4J committer.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store