Nur eine schnelle Idee und vielleicht nicht die beste, aber Du könntest das alles einfach in eine `tabular` mit `m`-Spalten setzen.
![alt text][1]
\begin{figure}
\centering
\begin{tabular}{*{2}{m{.45\linewidth}}}
<Bild> &
<Code> \\
<Beschriftung Bild> &
<Beschriftung Code>
\end{tabular}
\caption{Different representations.}
\label{fig:representations}
\end{figure}
Ich hab statt `subfig` das Paket `subcaption` verwendet, da es ermöglicht, Captions getrennt vom Bild einzusetzen. So sind denn auch die Captions einfach in der nächsten Tabellenzeile.
Hier der komplette Code:
\documentclass{scrartcl}
\usepackage{listings}
\lstset{
numbers=none,
frame=none,
backgroundcolor=,
basicstyle=\ttfamily\footnotesize,
captionpos=b,
escapeinside={@}{@},
aboveskip=7pt,
abovecaptionskip=3pt,
belowskip=3pt,
boxpos=c,
showspaces=false,
showtabs=false,
tabsize=4,
breaklines=true,
columns=flexible,
mathescape
}
\lstdefinelanguage{Roles}{
keywords={RoleModel, ROLE},
keywords=[2]{input, super, transitive, reflexive, optional},
morestring=[s]{[}{]}
}
\lstdefinestyle{Roles}{
language=Roles,
keywordstyle=\color{role}\bfseries,
keywordstyle=[2]\color{roleKeyword}
}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows.meta,shapes,graphs,quotes}
\definecolor{role}{cmyk}{1.0, 0.417, 0.0, 0.247}
\definecolor{roleKeyword}{cmyk}{0.3, 0.7, 0.0, 0.373}
\tikzset{
role/.style = {
rounded rectangle,
minimum size=6mm,
very thick,
draw=role,
top color=white,
bottom color=role!20,
font=\sffamily\scriptsize,
align=center,
text=black
},
skip loop/.style = {to path={-- ++(0,#1) -| (\tikztotarget)}},
hv/.style = {to path={-| (\tikztotarget) \tikztonodes}},
vh/.style = {to path={|- (\tikztotarget) \tikztonodes}},
comp/.style = {Diamond-},
ass/.style = {-{Straight Barb[angle'=45,round]}},
imp/.style = {-{Triangle[open,length=7pt]}},
proh/.style = {{Bar[sep=1pt]}-{Bar[sep=1pt]}}
}
\usepackage{subcaption,array}
\begin{document}
\begin{figure}
\centering
\begin{tabular}{*{2}{m{.45\linewidth}}}
\begin{tikzpicture}[
node distance=9mm and 0mm,
thick,black!50,
every edge/.style={
rounded corners,
draw=black!50,
text=black,
font=\sffamily\scriptsize,
near end
}]
\node[role] (ContainerContainer) {ContainerContainer};
\node[role] (OriginalContainer) [below left=of ContainerContainer] {OriginalContainer};
\node[role] (NewContainer) [below right=of ContainerContainer] {NewContainer};
\node[role] (Extractee) [below right=of OriginalContainer,xshift=15pt] {Extractee};
\path
(ContainerContainer) edge[comp,hv,"target"] (NewContainer)
(ContainerContainer) edge[comp,hv,"source"] (OriginalContainer)
(NewContainer) edge[comp,vh,"moved"] (Extractee)
(OriginalContainer) edge[ass] node[above,xshift=-5pt] {reference} (NewContainer)
(OriginalContainer) edge[comp,vh] node[below] {extracts}(Extractee);
\end{tikzpicture}
&
\lstinputlisting[style=Roles]{repres.role}
\\
\subcaption{Graphical representation.\label{subfig:RolesGraph}} &
\subcaption{Textual representation.\label{subfig:RolesText}}
\end{tabular}
\caption{Different representations.}
\label{fig:representations}
\end{figure}
\end{document}
----------
**Edit:** da das `subcaption` Paket zum `caption` Bündel gehört kann man auch dessen fähigkeiten zur Layout-Beeinflussung verwenden. Wenn man beispielsweise für die konkrete Abbildung die Beschriftungen näher an die Abbildung heranschieben will, dann könnte man das durch Setzen der Option `skip` erreichen:
\begin{figure}
\centering
\captionsetup{skip=-15pt}
\captionsetup[subfigure]{skip=-20pt}
...
![alt text][2]
Ob das auch als dokumentweite Option günstig ist, lässt sich schwer beurteilen (obwohl ich das eher bezweifle). Hier bleibt es durch die `figure`-Umgebung lokal auf diese Abbildung begrenzt. Man könnte natürlich global einfach auch einen anderen Wert setzen und dennoch konkret bei der Abbildung wieder anpassen.
[1]: http://texwelt.de/wissen/upfiles/tabular.pnghttp://texwelt.de/wissen/upfiles/tabular.png
[2]: http://texwelt.de/wissen/upfiles/subcaption.png