% \documentclass[11pt,a4paper,twoside]{article}
%   \usepackage[T1]{fontenc}
%   \usepackage[applemac]{inputenc}
%   % \usepackage[latin1]{inputenc}
%   \usepackage{pst-uml}
% \begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Placement des objets} 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\drawCommand}{%
  \umlClass{Command}{%
     -dateReceived \\
     -isPrepaid \\
     -number : String \\
     -price : Money \\ 
     \hline 
     +dispatch() \\%
     +close()%
  }
}

\newcommand{\drawCustomer}{%
  \umlClass[{Customer}{%
     name\\
     address\\ 
     \hline
     creditRating() : String
  }
}

\newcommand{\drawCorpCust}{%
  \umlClass{Corporate \\ Customer}{%
     contactName\\
     creditRating\\
     creditLimit\\ 
     \hline
     +remind() \\
     billForMonth(Integer)
  }
}

\newcommand{\drawPersCust}{%
  \umlClass{Personal \\ Customer}{%
     creditCard#\\ 
     \hline
  }
}

\newcommand{\drawOrderLine}{%
  \umlClass{Order Line}{%
     quantuty : Integer \\
     price : Money \\
     isSatisfied : Boolean \\ 
     \hline 
}}
% les deux clases "Employee" et "Product" étant simple : elle sera
% définies à l'utilisation.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Placement des objets
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{pspicture}(0,0)(18,15)\psgrid
  \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{Acteur(é) 1}}}
\end{pspicture}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Dessin des liens et labels
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% La grande boucle en deux étapes :
\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}% debut
\ncputicon[npos=1.9999,nrot=:U]{umlV}
\ncputicon[npos=2,nrot=:U]{umlV}
\ncputicon[npos=5,nrot=:U]{umlV}% fin ERREUR si nrot=4 ok pour 5!!!!
%
\ncSE{Class1}{Class2}
\naput[npos=1.5]{\{ncSE npos=1.5\}}
\ncSE[offset=-1]{Class1}{Class2}
\ncputicon{umlAgreg} % debut
\ncputicon[npos=2,nrot=:U]{umlCompos}% fin
\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}%       héritage au debut
\ncputicon[npos=3,nrot=:U]{umlV}% V en fin
%
\ncSHN[arm=.7]{Class3}{Class4}
\naput{ncSHN (3 vers 4)}
\ncputicon[npos=1.8,nrot=:U]{umlV}% fleche au milieu vers destination !
%
% \ncE[npos=0.4]{Class5}{Class4}\naput{ncE,npos=0.4}
\ncE{Class5}{Class4}\naput[npos=0.4]{ncE,npos=0.4}
\ncputicon{umlCompos}
%
% Essai de définition d'un style personnalisé
\newpsstyle{umlDependance}{%
     linestyle=dashed,
     arrows=->,
     arrowscale=3,
     arrowinset=0.6
}
\ncline[style=umlDependance,offset=-0.5]{Class3}{Class4}
\naput{ncline}
\ncputicon{umlV}% fleche au debut
\nbput[npos=0.15]{1..*}
%
% % % On peut coller n'importe quoi par rapport à un node :
% % % Essai pour mettre un template sur une classe : prévoir 
% % % une option du style [umlTemplate=myString]
% % \nput*[labelsep=-0.8,offset=1.4]%
% %    {0}{Class2}{\psframebox%
% %    [fillstyle=solid,fillcolor=white,linestyle=dashed]%
% %    {\LARGE\textbf{\ T\ }}}
% % % 
% Lien de Class2 et Class4 vers l'acteur :
\ncline[linestyle=dashed]{Class2}{Actor1}
\naput{ncline}
\ncputicon{umlAgreg}
\ncputicon[npos=0.7,nrot=:U]{umlAgreg}
\ncputicon[npos=1,nrot=:U]{umlCompos} % en fin
%  
\nccurve[linestyle=dashed, angleA=75,offsetA=-1,angleB=-45]{Class4}{Actor1}
\ncputicon{umlHerit} % debut
\ncputicon[npos=0.7,nrot=:U]{umlHerit}
\ncputicon[npos=1,nrot=:U]{umlHerit}% en fin

% \end{document}
