@startuml ' UML class Diagram : can be displayed with PlantUML (plugin for Eclipse or for PyCharm) ' PlantUML: ' - How to install : https://projects.irap.omp.eu/projects/pyros/wiki/Project_Development#PlantUML ' - Eclipse plugin : http://plantuml.com/eclipse ' - class diagrams : http://plantuml.com/class-diagram ' - sequence diagrams : http://plantuml.com/sequence-diagram ' - state diagrams : http://plantuml.com/state-diagram ' - Use Case diagrams : http://plantuml.com/use-case-diagram ' - OLD Activity diagrams : http://plantuml.com/activity-diagram-legacy ' - NEW Activity diagrams : http://plantuml.com/activity-diagram-beta ' - Pre-processing (include...) : http://plantuml.com/preprocessing ' - GANTT diagrams : http://plantuml.com/gantt-diagram ' - REAL WORLD EXAMPLES !!! : https://real-world-plantuml.com/ ' - For Python: ' - https://github.com/SamuelMarks/python-plantuml ' - https://pythonhosted.org/plantuml/ ' UML diagrams theory : https://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html title __**DeviceController and ClientChannel classes diagram (1 - composition)**__ (ClientChannel is a COMPONENT of DeviceController) end title /' Channels '/ ClientChannel <|-- ClientSerial ClientChannel <|-- ClientSocket ClientChannel <|-- ClientUSB abstract class ClientChannel { my_channel # socket or serial or usb... {abstract} connect_to_server() {abstract} read() {abstract} put() put_read() {abstract} send_data() {abstract} receive_data() {abstract} close() } class ClientSocket { my_channel # (socket) -- connect_to_server() send_data() receive_data() close() } /' Abstract Devices Controllers '/ DeviceControllerAbstract o-- ClientChannel DeviceControllerAbstract <|-- TelescopeControllerAbstract DeviceControllerAbstract <|-- PLCControllerAbstract DeviceControllerAbstract <|-- CameraControllerAbstract abstract class DeviceControllerAbstract { my_channel # socket or serial or usb... _cmd = {start, stop, park...} class GenericResult -- {abstract} connect_to_device() {abstract} _format_data_to_send() {abstract} _unformat_received_data() available_commands() execute() execute_generic_cmd() execute_native_cmd() execute_native_cmd() send_data() receive_data() --- **Abstract GET/SET/DO commands :** {abstract} get_timezone(), set_timezone() {abstract} get_date(), set_date() {abstract} get_time(), set_time() {abstract} do_park() {abstract} do_start() {abstract} do_stop() {abstract} do_init() } abstract class TelescopeControllerAbstract { _cmd = {get_ra, get_dec, do_goto...} ---- **Abstract GET/SET/DO commands :** {abstract} get_ack() {abstract} get_ra(), set_ra() {abstract} get_dec(), set_dec() get_radec(), set_radec() {abstract} get_lat(), set_lat() {abstract} get_long(), set_long() {abstract} set_speed() {abstract} do_warm_start() {abstract} do_prec_refr() ---- **Generic MACRO commands:** do_init() do_goto() do_move() } abstract class PLCControllerAbstract { _cmd = {get_status, set_light...} } abstract class CameraControllerAbstract { _cmd = {set_pose, do_start_acq...} } /' Concrete Devices Controllers '/ TelescopeControllerAbstract <|-- TelescopeControllerMeade TelescopeControllerAbstract <|-- TelescopeControllerGemini TelescopeControllerAbstract <|-- TelescopeControllerColibri PLCControllerAbstract <|-- PLCControllerAK PLCControllerAbstract <|-- PLCControllerColibri CameraControllerAbstract <|-- CameraControllerVIS_AK CameraControllerAbstract <|-- CameraControllerCAGIRE CameraControllerAbstract <|-- CameraControllerDDRAGO class TelescopeControllerGemini { _cmd = {get_ra, get_dec, do_goto...} format_data_to_send() unformat_received_data() } TelescopeControllerMeade : _cmd = {get_ra, get_dec, do_goto...} @enduml ''' ''' @startuml title __**DeviceController and ClientChannel classes diagram (2 - multi-inheritance)**__ (TelescopeGemini heritates both from DeviceController and ClientChannel) end title /' Abstract Devices Controllers '/ DeviceControllerAbstract <|-- PLCControllerAbstract DeviceControllerAbstract <|-- CameraControllerAbstract DeviceControllerAbstract <|-- TelescopeControllerAbstract /' Concrete Devices Controllers '/ TelescopeControllerAbstract <|-- TelescopeControllerMeade TelescopeControllerAbstract <|-- TelescopeControllerGemini ClientSocket <|-- TelescopeControllerGemini TelescopeControllerAbstract <|-- TelescopeControllerColibri PLCControllerAbstract <|-- PLCControllerAK PLCControllerAbstract <|-- PLCControllerColibri CameraControllerAbstract <|-- CameraControllerVIS_AK CameraControllerAbstract <|-- CameraControllerCAGIRE CameraControllerAbstract <|-- CameraControllerDDRAGO /' Channels '/ ClientChannel <|-- ClientSocket ClientChannel <|-- ClientSerial ClientChannel <|-- ClientUSB @enduml