/' 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 '/ @startuml 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