Conhecendo a JSR-385: Units of Measurement 2.0
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 :
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 :
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 :
Referencias
- https://github.com/unitsofmeasurement
- https://unitsofmeasurement.github.io/
- https://download.oracle.com/otn-pub/jcp/units-2_0-pr-spec/JSR385Specification-PR.pdf
- https://www.gitbook.com/book/unitsofmeasurement/uom-guide/details
- https://github.com/unitsofmeasurement/uom-demos
- https://github.com/Adopt-a-JSR/jsr385-demos