@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