%% 
%%  Ein Beispiel der DANTE-Edition
%%  
%%  7. Auflage
%% 
%%  Beispiel 31-02-8 auf Seite 695.
%% 
%%  Copyright (C) 2016 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[]{exaarticle}
\pagestyle{empty}
\setlength\textwidth{352.81416pt}
\setlength\parindent{0pt}
%StartShownPreambleCommands
\usepackage{uml}
%StopShownPreambleCommands
\begin{document}
\umlSchema[box=]{Stack}{ %Attributes
  \umlAttribute[visibility=-,type=\emph{type},default=null,]{firstNode}
  }{% Methods
    \umlMethod[visibility]{push}{\emph{type} x}
    \umlMethod[visibility,type=\emph{type}]{pop}{}
  }{% Arguments
    \umlArgument[type=Metaclass]{type}
  }{% Constraints
    \umlCompartmentline{S:Stack = S.push(x).pop()}
  }{% Structure
    \umlDiagram[innerBorder=2mm,sizeX=11em,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}
