Conhecendo a JSR-385: Units of Measurement 2.0

Daniel Dias
Daniel Dias
Published in
4 min readJul 29, 2019
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.

A interface da Unit

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 Dimension

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ó.

A Interface Quantity

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 .

Maven Dependencies

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
Daniel Dias

SouJava Board Member, JCP Member, JSR-371 (MVC 1.0), JSR-382 (Config) specifications contributor, EG JSR-385 (UoM) and Eclipse Committer .