On Fri, Jan 9, 2009 at 2:03 AM, John Whish <[email protected]> wrote: > @Alan, I've just finished reading the excellent "Coffee Maker" article you > recommended. Good food (or drink!) for thought, however he does say "I did > not just sit down one day and develop this design in a nice straightfoward > manner.... this design has been refined over time." Which does rather bring > us back full circle. How do we decide on our classes in the first place?
Experience. As he says, most OO novices use the obvious - and often correct - approach of picking nouns for objects and verbs for behaviors but over time you develop a sense of when underlying abstractions make more sense than basic nouns - or you develop a sense for "seeing" the right classes in a problem. Sometimes you start out on one approach and hit problems and realize you need to take a different tack. I've sometimes had to make three passes at a design before it "felt" right. > Sorry, if I sound like I'm whining, I guess I'm just frustrated by my lack > of knowledge :) This stuff just takes time and practice. There's no One True Way(tm) to design OO systems. I've been doing this stuff (OO) for 17 years now (and procedural programming for a dozen or so years before that) and I'm still refining my design process. I will say that my design for the coffee maker (which I did in my head once I'd read as far as where he says to try it as an exercise before reading the solution) came fairly close to his. I came up with four collaborating objects (UI, container, boiler, coffee dispenser) but didn't bother to separate that design from the concrete implementation (although it would have been an easy refactoring). In my design, the coffee dispenser would manage ground coffee / beans. He essentially made that part of the container which was a reasonable choice given the requirements. I doubt I would have come up with that design five years ago - I would have gone for something more complicated and more low-level... -- Sean A Corfield -- (904) 302-SEAN An Architect's View -- http://corfield.org/ "If you're not annoying somebody, you're not really alive." -- Margaret Atwood --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CFCDev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cfcdev?hl=en -~----------~----~----~----~------~----~------~--~---
