@startuml ''''''''''''''''''' ' Syntax reminder ' ''''''''''''''''''' ' ' <|-- ' Extension ' *-- ' Composition ' o-- ' Agregation ' ' Orientation of the links: ' 2 dashes: vertical ' 1 dash: horizontal '''''''''''''' ' Parameters ' '''''''''''''' hide empty members title (Somewhat simplified) OwlPS Positioner's class diagram '''''''''''''' ' Executable ' '''''''''''''' class "owlps-positionerd" as owlps_positionerd << (X, orchid) executable >> owlps_positionerd *-- Positioning ''''''''''''''''''''' ' Utilitary classes ' ''''''''''''''''''''' ' Note: for the sake of clarity, PosUtil and posexcept are not ' associated with the other classes, but they should actually be ' linked with pretty much all of them. package "Utilitary classes" { class PosUtil << static >> note top The functions of PosUtil are used by too many classes to link them all in this diagram end note class posexcept note bottom posexcept is the super-class of a bunch of exception classes that do not appear in this diagram end note ' Text file reading and writing class TextFileWriter class TextFileReader CSVFileReader <|-- TextFileReader } ''''''''''''''''''''''''' ' Configuration classes ' ''''''''''''''''''''''''' package "Configuration classes" { class Configuration << static >> UserInterface ..> Configuration } owlps_positionerd *-- UserInterface Configuration <.. Positioning '''''''''''''''''''''' ' Data input classes ' '''''''''''''''''''''' package "Data input classes" { class InputDataReader MobilesReaderCSV <.. InputDataReader CapturePointsReaderCSV <.. InputDataReader TopologyReaderCSV <.. InputDataReader } owlps_positionerd *-- InputDataReader UserInterface --> InputDataReader CSVFileReader <-- MobilesReaderCSV CSVFileReader <-- CapturePointsReaderCSV CSVFileReader <-- TopologyReaderCSV ''''''''''''''''' ' Input classes ' ''''''''''''''''' package "Input classes" { class Input abstract InputMedium --* Input InputCSV --|> InputMedium InputUDPSocket --|> InputMedium abstract InputLogMedium --* Input InputLogCSV --|> InputLogMedium } Input --* Positioning InputMedium <-- InputDataReader CSVFileReader <-- InputCSV TextFileWriter <-- InputLogCSV ''''''''''''''''''''''''''''''''' ' Positioning algorithm classes ' ''''''''''''''''''''''''''''''''' package "Positioning algorithm classes" { abstract PositioningAlgorithm RealPosition --|> PositioningAlgorithm abstract TrilaterationAlgorithm --|> PositioningAlgorithm InterlinkNetworks --|> TrilaterationAlgorithm FBCM --|> TrilaterationAlgorithm abstract TrilaterationMethod <-- TrilaterationAlgorithm MinMax --|> TrilaterationMethod abstract CartographyAlgorithm --|> PositioningAlgorithm NSS --|> CartographyAlgorithm FRBHMBasic --|> FBCM FRBHMBasic --|> NSS } PositioningAlgorithm <.. Positioning '''''''''''''''''' ' Output classes ' '''''''''''''''''' package "Output classes" { class Output abstract OutputMedium --* Output OutputCSV --|> OutputMedium OutputTerminal --|> OutputMedium abstract OutputNetworkSocket --|> OutputMedium OutputUDPSocket --|> OutputNetworkSocket OutputTCPSocketEvAAL --|> OutputNetworkSocket } Output --* Positioning TextFileWriter <-- OutputCSV '''''''''''''''' ' Data classes ' '''''''''''''''' package "Data classes" { class Stock << static >> ' Points class Point3D Waypoint --|> Point3D ReferencePoint --|> Point3D ReferencePoint --o Stock ' Deployment area Building --o Stock Area --o Building Waypoint --o Stock Waypoint -- Area Waypoint -- Building ' Devices WifiDevice <|-- Mobile Mobile --o Stock WifiDevice <|-- CapturePoint CapturePoint --o Stock ' Requests & results Request <-- InputMedium Mobile <-- Request Timestamp --* Request Measurement --* Request Measurement -- CapturePoint Result -- Request Result *-- Point3D ResultList *-- Result CalibrationRequest --|> Request ReferencePoint -- CalibrationRequest Direction --* CalibrationRequest } owlps_positionerd o-- Stock ReferencePoint <-- Positioning ResultList <-- Output @enduml ' vim: tw=0