Messgrößen

Die Klassen im Namespace \Alvine\Measure stellen Methoden und Konstanten für den Umgang mit Messgrößen, Maßsystemen und deren Berechnung bereit.

Einheiten

Einheiten werden mit der Unit-Klasse abgebildet und repräsentieren Maßeinheiten wie Kg, Sekunde, Liter oder Meter. Eindeutige Größen haben unterschiedliche Einheiten und es besteht zwischen Ihnen meistens kein Zusammenhang.

::uml::

skinparam monochrome true skinparam shadowing false

abstract class \Alvine\Measure\Unit extends \Alvine\Core\Alvine class \Alvine\Measure\ProductUnit extends \Alvine\Measure\DerivedUnit class \Alvine\Measure\AlternateUnit extends \Alvine\Measure\DerivedUnit class \Alvine\Measure\TransformedUnit extends \Alvine\Measure\DerivedUnit class \Alvine\Measure\BaseUnit extends \Alvine\Measure\Unit abstract class \Alvine\Measure\DerivedUnit extends \Alvine\Measure\Unit class \Alvine\Measure\CompoundUnit extends \Alvine\Measure\DerivedUnit

::end-uml::

Für SI-Einheiten existieren Methoden um die Einheiten zu erstellen. In dem Beispiel wird auf definierte SI-Einheiten zugegriffen.

\Alvine\Measure\SI::meter();
\Alvine\Measure\SI::candela();
\Alvine\Measure\SI::kilogram();
\Alvine\Measure\SI::kelvin();

Im folgenden Beispiel wird eine eigene Längen-Einheit [myl] definiert.

$mylength=new \Alvine\Measure\BaseUnit("myl");
echo $mylength->getDimension();
// -> [myl]

Mehrere Einheiten sind in einem Einheiten-System zusammengefasst. Das bekannteste Einheitensystem ist das SI-System.

::uml::

skinparam monochrome true skinparam shadowing false

class \Alvine\Core\Singleton class \Alvine\Measure\SystemOfUnits extends \Alvine\Core\Singleton class \Alvine\Measure\SI extends \Alvine\Measure\SystemOfUnits class \Alvine\Measure\NonSI extends \Alvine\Measure\SystemOfUnits class \Alvine\Core\Singleton extends \Alvine\Core\Alvine class \Alvine\Measure\Economics\Currencies extends \Alvine\Measure\SystemOfUnits

::end-uml::

Jedes Einheiten-System besitzt ein Modell. Dieses Modell stell zum einen die Einheiten und zum anderen den Konverter zum umrechnen von Einheiten bereit.

::uml::

skinparam monochrome true skinparam shadowing false

interface \Alvine\Measure\Model class \Alvine\Core\Alvine class \Alvine\Measure\SI\StandardModel extends \Alvine\Core\Alvine class \Alvine\Measure\SI\StandardModel implements \Alvine\Measure\Model

::end-uml::

Dimension

Einheiten können zu Dimensionen zusammengefasst werden. Dimensionen kann man auch als Einheitenart oder -klasse betrachten.

::uml::

skinparam monochrome true skinparam shadowing false

interface \Alvine\Measure\Model

class \Alvine\Measure\SI\StandardModel extends \Alvine\Core\Alvine class \Alvine\Measure\SI\StandardModel implements \Alvine\Measure\Model class \Alvine\Measure\Dimension extends \Alvine\Core\Alvine

::end-uml::

Über die Methode \Alvine\Measure\Dimension::setModel($model) muss ein Modell gesetzt werden. Es kann immer nur ein aktives Modell gesetzt sein, wir kein Modell gesetzt so wird das Standard-SI-Modell verwendet.

Ein Modell muss das Interface Alvine\Measure\Model implementieren und die Dimension und einen Konverter zurückliefern.

Mit Hilfe des Konverters kann man innerhalb des Einheitesystems umrechnungen vornehmen.

Im dem folgenden Beispiel werden Meilen in Kilometer umgerechnet. Dazu wird ein Konverter benutzt.

Für beide Größen werden in der Methode \Alvine\Measure\Unit::getConverterTo() die Dimensionen geholt und über die Demensionen der Konverter zur Umrechnung.

// Längeneinheit Meter
$meter=\Alvine\Measure\SI::METER();

// Meile als Teiler von Metern
$mile=$meter->times(1609344)->divide(1000);

// Konverter Meilen nach Meter
$mileToKilometer=$mile->getConverterTo(\Alvine\Measure\MetricPrefix::kilo($meter));

// Zu berechnende Meilen
$distanceInMiles=23.0;

$distanceInKilometers=$mileToKilometer->convert($distanceInMiles);

// Ausgabe
echo $distanceInKilometers;
// -> 37.014912

Präfixe

Die Klasse MetricPrefix stellt statische Methoden zur Darstellung von Größenordnungen von Einheiten bereit.

::uml::

skinparam monochrome true skinparam shadowing false

class \Alvine\Core\Alvine class \Alvine\Measure\BinaryPrefix extends \Alvine\Core\Alvine abstract \Alvine\Measure\MetricPrefix extends \Alvine\Core\Alvine

::end-uml::

$meter=\Alvine\Measure\SI::METER();
$kilometer=\Alvine\Measure\MetricPrefix::kilo($meter);

echo (string) $kilometer->getDimension();
// -> [L]
echo (string) $kilometer;
// -> (m)*1000

Weitere Details können hier nachgelesen werden.