From 208c56b56940e58fae1253a8d38e9e56249eb0cb Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Thu, 26 Aug 2021 11:26:02 -0500 Subject: Finished initial draft of design document --- docs/diagrams/units-class-diagram.plantuml.png | Bin 0 -> 94248 bytes docs/diagrams/units-class-diagram.plantuml.txt | 72 +++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 docs/diagrams/units-class-diagram.plantuml.png create mode 100644 docs/diagrams/units-class-diagram.plantuml.txt (limited to 'docs/diagrams') diff --git a/docs/diagrams/units-class-diagram.plantuml.png b/docs/diagrams/units-class-diagram.plantuml.png new file mode 100644 index 0000000..7c68ab5 Binary files /dev/null and b/docs/diagrams/units-class-diagram.plantuml.png differ diff --git a/docs/diagrams/units-class-diagram.plantuml.txt b/docs/diagrams/units-class-diagram.plantuml.txt new file mode 100644 index 0000000..7baf168 --- /dev/null +++ b/docs/diagrams/units-class-diagram.plantuml.txt @@ -0,0 +1,72 @@ +@startuml +abstract class Unit { + -unitBase : ObjectProduct + -nameSymbol : NameSymbol + -dimension : ObjectProduct + +{static} fromConversionFunctions(ObjectProduct, DoubleUnaryOperator, DoubleUnaryOperator) : Unit + #Unit(ObjectProduct, NameSymbol) : Unit + ~Unit(NameSymbol) : Unit + +canConvertTo(Unit) : boolean + +convertTo(Unit, double) : double + #convertFromBase(double) : double + #convertToBase(double) : double + +isMetric() : boolean + +withName(NameSymbol) : Unit +} +class BaseUnit { + -dimension : BaseDimension + -BaseUnit(BaseDimension, String, String, Set, double) : LinearUnit + -LinearUnit(ObjectProduct, double, NameSymbol) : LinearUnit + +convertTo(LinearUnit, UncertainDouble) : UncertainDouble + +plus(LinearUnit) : LinearUnit + +minus(LinearUnit) : LinearUnit + +times(LinearUnit) : LinearUnit + +dividedBy(LinearUnit) : LinearUnit + +times(double) : LinearUnit + +dividedBy(double) : LinearUnit + +toExponent(int) : LinearUnit + +withPrefix(UnitPrefix) : LinearUnit + +withName(NameSymbol) : LinearUnit +} +class UnitPrefix { + -multiplier : double + +times(double) : UnitPrefix + +dividedBy(double) : UnitPrefix +} +class UnitDatabase { + -prefixlessUnits : Map + -units : Map + -prefixes : Map + -dimensions : Map> + -unitExpressionParser : ExpressionParser + +loadUnitsFile(Path) + -addUnitOrPrefixFromLine(String, long) + +addUnit(String, Unit) + +containsUnitName(String) : boolean + +evaluateUnitExpression(String) : LinearUnitValue + +getUnit(String) : Unit +} +class UnitValue { + -unit : Unit + -value : double + +canConvertTo(Unit) : boolean + +convertTo(Unit) : UnitValue + +convertToLinear(LinearUnit) : LinearUnitValue +} + +Unit <|-- BaseUnit +Unit --* BaseUnit +BaseDimension -o BaseUnit +Unit <|-- LinearUnit +Unit *- SI +UnitValue --o Unit +UnitDatabase --* Unit +UnitDatabase --* UnitPrefix +UnitDatabase --* BaseDimension +UnitDatabase -* "4" ExpressionParser +@enduml -- cgit v1.2.3