I have found the following notation conventions to be a good compromise between readability and Java-friendliness for port-based systems engineering in MagicDraw UML. (Note also that the MD SysML plugin with SysML FlowPort and ItemFlow support makes representation of signal processing systems easier.)
Consider a system with Audio. I recommend:
- Use additional stereotypes to aid your port-based engineering.
- Use Audio for the Interface (if needed, in some cases an Interface is overkill).
- Do NOT use the IAudio "Eclipse" style, it is too easily confused with "input".
- <<port>>: Use Audio_ (with a trailing underscore) for the "default implementor <<port>> Class" that provides the Interface Audio.
- <<conjugate>>: Use Audio$ (which a trailing doller) for the conjugate that requires the Interface Audio.
- Do NOT use the ~Audio conjugate convention, it is not Java-friendly, and it is too easily confused with the signal convention Audio~ (below)
- <<signal>>: Use Audio~ (with a trailing tilde) to type InformationFlows.
- The '~' looks a bit like wave.
- This is NOT Java Friendly.
The relationship between the Interface name and the implementor/conjugate pair breaks down (as it should) for complex ports.
The example below is from the "signal processing" domain, however the principles scale well to UMl-driven port-based Java software engineering.
Image:

