<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Quantit%C3%A4t_%28Analysemuster%29</id>
	<title>Quantität (Analysemuster) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Quantit%C3%A4t_%28Analysemuster%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Quantit%C3%A4t_(Analysemuster)&amp;action=history"/>
	<updated>2026-06-21T06:11:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Quantit%C3%A4t_(Analysemuster)&amp;diff=538338&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Quantit%C3%A4t_(Analysemuster)&amp;diff=538338&amp;oldid=prev"/>
		<updated>2026-01-07T02:27:29Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039;&amp;#039; ({{enS|Quantity}}) ist ein [[Analysemuster]] aus der [[Softwaretechnik]] und dient zur Modellierung messbarer Werte und ihrer Einheit. Das Muster wurde von [[Martin Fowler]] entwickelt und in seinem Buch &amp;#039;&amp;#039;[[#Literatur|Analysemuster]]&amp;#039;&amp;#039; beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
Computersysteme verarbeiten die Informationen über Objekte der realen Welt als Attribute von [[Objektorientierte Programmierung|softwaretechnischen Objekten]]. Messbare Werte werden dabei als Zahl ohne Einheit dargestellt, da gängige Programmiersprachen keine Datentypen für [[Internationales Einheitensystem|SI]]-Größen oder [[Währung]]en anbieten.&lt;br /&gt;
&lt;br /&gt;
In der Praxis führt dieser Sachverhalt immer wieder zu Fehlern in [[Anwendungsprogramm]]en, wenn Berechnungen zwischen verschiedenen Einheiten nicht korrekt durchgeführt oder nicht verhindert werden, wie bei der Addition von 5 Metern und 10 Gramm.&lt;br /&gt;
&lt;br /&gt;
== Kontext ==&lt;br /&gt;
&amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; gehört zur Gruppe der Analysemuster &amp;#039;&amp;#039;Wahrnehmungen und Messungen&amp;#039;&amp;#039; (englisch &amp;#039;&amp;#039;Observations and Measurements&amp;#039;&amp;#039;). In dieser Gruppe finden sich Analysemuster, die im Rahmen eines Projekts zur Entwicklung einer medizinischen Anwendung im klinischen Bereich entstanden sind. Die Muster haben  allgemeinen Anspruch und können leicht auf andere [[Problemdomäne|Anwendungsdomänen]] übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Andere wichtige Muster dieser Gruppe sind &amp;#039;&amp;#039; [[Conversion Rate|Umwandlungsverhältnis]]&amp;#039;&amp;#039;, &amp;#039;&amp;#039;zusammengesetzte Einheit&amp;#039;&amp;#039;, &amp;#039;&amp;#039;[[Measurement (Analysemuster)|Messung]]&amp;#039;&amp;#039;,  und &amp;#039;&amp;#039;[[Observation (Analysemuster)|Wahrnehmung]]&amp;#039;&amp;#039;. &amp;#039;&amp;#039;Umwandlungsverhältnis&amp;#039;&amp;#039; erweitert &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; und erlaubt die Umrechnung von einer Einheit in eine andere.&lt;br /&gt;
&lt;br /&gt;
Der technische Einsatz dieses Analysemusters ist natürlich aufgrund der Vorgabe der Messbarkeit (zahlenmäßige Erfassung) bestimmter Merkmale dem Gebiet der Naturwissenschaften vorbehalten. Zum Zwecke der Standardisierung wurde hierfür ein sogenanntes „[[Internationales Einheitensystem]]“ entwickelt, das die Basisgrößen sowie ihre zugehörigen Basiseinheiten und zugeordnete Kurzzeichen nach internationalem Standard beinhaltet.&lt;br /&gt;
&lt;br /&gt;
== Lösung ==&lt;br /&gt;
[[Datei:quantity analysemuster uml-darstellung.png|gerahmt|Muster &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; als Klassendiagramm]]&lt;br /&gt;
&lt;br /&gt;
Der Begriff „Quantity“ ist mit dem deutschen Wort „Menge“ gleichgestellt. Er beschreibt die zahlenmäßige Erfassung von bestimmten Dingen in unserer realen Welt (Abzählbarkeit von Objekten). Darunter versteht man einen abgegrenzten messbaren Raum von Objekten eines bestimmten Typs. Dieser Raum wird durch den Namen des Typs dargestellt und durch die Objekte in abzählbare Einheiten gleicher Größe eingeteilt. Diesen Einheiten weist man zur Darstellung der Unterscheidung eindeutige Namen zu. Zur Beschreibung der Menge wird der Einheit ein Zahlenwert vorangestellt. Die sich daraus ergebenden Messwerte setzen sich daher immer aus einem Betrag und einer dazugehörigen Einheit zusammen.&lt;br /&gt;
&lt;br /&gt;
Bestimmte [[Datentypen]]  werden vom Typen-System der Programmiersprache über den [[Compiler]] zur Verfügung gestellt. Solche Datentypen sind beispielsweise Integer, Real, String und Datum. Da der Compiler diese Datentypen bereits versteht, können diese bereits für die Implementierung von Attributen innerhalb einer Klasse verwendet werden.&lt;br /&gt;
Andere Datentypen wiederum kennt der Compiler nicht oder sie setzen sich aus mehreren Grundattributen zusammen. Diese Typen implementiert man als abstrakte Datentypen in neuen Klassen und stellt dann über Beziehungen entsprechende Verbindungen zu den Klassen her, die auf diese Datentypen zugreifen müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; modelliert messbare Werte als [[Datentyp|Typ]], der den Betrag mit seiner zugehörigen Einheit kombiniert. &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; kann so zur Darstellung aller messbaren Werte verwendet werden und eignet sich besonders für Währungen.&lt;br /&gt;
&lt;br /&gt;
Werden messbare Werte und deren Einheit auf diese Weise als Objekte modelliert, ergeben sich daraus eine Reihe von Vorteilen. So umfasst &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; die nötigen [[Operation (UML)|Operationen]], um mit messbaren Werten zu rechnen und sie zu vergleichen. Hinzu kommen Operationen zur Ein- und Ausgabe.&lt;br /&gt;
&lt;br /&gt;
Dazu gehört die Prüfung, ob eine Rechenoperation mit zwei unterschiedlichen Einheiten überhaupt zulässig ist. 20 Kilogramm kann nicht zu 2 Metern addiert werden. Zusätzlich kann erkannt werden, falls für die Ausführung einer Rechenoperation lediglich eine Umrechnung notwendig ist, wie bei der Addition von 2 Metern und 3 Kilometern. Sobald mehrere Einheiten unterschieden werden müssen, sollte die Umrechnung allerdings nicht mehr von &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; selbst durchgeführt, sondern in das Muster &amp;#039;&amp;#039; [[Conversion Ratio|Umwandlungsverhältnis]]&amp;#039;&amp;#039; ausgelagert werden. Ähnliche Prüfungen sind auch beim Vergleichen von Quantitäten notwendig.&lt;br /&gt;
&lt;br /&gt;
Weitere Operationen werden zum Einlesen und zur Ausgabe zur Verfügung gestellt („toString()“ und „parse(String)“ in der Abbildung). Diese erlauben die Ausgabe als Zeichenkette, genauso wie das Einlesen einer Zeichenkette in &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039;. Meist wird dabei eine Darstellung gewählt, bei der zunächst der Betrag und dann die Einheit ausgegeben wird, z.&amp;amp;nbsp;B. „5 Sekunden“.&lt;br /&gt;
&lt;br /&gt;
== Beispiele und zugehörige Erläuterungen ==&lt;br /&gt;
&lt;br /&gt;
(1)&lt;br /&gt;
Wir betrachten zum besseren Verständnis folgenden Aussagesatz:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Die Temperatur beträgt 38 Grad-Celsius.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Diese Aussage beinhaltet 2 Begriffe und einen Zahlenwert. Die Begriffe müssen klar getrennt werden. Der Zahlenwert ist bereits eindeutig. Wir betrachten daher jeden Begriff als eigenen Typen und lassen dann beide Typen in eine Beziehung treten. Die Beziehung stellt dann den Zusammenhang zwischen den Typen dar und wird durch ein Verb gekennzeichnet. Der Zahlenwert (Betrag) wird dann dem jeweils passenden Typ zugeordnet. In diesem Falle stellt der Begriff „Temperatur“ den Raum dar, in dem sich die Objekte befinden. Die einzelnen Objekte selbst werden durch die Einheit mit dem Namen „Grad-Celsius“ dargestellt, von denen im Beispiel genau 38 gezählt werden können.&lt;br /&gt;
&lt;br /&gt;
(2)&lt;br /&gt;
Ein wichtiger Gesichtspunkt bei der Typenzuordnung ist die sinnvolle bzw. korrekte Verwendung der Begriffe zur Vermeidung von fehlerhaften Interpretationen. Vertauschungen von Begriffen müssen daher unbedingt vermieden werden.&lt;br /&gt;
Ein anderes Augenmerk sollte auch auf die zwingende Notwendigkeit bei der Verwendung des Analysemusters „Quantity“ gelegt werden. Für jeden Einzelfall ist dieser Aspekt dann getrennt zu betrachten.&lt;br /&gt;
Die folgende Aussage soll die Zusammenhänge verdeutlichen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Das Buch besteht aus 250 Seiten.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Eine Vertauschung der Begriffe „Buch“ und „Seite“ im Satz würde hier keinen Sinn ergeben.&lt;br /&gt;
In der Softwaretechnik gibt es dann einen Oberbegriff „Buch“ als [[Klasse (objektorientierte Programmierung)|Klasse]] mit einem Attribut „Seitenzahl“.&lt;br /&gt;
Es ist hierbei nicht erforderlich, die Anzahl der Seiten als „Quantity“ zu programmieren.&lt;br /&gt;
&lt;br /&gt;
== Geld ==&lt;br /&gt;
Werden monetäre Werte (Währungen) mit &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039; modelliert, spricht man auch vom Analysemuster &amp;#039;&amp;#039;Geld&amp;#039;&amp;#039; (englisch &amp;#039;&amp;#039;Money&amp;#039;&amp;#039;). &amp;#039;&amp;#039;Geld&amp;#039;&amp;#039; ist also nur ein Spezialfall von &amp;#039;&amp;#039;Quantität&amp;#039;&amp;#039;, bei dem die Einheit durch die Währung repräsentiert wird – das Konzept unterscheidet sich nicht.&lt;br /&gt;
&lt;br /&gt;
Bei der Darstellung von Währungen steht man vor der Entscheidung, diese Objekt-Eigenschaft entweder als Attribut in der Objekt-Klasse zu implementieren oder einen neuen Datentypen als eigene Klasse zur Aufnahme der entsprechenden Attribute zu generieren.&lt;br /&gt;
Es gibt verschiedene Währungen, denen bestimmte Namen eindeutig zugeordnet sind. Aufgrund dieser Tatsache ist bereits die Notwendigkeit zur Bildung einer eigenen Klasse erkennbar. In der praktischen Umsetzung wird dann eine eigene Klasse für den Grundtyp des Geldes mit einem sinnvollen Klassennamen erstellt (z.&amp;amp;nbsp;B. „Money“ oder „Geld“). An diese Klasse kann dann über eine Assoziation eine Unterklasse angehängt werden, die die verschiedenen Währungseinheiten dem Grundtyp „Money“ eindeutig zuordnet.&lt;br /&gt;
&lt;br /&gt;
Ein Unterschied ergibt sich jedoch daraus, dass sich die Umrechnungsfaktoren von Geldeinheiten im Gegensatz zu den physikalischen Größen mit der Zeit ändern. Eine weitere zusätzliche Eigenschaft von &amp;#039;&amp;#039;Geld&amp;#039;&amp;#039; betrifft das [[Runden]] von Zahlen. Nicht immer ist beim Umgang mit Geldeinheiten das mathematische Runden gewünscht. &amp;#039;&amp;#039;Geld&amp;#039;&amp;#039; kann zu diesem Zweck zusätzliche Rundungsregeln definieren. Beispielsweise kann beim Auszahlen von Geldmünzen gefordert werden, dass auf den nächsten Betrag aufgerundet wird, für den reale Münzen existieren.&lt;br /&gt;
&lt;br /&gt;
Ein ähnliches Problem tritt auf, wenn beispielsweise 100&amp;amp;nbsp;Euro an drei Parteien ausgezahlt werden sollen (100 geteilt durch 3). Ein Ergebnis von 33,33&amp;amp;nbsp;Euro stellt nicht zufrieden, da insgesamt nur 99,99&amp;amp;nbsp;Euro ausgezahlt würden und sozusagen 1 Cent verloren ginge. Man kann sich die Lösung des Problems so vorstellen, dass &amp;#039;&amp;#039;Geld&amp;#039;&amp;#039; zweimal 33,33&amp;amp;nbsp;Euro und einmal 33,34&amp;amp;nbsp;Euro als Ergebnis liefert. Eine Partei hat Glück und erhält also einen zusätzlichen Cent. Bei der Programmierung kann dies durch Rückgabe eines [[Container (Informatik)|Containers]] realisiert werden.&lt;br /&gt;
&lt;br /&gt;
Ein Geld-Objekt ist ein unveränderliches [[Wertobjekt]], d.&amp;amp;nbsp;h. Berechnungen mit einem Geld-Objekt führen nicht zur Veränderung des Objektes selbst, sondern erzeugen als Ergebnis ein neues Geld-Objekt.&lt;br /&gt;
&lt;br /&gt;
Der folgende [[Java (Programmiersprache)|Java]]-[[Quelltext]] zeigt eine Methode zur Multiplikation. Es wird ein neues Objekt vom Typ Geld erzeugt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Geld multipliziere(double arg) {&lt;br /&gt;
   return new Geld(betrag * arg, währung);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Martin Fowler&lt;br /&gt;
   |Titel=Analysemuster: wiederverwendbare Objektmodelle&lt;br /&gt;
   |Auflage=1.&lt;br /&gt;
   |Verlag=Addison-Wesley-Longman&lt;br /&gt;
   |Ort=Bonn&lt;br /&gt;
   |Datum=1999&lt;br /&gt;
   |ISBN=3-8273-1434-8&lt;br /&gt;
   |Seiten=40–42}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://www.martinfowler.com/ www.martinfowler.com] – Homepage von Martin Fowler&lt;br /&gt;
* [http://martinfowler.com/eaaDev/quantity.html Beschreibung Quantity] – Details zu Quantity von Martin Fowler&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Analysemuster]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>