# Range (Analysemuster)

| Beteilige dich an der Diskussion! | Dieser Artikel wurde wegen inhaltlicher Mängel auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+) Begründung: Nicht wirklich verständlich, siehe QS-Seite --WorkingForDivagSince1944 (Diskussion) 12:30, 24. Jun. 2023 (CEST) |
Range (englisch für „Bereich, Intervall, Grenze“) ist ein von Martin Fowler für die Softwaretechnik entwickeltes Analysemuster.

## Methode

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“. Die Ableitung des Quellcodes während der späteren konkreten Erstellung der Anwendungssoftware wird durch die Spezialisierung und den Mustercharakter vereinfacht.

## 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 erste 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.
Die Programmiersprache ABAP unterstützt explizit Ranges.

## 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)