@startuml 'https://plantuml.com/class-diagram namespace NaturallyColorModels { class CyanMagentaYellowKey class HueSaturationValue class RedGreenBlue } namespace ColorModels { abstract AbstractColorModel class CyanMagentaYellowKey class HueSaturationValue class RedGreenBlue CyanMagentaYellowKey --|> AbstractColorModel HueSaturationValue --|> AbstractColorModel RedGreenBlue --|> AbstractColorModel } NaturallyColorModels.CyanMagentaYellowKey o-- ColorModels.CyanMagentaYellowKey NaturallyColorModels.HueSaturationValue o-- ColorModels.HueSaturationValue NaturallyColorModels.RedGreenBlue o-- ColorModels.RedGreenBlue namespace NaturallyTransformer { interface ColorModelTransformInterface { + toRedGreenBlue(): NaturallyColorModels.RedGreenBlue + toCyanMagentaYellowKey(): NaturallyColorModels.CyanMagentaYellowKey + toHueSaturationValue(): NaturallyColorModels.HueSaturationValue } class CyanMagentaYellowKeyTransformer class HueSaturationValueTransformer class RedGreenBlueTransformer NaturallyTransformer.ColorModelTransformInterface o-- Transformer.ColorModelTransformInterface NaturallyTransformer.ColorModelTransformInterface <|-- NaturallyTransformer.CyanMagentaYellowKeyTransformer NaturallyTransformer.ColorModelTransformInterface <|-- NaturallyTransformer.HueSaturationValueTransformer NaturallyTransformer.ColorModelTransformInterface <|-- NaturallyTransformer.RedGreenBlueTransformer NaturallyTransformer.RedGreenBlueTransformer o-- NaturallyColorModels.RedGreenBlue NaturallyTransformer.CyanMagentaYellowKeyTransformer o-- NaturallyColorModels.CyanMagentaYellowKey NaturallyTransformer.HueSaturationValueTransformer o-- NaturallyColorModels.HueSaturationValue } namespace Transformer { interface ColorModelTransformInterface { + toRedGreenBlue(): ColorModels.RedGreenBlue + toCyanMagentaYellowKey(): ColorModels.CyanMagentaYellowKey + toHueSaturationValue(): ColorModels.HueSaturationValue } class CyanMagentaYellowKeyTransformer class HueSaturationValueTransformer class RedGreenBlueTransformer Transformer.ColorModelTransformInterface <|-- Transformer.CyanMagentaYellowKeyTransformer Transformer.ColorModelTransformInterface <|-- Transformer.HueSaturationValueTransformer Transformer.ColorModelTransformInterface <|-- Transformer.RedGreenBlueTransformer namespace Utilities { abstract AbstractHueSaturationValueToUtility class CyanMagentaYellowKeyToHueSaturationValue class HueSaturationValueToCyanMagentaYellowKey class HueSaturationValueToRedGreenBlue class RedGreenBlueToHueSaturationValue Transformer.Utilities.CyanMagentaYellowKeyToHueSaturationValue --|> Transformer.Utilities.AbstractHueSaturationValueToUtility Transformer.Utilities.HueSaturationValueToCyanMagentaYellowKey --|> Transformer.Utilities.AbstractHueSaturationValueToUtility Transformer.Utilities.HueSaturationValueToRedGreenBlue --|> Transformer.Utilities.AbstractHueSaturationValueToUtility Transformer.Utilities.RedGreenBlueToHueSaturationValue --|> Transformer.Utilities.AbstractHueSaturationValueToUtility } CyanMagentaYellowKeyTransformer o-- Transformer.Utilities.CyanMagentaYellowKeyToHueSaturationValue CyanMagentaYellowKeyTransformer o-- Transformer.Utilities.HueSaturationValueToRedGreenBlue HueSaturationValueTransformer o-- Transformer.Utilities.HueSaturationValueToRedGreenBlue HueSaturationValueTransformer o-- Transformer.Utilities.HueSaturationValueToCyanMagentaYellowKey RedGreenBlueTransformer o-- Transformer.Utilities.RedGreenBlueToHueSaturationValue RedGreenBlueTransformer o-- Transformer.Utilities.HueSaturationValueToCyanMagentaYellowKey } ColorModels.AbstractColorModel --o Transformer.ColorModelTransformInterface @enduml