Re: A filtered iteration over a collection: current idiom?
Lew wrote:
Instead of 'doSomethingWith( Foo foo )' implement 'Foo.doSomething()'.
Then you get type-based execution as a proper concomitant to
polymorphism. That/s the whole freaking *POINT* of object-orientation,
for Pete's sake!
for( Widget widget : somehowGetWidgets() ) {
widget.doSomething();
}
jebblue wrote:
What if the something in the OP's doSomethingWith method has greater
knowledge and context within the larger system, which widgets are not
privy to?
doSomethingWithWidget(Widget foo) is not necessarily == widget.doSomething()
Good question. If the 'doSomething()' method relies on the specific subtype
of its 'Widget' argument to do the right thing, then it is in turn not taking
advantage of polymorphism or method overloading correctly.
Proper type analysis would yield a 'doSomething( Widget foo )' method that
needs to know only what the argument type reveals. i.e., 'Widget' attributes
and behavior, and leaves subtype details to the subtypes. If it needs to know
more than that the argument is 'Widget', then the argument is mis-declared.
The outer method should never have to reach in to the innards of the
implementation of its arguments like that, per the Law of Demeter.
--
Lew