\input{header} \begin{tikzpicture} \begin{component}{20cm}{1}{0}{CachedGreeterComponent with replacement} \begin{component}{4cm}{7.5}{0}{GreeterComponent} \end{component} \begin{component}{4cm}{7.5}{2.5}{FakeKeyValueStorageComponent} \end{component} \newcomponent{0}{1.3}{CachedGreeterImpl} \umlassemblyconnector[interface=Greeter]{GreeterComponent}{CachedGreeterImpl} \umlassemblyconnector[interface=KeyValueStorage]{FakeKeyValueStorageComponent}{CachedGreeterImpl} \umlprovidedinterface[interface={Annotated}, distance=4.3, with port, padding=2.1cm]{CachedGreeterImpl} \end{component} \umlprovidedinterface[interface={Annotated}, distance=11.2, with port, padding=0.2cm]{CachedGreeterComponent with replacement} \umldep{CachedGreeterImpl-west-interface}{CachedGreeterComponent with replacement-west-port} \end{tikzpicture} \input{footer}