contract model-view<V> { 
\c{\fbox{MV(C)}}
subject : model supports [ state : V; value( val : V ) \$|->\$ [state = val]; notify(); notify() \$|->\$ \$\forall v \e \$views \bl v.update(); attach( v : view ) \$|->\$ v \$\e\$ views; detach( v : view ) \$|->\$ v \$\not\e\$ views; ] views : set<view> where view supports [ update() \$|->\$ [view reflects state]; subject( m : model ) \$|->\$ subject = m; ] invariant: \$\forall\$ v \$\e\$ views \bl [v reflects subject.state] instantiation: \$\forall\$ v \$\e\$ views \bl subject.attach(v) & v.subject(subject); subject.notify(); }

slide: The Model-View contract