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