In his "Up with cohesion, down with coupling" article, Kevlin Henney said that there were three general designs that keep the collection's internal representation hidden from the caller. A reader pointed out that there was "A fourth option, which is in the general case superior to all three of your options, is the internal iterator. It delegates management of the iteration to the collection, rather than adding repetitive boilerplate to your functional code." This article discusses this Enumeration Method pattern...