iterator, NVI, polymorph