Once upon a time, in a kingdom not far from here, a king summoned twoof his advisors for a test. He showed them both a shiny metal boxwith two slots in the top, a control knob, and a lever. "What doyou think this is?"
One advisor, an Electrical Engineer, answered first. "It is atoaster," he said. The king asked, "How would you design an embeddedcomputer for it?" The advisor: "Using a four-bit microcontroller, Iwould write a simple program that reads the darkness knob andquantifies its position to one of 16 shades of darkness, from snowwhite to coal black. The program would use that darkness level asthe index to a 16-element table of initial timer values. Then it wouldturn on the heating elements and start the timer with the initialvalue selected from the table. At the end of the time delay, itwould turn off the heat and pop up the toast. Come back next week, andI'll show you a working prototype."
The second advisor, a software developer, immediately recognized thedanger of such short-sighted thinking. He said, "Toasters don'tjust turn bread into toast, they are also used to warm frozen waffles.What you see before you is really a breakfast food cooker. As thesubjects of your kingdom become more sophisticated, they will demandmore capabilities. They will need a breakfast food cooker that canalso cook sausage, fry bacon, and make scrambled eggs. A toasterthat only makes toast will soon be obsolete. If we don't look to thefuture, we will have to completely redesign the toaster in just afew years."
"With this in mind, we can formulate a more intelligent solution tothe problem. First, create a class of breakfast foods. Specialize this class into subclasses: grains, pork, and poultry. The specialization process should be repeated with grains divided into toast, muffins, pancakes, and waffles; pork divided into sausage, links, and bacon; and poultry divided into scrambled eggs, hard- boiled eggs, poached eggs, fried eggs, and various omelette classes."
"The ham and cheese omelette class is worth special attention because it must inherit characteristics from the pork, dairy, and poultryclasses. Thus, we see that the problem cannot be properly solvedwithout multiple inheritance. At run time, the program must createthe proper object and send a message to the object that says, 'Cookyourself.' The semantics of this message depend, of course, on thekind of object, so they have a different meaning to a piece of toastthan to scrambled eggs."
"Reviewing the process so far, we see that the analysis phase hasrevealed that the primary requirement is to cook any kind ofbreakfast food. In the design phase, we have discovered some derivedrequirements. Specifically, we need an object-oriented languagewith multiple inheritance. Of course, users don't want the eggs to getcold while the bacon is frying, so concurrent processing isrequired, too."
"We must not forget the user interface. The lever that lowers thefood lacks versatility, and the darkness knob is confusing. Userswon't buy the product unless it has a user-friendly, graphicalinterface. When the breakfast cooker is plugged in, users shouldsee a cowboy boot on the screen. Users click on it, and the message'Booting Linux' appears on the screen. Users can pull down amenu and click on the foods they want to cook."
"Having made the wise decision of specifying the software first inthe design phase, all that remains is to pick an adequate hardwareplatform for the implementation phase. An Intel Titanium with 8GBof memory, a 100GB hard disk, and a flat panel monitor should be sufficient.If you select a multitasking, object oriented language that supportsmultiple inheritance and has a built-in GUI, writing the programwill be a snap."
The king wisely had the software developer beheaded, and they alllived happily ever after.