At Thu, 31 Mar 2011 18:53:29 -0300, Martin Dias wrote:
What you sent makes me think...
I am not convinced of this other solution, but with announcements could be:
algorithm self doA. self announce: (WorkAnnoucement finished: #doA). self doB. self announce: (WorkAnnoucement finished: #doB). self doC. self announce: (WorkAnnoucement finished: #doC).
and the specific observer subscribed to this algorithm knows what percentage corresponds to each selector. And you could easily plug an observer that logs to Transcript.
Well, say self has an inst var called progress, which may be nil or something that understands #value:.
algorithm self doA. progress ifNotNil: [progress value: #doA]. self doB. progress ifNotNil: [progress value: #doB]. self doC. progress ifNotNil: [progress value: #doC].
All you have to do is to assign a block that looks like:
[:v | Transcript print: v; cr].
to progress to get Transcript. Or, you can assign the bar block from displayProgress: and get UI update. Or, the block can have some #announce: if you want to get multiple parties to get notified.
#value: is generic. A block understands it but also you can just create a class with #value: and let it do anything you want. Again, if the original goal it to "decouple" the algorithm from progress notification, complicating the entire thing with announcement is backward.
-- Yoshiki