( (Guest [celebrate()] [:extends:PartyParticipant] [:implements:Eater] ) (Cocktail [contains:Ingredient#1..*] ) (Party [+termin:Date] [breakOff()] [entertain:PartyParticipant] ) (Eater<> [eat(in h:Bit;return full:Boolean)] [eat:Bit#0..*] ) (Bit) (PartyParticipant<> [/drunken:Boolean=false] {[~intus:Cocktail]} {[#enthusiastic:Enthusiasm]} [#thinkAboutEnthusiasm()] [~drink(in c:Cocktail)] [visit|:Party] ) (Barkeeper [+mix(in z:ingredient, out c:Cocktail)] [mixedFor:Host#1..1] [mix:Cocktail#1..*] ) (Host [hectically:Boolean=true] [toWelcome(in g:Guest)] [toSayGoodBye(in g:Guest)] [welcomes>:Guest#1..*] [move:Barkeeper#1] [:extends:PartyParticipant] [:implements:Eater] ) (Ingredient [+name:String] [cocktail&:Cocktail] [bit&:Bit] ) {(Enthusiasm<> [ecstatic] [neutral] [bored] [tiredOf] )} )