Für den Fall, dass es unbedingt `subfig` sein muss, ist hier noch eine Alternative. Dabei wird Teilabbildung mit der größeren Höhe, in dem Fall also das Listing, in einer Box gespeichert. Die niedrigere Teilabbildung wird dann in einer vertikal zentrierten `varwidth` oder `minipage` Umgebung mit gleicher Gesamthöhe (= Höhe + Tiefe der abgespeicherten Box) gesetzt.
\documentclass{scrartcl}
\usepackage{listings}
\usepackage{tikz}
\usepackage{subfig}
\usepackage{varwidth}
\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}
% RoleModel
\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}}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{shapes}
\usetikzlibrary{graphs}
\usetikzlibrary{quotes}
\newsavebox\mybox
\begin{document}
\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]}}
}
\begin{figure}
% Speichern des Listings in einer Box
\savebox\mybox[0.45\textwidth]{%
\lstinputlisting[style=Roles]{repres.role}%
}
\centering
\subfloat[Graphical representation.]{
\label{subfig:RolesGraph}
% Einfügen des Bildes in einer varwidth oder minipage Umgebung mit gleicher Höhe
% wie das Listing
\begin{varwidth}[c][\dimexpr\ht\mybox+\dp\mybox\relax][c]{0.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}
\end{varwidth}
}
\qquad
\subfloat[Textual representation.]{
\label{subfig:RolesText}
\usebox\mybox
\usebox\mybox% Ausgabe der Box mit dem Listing
}
\caption{Different representations.}
\label{fig:representations}
\end{figure}
\end{document}
![alt text][1]
[1]: http://texwelt.de/wissen/upfiles/subfig_2.png