@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() } abstract class Filters{ list[ImageManipulation] getFilters() } class LiveFilters{ } class PostFilters{ } class CropImage{ - str _name } class GreyScaleImage{ - str _name } class SmoothImage{ - str _name } class RotateImage{ - str _name } class HSVImage{ - str _name } class HueShiftImage{ - str _name } class GeoFilter{ - str _name } class GeoLocation{ str getUserCurrentTown() } class FaceRecognition{ pair[int,int] getFaceCentre(ImageContainer) } GUI ..> ImageContainer GUI ..> LiveFilters GUI ..> PostFilters LiveFilters ..|> Filters PostFilters ..|> Filters Filters ..> ImageManipulation FaceRecognition ..> ImageContainer GeoFilter ..> GeoLocation CropImage ..|> ImageManipulation GreyScaleImage ..|> ImageManipulation SmoothImage ..|> ImageManipulation RotateImage ..|> ImageManipulation HSVImage ..|> ImageManipulation HueShiftImage ..|> ImageManipulation GeoFilter ..|> ImageManipulation @enduml