Device_controller_abstract_activity_diag.pu 4.89 KB

@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)**__
<i>(ClientChannel is a COMPONENT of DeviceController)</i>
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)**__
<i>(TelescopeGemini heritates both from DeviceController and ClientChannel)</i>

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