- Range
-
Range (engl. für Bereich, Intervall, Grenze) ist ein von Martin Fowler für die Softwaretechnik entwickeltes Analysemuster.
Inhaltsverzeichnis
Range
Als Muster für die Softwaretechnik ist Range auf einen definierten Sachverhalt spezialisiert und dient der Modellierung von Wertebereichen. Es kommt bei der Konzeptionierung einer neuen Software zum Einsatz und dient nicht der direkten Programmierung, sondern als standardisiertes Muster für die Prüfung, Analyse und Darstellung des Sachverhaltes "Wertebereich". Es ermöglicht bei der späteren tatsächlichen Erstellung der Anwendungssoftware aufgrund der Spezialisierung und des Mustercharacters eine einfache Ableitung von Quellcode zur Implementierung der Funktionalität in die Softwareanwendung.
Einsatz
Prinzipiell kann dieses Muster für die Bildung eines Bereiches zwischen zwei beliebigen Größen verwendet werden. Einzige Anforderung ist, dass die Größen die Vergleichsoperationen
<, >, =, <=
, und>=
(bzw. Äquivalente für den jeweiligen Datentyp) unterstützen.Der Range allein dient bei der Behandlung von Wertebereichen (wie beispielsweise 10 - 15) nur als ein zusammengehöriges Objekt ohne weitere Bedeutung. Erst in Verbindung mit anderen Analysemustern entfaltet der Range die volle Funktionalität und kann noch deutlich mehr. Range wird oft zusammen mit Quantity oder Measurement verwendet. Quantity stellt die einzelne Werte inklusive ihrer Einheiten dar, Measurement dient der Modellierung von (möglicherweise mehreren) quantitativen Messungen für ein Objekt. Ohne Range erhält man mit diesen Analysemustern also Einblick in einzelne, individuelle Werte, die eine quantitative Aussage geben, aber nicht zusammenhängen und keine weitere Aussagekraft haben. Um die Gesamtmenge der Werte zu analysieren und sie einordnen zu können ist es sinnvoll, diese in Kategorien zu gruppieren. Hier kommt Range zur Anwendung, die Einteilung und Beurteilung der Werte ist Aufgabe von Range, indem es Wertebereiche (Kategorien) zur Verfügung stellt: Beispielsweise Umsätze in Bandbreiten oder alle Messungen, die unterhalb einer beliebigen Schwelle liegen. Damit wird eine Analyse möglich, ob Werte innerhalb ihrer erlaubten Toleranzen liegen und je nach Kategorie bzw. Einordnung des Ergebnisses kann unterschiedlich darauf reagiert werden.
Martin Fowler sagt zu Quantity und Range: “These a small fundamental patterns, yet ones that are used pretty widely. If you write OO systems they should be an ever-present part of your toolkit.” Diese beiden Muster sind also Integrale Bestandteile für die Softwareentwicklung.
Auch eine weitere Verknüpfung und Verwendung mit dem Muster Observation ist möglich, um die Werte während ihrer Beobachtung bereits kategorisieren und einordnen zu können.
Nutzung und Verwendung
Zur Nutzung des Musters besteht der 1. Schritt darin, die verschiedenen Wertebereiche zu definieren und abzugrenzen, um eine eindeutige Zuordnung aller Werte treffen zu können. Für Bereiche stellt man sich als erstes die Definition einer unteren und oberen Grenze vor, die zum Typ des jeweiligen Datenelements passen müssen. Dabei können Nummern (1...10), Datum (01.01.2000 bis 31.01.2000), aber auch genauso gut Strings (wie AAA...AZZZ) zum Einsatz kommen. Zu Ranges kann aber noch mehr Information gehören als nur ein durch obere und untere Grenze eingeschränkter Bereich. Es kann überlappende und aneinandergrenzende Intervalle geben, oder mehrere Intervalle können gemeinsam einen zusammenhängenden Bereich ergeben. Weiterhin werden in bestimmten Einsatzbereichen auch unbefristete Bereiche benötigt, beispielsweise "jünger als 6 Monate". Auch Operationen zum Umgang mit Ranges müssen vorhanden sein, beispielsweise zur Beurteilung ob Werte in einen speziellen Bereich hineingehören oder um Bereiche vergleichen zu können. Dies unterstützt das Range Muster.
Beispiel
Als einfachsten Fall (für die obere und untere Grenze) lässt sich das Range folgendermaßen darstellen:
Für die oben angesprochenen Weiteren Informationen und zur Unterstützung der vollen (im nächsten Absatz genannten Funktionalität) sieht die Darstellung folgendermaßen aus:
Funktionen
Eine Range beinhaltet also alle Informationen, die wichtig für einen Bereich sind:
- Was beinhaltet er sowie eine „Includes“-Operation zur Prüfung, ob ein Wert in das Range-Objekt gehört
- Womit überlappt das Range, beinhaltet das Range andere/kleinere Ranges (zur Nutzung von Teilranges) sowie die notwendigen Operationen zur Durchführung dieser Vergleiche
- Woran grenzt das Range an sowie die notwendige Operation zum Rangevergleich
- Unterstützung von Sortierkriterien und Zur-Verfügung-Stellung einer Sortierfunktion, um eine Rangfolge der Werte zu bestimmen
- Die betroffenen Größen (beispielsweise Zeit, Alter, ...)
- Welche Werte der Größen können überhaupt im Range verwendet werden (Gültigkeitsbereich)
- Obere und untere Grenze der Werte (müssen im Gültigkeitsbereich liegen; Grenzen sind zudem optional um unbefristete Bereiche darzustellen)
- Angaben zur Unterscheidung der Anwendungsfälle "kleiner als x" und "kleiner oder gleich x" (Boolean-Werte)
Siehe auch
- Analysemuster, eine generelle Übersicht über weitere Analysemuster
- Quantity, ein für Range nutzbares Analysemuster zur gemeinsamen Speicherung von Werten mit ihren zugehörigen Einheiten
- Measurement, ein für Range nutzbares Analysemuster für Messungen
Literatur
- Martin Fowler: Analysis Patterns. Addison-Wesley, Amsterdam November 1996, ISBN 978-020189542-1.
Weblinks
- Die Homepage des Entwicklers Martin Fowler für weitere Informationen zu ihm, weiteren Analysemustern sowie seinen Projekten
- Das Entwurfsmuster Range auf Martin Fowlers Homepage
Wikimedia Foundation.