% \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}