ProxyPort cases - ADVANCED TOPIC

Gallery
Tutorial
You might want some coffee or beer for this one.
Everything you wanted to know about ProxyPorts but were too afraid to ask! We work through most possible cases of "delegation" connections from ProxyPort on the boundary of a Block to itself or to its interior parts (or their ports).
Click on the image to view it full size
DISCLAIMER: It is not of course Webel Best Practice to use the word 'port' in the names of blocks that type ports, it's just done here so we can trace it a bit easier:
Case: pBehavioral:ProxyPortType1: The owning block handles any interactions because the port has 'isBehavior' set. No BindingConnector is required.
Case: pDelegatesToPart:ProxyPortType2 has a BindingConnector to a part :Delegate, where block Delegate specialises the InterfaceBlock ProxyPortType2. These are compatible "by design". No features are shown; In practice, Delegate would have parts and behaviors to help implement ProxyPortType2.
Case: pDelegatesToPortOfPart:ProxyPortType3 has a BindingConnector to a port p:DelegatePortType of part :DelegateWithPort, where block DelegatePortType specialises the InterfaceBlock ProxyPortType3. These are compatible "by type design"; the details of DelegatePortType are completely irrelevant, as long as the contract matches such that the proxy port and the delegate port can be considered to have the same "value".
It does NOT matter whether the Port on the delegate is a "standard" Port, a ProxyPort, or a FullPort, neither the ProxyPort nor the client to the ProxyPort know or care, and it can even be changed any time during the design, as long as the "exported" contract is still met!

Case: The type of pRequiresProvides1:ProxyPortType4 provides (has an InterfaceRealization to) Interface IProvide and requires (has a Usage to) Interface IRequire. The proxy port has a BindingConnector to a part :DelegateRP, where block DelegateRP provides and requires the same Interfaces.
Case: The type of pRequiresProvides2:ProxyPortType4 provides (has an InterfaceRealization to) Interface IProvide and requires (has a Usage to) Interface IRequire. The proxy port has a BindingConnector to a port p:PortTypeRP of part :DelegateWithPortRP, where block PortTypeRP provides and requires the same Interfaces and is specialised by the InterfaceBlock ProxyPortType4. It's done that way round deliberately here as a kind of counter-example:
If you try to manage compatibility (say to reuse an existing block library) by extending a Block by an InterfaceBlock for a ProxyPort yourmust be very careful not to inherit behaviors or internal parts into the InterfaceBlock, because they are not allowed!

In any case, the ports are compatible "by type design" and the validation engine approves.


Case: pFlow1:ProxyPortWithFlow has a BindingConnector to a part :SpecialFlowDelegate, where block SpecialFlowDelegate specialises the InterfaceBlock ProxyPortWithFlow, which has a FlowProperty i:Water. These are compatible "by type design".
Case: pFlow2:ProxyPortWithFlow has a BindingConnector to a part sfd1:StandaloneFlowDelegate, where the block StandaloneFlowDelegate has exactly the same FlowProperty i:Water as InterfaceBlock ProxyPortWithFlow but does not have an explicit type relationship to it. Whether one thinks it should validate depends somewhat on one's interpretation of equal "value" binding as intended by the SysML spec, but it is asserted here that it should work.
Case: pFlow3:ProxyPortWithFlow has a BindingConnector from its FlowProperty i:Water to a matching FlowProperty i:Water of a part sfd2:StandaloneFlowDelegate.

The validation engine likes it; but it's a tedious strategy if you have lots of properties to bind, and it does not address Operation or Reception compatibility anyway.


Case: pFlow4:ProxyPortWithFlow has a BindingConnector to a port i:PortWithFlow of a part :FlowDelegateWithPort, where block PortWithFlow specialises the InterfaceBlock ProxyPortWithFlow, which has a FlowProperty i:Water. These are compatible "by type design". Case: pFlow3:ProxyPortWithFlow has a BindingConnector to a port i:PortWithFlow of a part :FlowDelegateWithPort, where block PortWithFlow specialises the InterfaceBlock ProxyPortWithFlow, which has a FlowProperty i:Water. These are compatible "by type design".
And finally, we show (only) a nested proxy port pStructured:ProxyPortTypeStructured which itself has a proxy port pNested:ProxyPortNested, noting that nested ports of proxy ports must also be proxy ports.

The connection cases for the nested port are too complex to handle here now, so the nested port is simply shown


Are you dizzy yet ? Head hurting? Don't fear, just follow the Webel Best Practice tips and modelling examples here and soon you'll develop a pattern for modelling with ports and "get in the flow" so-to-speak.
Ultimately, the many cases we've just inspected correspond to situations that do occur in a wide range of real-world engineering situations, and reveal the power and flexibility of Systems Modeling Language (SysML®) that simulation tools are already beginning to build upon.
Up next
Notes
Snippets (quotes/extracts)
Visit also
Visit also (backlinks)
Related slides (other tutorials)
Related slides (other tutorials, backlinks)