.. UML:: zzStructure class zzSpace assoc zzSpace compos multi(1) - multi(*) zzCell assoc zzSpace compos multi(1) - multi(*) zzDimension class zzCell fields identity assoc zzCell aggreg multi(*) - multi(1) xuEnfilade class zzDimension naryassoc nary left = assoc nary - multi(0..1) role(negend) zzCell right = assoc nary - multi(0..1) role(posend) zzCell assoc nary - multi(*) zzDimension class xuEnfilade --- zzSpace.c = (0,0); horizontally(80, foo, nary, zzCell, xuEnfilade); horizontally(80, bar, zzDimension, zzSpace); vertically(80, foobar, nary, zzDimension); left.p = (nary.w{left}...zzCell.n{down}); right.p = (nary.e{right}...zzCell.w{right});