%%
%%  A DANTE-Edition example
%%
%%  Example 32-02-8 on page 656.
%%
%%  Copyright (C) 2010 Herbert Voss
%%
%%  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.
%%
%%
%% ====
% Show page(s) 1
%%
\documentclass[]{article}
\pagestyle{empty}
\setlength\textwidth{153.70511pt}
\setlength\parindent{0pt}

\usepackage{uml}

\begin{document}
\umlSchema[box=]{Stack}{ %attributes
\umlAttribute[visibility=-,type=\emph{type},
           default=null,]{firstNode}
}{\umlMethod[visibility]{push}{\emph{type} x}% Methods
  \umlMethod[visibility,type=\emph{type}]{pop}{}
}{\umlArgument[type=Metaclass]{type}% Arguments
}{\umlCompartmentline{S:Stack = S.push(x).pop()}% Constraints
}{\umlDiagram[innerBorder=2mm,sizeX=11em,% Structure
   sizeY=5em,ref=StackDiagram,outerBorder=2mm]{%
    \umlClass[pos={.5,.5}, ref=stackNode]{Node}{
     \umlAttribute[visibility=\#,type=\emph{type}]{data}}{}
    \umlRelation[angleA=20,angleB=-20,armA=1em,
                 armB=1em]{stackNode}{stackNode}{%
     \umlLabelA[height=-1ex,fraction=1.5]{stackNode}{1}
     \umlLabelB[height=-5ex,fraction=1.5]{stackNode}{1}}
   }% End of diagram
 }% End of Structure/Stack
\end{document}