@startuml class GUI{ This is a singleton --- - ImageContainer _currentImage - ImageManipulation[] _imageManipulations + none initialise() } class ImageContainer{ - imagedata _imageData + none loadImage(path: str) + imagedata getImage() + pair getDimensions() } abstract class ImageManipulation{ +none manipulateImage(ImageContainer, Parameters) +str[] getParameters() +str getManipulationName() } class CropImage{ - str _name } class GreyScaleImage{ - str _name } class SmoothImage{ - str _name } class RotateImage{ - str _name } class HSVImage{ - str _name } class HueShiftImage{ - str _name } GUI ..> ImageContainer GUI ..> ImageManipulation CropImage ..|> ImageManipulation GreyScaleImage ..|> ImageManipulation SmoothImage ..|> ImageManipulation RotateImage ..|> ImageManipulation HSVImage ..|> ImageManipulation HueShiftImage ..|> ImageManipulation @enduml