%% 
%%  The LaTeX Graphics Companion, 2ed (first printing May 2007)
%% 
%%  Example 6-7-36 on page 443.
%% 
%%  Copyright (C) 2007 Michel Goossens, Frank Mittelbach, Denis Roegel, Sebastian Rahtz, Herbert Vo\ss 
%% 
%%  It may be distributed and/or modified under the conditions
%%  of the LaTeX Project Public License, either version 1.3
%%  of this license or (at your option) any later version.
%% 
%%  See http://www.latex-project.org/lppl.txt for details.
%% 

\documentclass{ttctexa}
\pagestyle{empty}
\setcounter{page}{6}
\setlength\textwidth{207.83385pt}
%
\newcommand{\drawClassi}{%
  \umlClass{Class1}{%
     umlClassWidth = 0 \\
     (by default) \\\hline
     attribute2 a very long line \\ \hline
     attribute3 \\ \hline %
     method1%
}}
\newcommand{\drawClassii}{%
  \umlClass[umlClassWidth=4cm,umlParameter={\ T\ }]{Class2}{%
     width = 4cm \\ \hline
     attribute2 \\ \hline %
     method1\\
     method2%
}}
\newcommand{\drawClassiii}{%
  \umlClass[umlClassWidth=2.7]{Class3}{%
     attribute 1 \\
     attribute 1\\ \hline
     method1 \\
     method2%
}}
\newcommand{\drawClassiv}{%
  \umlClass{Class4}{%
     myAttribute 1 \\
     myAttribute 2 \\ \hline
     method1%
}}
\newcommand{\drawClassv}{%
  \umlClass[umlClassWidth=0]{Class5}{}}
\StartShownPreambleCommands
\usepackage{graphicx,pstricks,pst-uml}
\StopShownPreambleCommands
\begin{document}
\resizebox{12cm}{!}{%
\begin{pspicture}(18,15)
  \rput(3,13){\rnode{Class1}{\drawClassi}} \pnode(17.5,13){pnode1}
  \rput(9,10){\rnode{Class2}{\drawClassii}}
  \rput(2,5){\rnode{Class3}{\drawClassiii}}
  \rput(12,5){\rnode{Class4}{\drawClassiv}}\rput(5.5,5.5){\rnode{Class5}{\drawClassv}}
  \rput(16,11){\rnode{Actor1}{\umlActor{Actor(s) 1}}}
\end{pspicture}
\ncline{Class1}{pnode1} \ncputicon[npos=0.7,nrot=:U]{umlV}
\naput{ncline}\naput[npos=1,ref=r]{Node "P1"}
\ncSXE[armA=11.5]{pnode1}{Class3} \nbput{SXE (armA=11.5)}
\ncputicon{umlV}\ncputicon[npos=1.9999,nrot=:U]{umlV}
\ncputicon[npos=2,nrot=:U]{umlV}\ncputicon[npos=5,nrot=:U]{umlV}
\empty
%
\ncSE{Class1}{Class2}\naput[npos=1.5]{\{ncSE npos=1.5\}}
\ncSE[offset=-1]{Class1}{Class2}\ncputicon{umlAgreg}
\ncputicon[npos=2,nrot=:U]{umlCompos}
\nbput[npos=0.3]{0..*}\naput[npos=1.8]{0..2}\naput[npos=1.4]{ncSE,offset=-1}
%
\ncSHS[armA=1.5]{Class2}{Class4}\naput{ncSHS}\ncSHS[armA=1.5]{Class2}{Class3}\nbput{ncSHS}
\ncputicon{umlHerit}\ncputicon[npos=3,nrot=:U]{umlV}
%
\ncSHN[arm=.7]{Class3}{Class4}\naput{ncSHN (3 vers 4)}
\ncputicon[npos=1.8,nrot=:U]{umlV}
%
\ncE{Class5}{Class4}\naput[npos=0.4]{ncE,npos=0.4}\ncputicon{umlCompos}
%
\newpsstyle{umlDependance}{linestyle=dashed,arrows=->,arrowscale=3,arrowinset=0.6}
\ncline[style=umlDependance,offset=-0.5]{Class3}{Class4}
\naput{ncline}\ncputicon{umlV}\nbput[npos=0.15]{1..*}
\ncline[linestyle=dashed]{Class2}{Actor1}
\naput{ncline}\ncputicon{umlAgreg}
\ncputicon[npos=0.7,nrot=:U]{umlAgreg}\ncputicon[npos=1,nrot=:U]{umlCompos}
%
\nccurve[linestyle=dashed, angleA=75,offsetA=-1,angleB=-45]{Class4}{Actor1}
\ncputicon{umlHerit}\ncputicon[npos=0.7,nrot=:U]{umlHerit}
\ncputicon[npos=1,nrot=:U]{umlHerit}}% end of \resizebox
\end{document}
