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