# Unit System

With Version 1.1.0 a more flexible and meaningful unit system has been introduced. A unit is used to define the dimension of a numerical value. In the VEC a unit is expressed by the abstract class *Unit*. The different existing types of units are represented by its concrete subclasses. Every unit can have an optional exponent. If no exponent is defined, this is equal to an exponent of 1.

The class *SIUnit* defines a unit in the terms of the SI-System. A *SIUnit* is defined by a combination of an optional *SiPrefix* (e.g. Milli) and *SIUnitName* (e.g. Metre).

The class *IECUnit* defines a unit in the terms of the IEC-System which is used for measurement of digital data amounts.

The class *ImperialUnit* defines a unit in the terms of the imperial unit system (e.g. Inch).

The class *OtherUnit* is used to define units that do not belong to any standardized unit system, but which are relevant in the context of the VEC. Currently these are the units Pi (as a unit for angular frequency or circular measure) and Piece.

The class *CustomUnit* can be used to define units that are necessary for a specific use case and that are currently not considered in the VEC.

The class *CompositeUnit* is used to define units that are created by the multiplication of other units (Association *CompositeUnit.factors*). For example the Unit "Ohm per Metre" will be created with two instances of *SIUnit*. One *SIUnit* *Ohm* (without prefix and *exponent*) and one *SIUnit* Metre (without prefix and an *exponent* of "-1").

Mainly these *Units* are used by the class *ValueWithUnit* which can be either a *ValueRange* or a *NumericalValue*. A *ValueRange* defines a range of a value between *minimum* and *maximum.* A *NumericalValue *defines a single value with an optional *Tolerance.*

Note: For the purpose of clarity, not all literals of all enumerations are displayed. If literals are omitted in the graphical representation a "..." is shown.