RE: The Parable of the OOP and Breakfast
Way too much time on your hands ;-) -Original Message- From: Mike Kear [mailto:[EMAIL PROTECTED] Sent: 27 July 2005 14:16 To: CF-Talk Subject: The Parable of the OOP and Breakfast Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. What do you think this is? One advisor, an engineer, answered first. It is a toaster, he said. The king asked, How would you design an embedded computer for it? The engineer replied, Using a four-bit microcontroller, I would write a simple program that reads the darkness knob and quantizes its position to one of 16 shades of darkness, from snow white to coal black. The program would use that darkness level as the index to a 16-element table of initial timer values. Then it would turn on the heating elements and start the timer with the initial value selected from the table. At the end of the time delay, it would turn off the heat and pop up the toast. Come back next week, and I'll show you a working prototype. The second advisor, a ColdFusion developer, highly skilled in Mach-II, Model-Glue and java, immediately recognized the danger of such short-sighted thinking. He said, Toasters don't just turn bread into toast, they are also used to warm frozen waffles. What you see before you is really a breakfast food cooker. As the subjects of your kingdom become more sophisticated, they will demand more capabilities. They will need a breakfast food cooker that can also cook sausage, fry bacon, and make scrambled eggs. A toaster that only makes toast will soon be obsolete. If we don't look to the future, we will have to completely redesign the toaster in just a few years. With this in mind, we can formulate a more intelligent solution to the 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 omelet classes. The ham and cheese omelet class is worth special attention because it must inherit characteristics from the pork, dairy, and poultry classes. Thus, we see that the problem cannot be properly solved without multiple inheritance. At run time, the program must create the proper object and send a message to the object that says, `Cook yourself.' The semantics of this message depend, of course, on the kind of object, so they have a different meaning to a piece of toast than to scrambled eggs. Reviewing the process so far, we see that the analysis phase has revealed that the primary requirement is to cook any kind of breakfast food. In the design phase, we have discovered some derived requirements. Specifically, we need an object-oriented language with multiple inheritance. Of course, users don't want the eggs to get cold while the bacon is frying, so concurrent processing is required, too. We must not forget the user interface. The lever that lowers the food lacks versatility, and the darkness knob is confusing. Users won't buy the product unless it has a user-friendly, graphical interface. When the breakfast cooker is plugged in, users should see a cowboy boot on the screen. Users click on it, and the message `Booting Application Breakfast v1.2' appears on the screen. (Breakfast v1.2 should be out by the time the product gets to the market.) Users can pull down a menu and click on the foods they want to cook. Having made the wise decision of specifying the software first in the design phase, all that remains is to pick an adequate hardware platform for the implementation phase. An Intel Pentium 1.86GHz with 1.2GB of memory, a 220GB hard disk, and a TFT monitor should be sufficient. Selecting a multitasking, object oriented language that supports multiple inheritance and has a built-in GUI, means writing the program will be a snap. (Imagine the difficulty we would have had if we had foolishly allowed a hardware-first design strategy to lock us into a four-bit microcontroller!). The king had the computer scientist thrown in the moat, and they all lived happily ever after. -- Cheers Mike Kear Windsor, NSW, Australia Certified Advanced ColdFusion Developer AFP Webworks http://afpwebworks.com ColdFusion, PHP, ASP, ASP.NET hosting from AUD$15/month ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212951 Archives:
RE: The Parable of the OOP and Breakfast
From: Mike Kear [mailto:[EMAIL PROTECTED] Subject: The Parable of the OOP and Breakfast Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. What do you think this is? Once upon a time lived a cf-community list that needed more posts. ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212953 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
RE: The Parable of the OOP and Breakfast
The second advisor, a ColdFusion developer, highly skilled in Mach-II, Model-Glue and java, immediately recognized the danger of such short-sighted thinking. ... Specifically, we need an object-oriented language with multiple inheritance. Neither Java nor CF supports multiple inheritance. Dave Watts, CTO, Fig Leaf Software http://www.figleaf.com/ Fig Leaf Software provides the highest caliber vendor-authorized instruction at our training centers in Washington DC, Atlanta, Chicago, Baltimore, Northern Virginia, or on-site at your location. Visit http://training.figleaf.com/ for more information! ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212952 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
RE: The Parable of the OOP and Breakfast
Way too much time on your hands -Original Message- From: Mike Kear [mailto:[EMAIL PROTECTED] Sent: 27 July 2005 14:16 To: CF-Talk Subject: The Parable of the OOP and Breakfast Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. What do you think this is? One advisor, an engineer, This e-mail is from Reed Exhibitions (Oriel House, 26 The Quadrant, Richmond, Surrey, TW9 1DL, United Kingdom), a division of Reed Business, Registered in England, Number 678540. It contains information which is confidential and may also be privileged. It is for the exclusive use of the intended recipient(s). If you are not the intended recipient(s) please note that any form of distribution, copying or use of this communication or the information in it is strictly prohibited and may be unlawful. If you have received this communication in error please return it to the sender or call our switchboard on +44 (0) 20 89107910. The opinions expressed within this communication are not necessarily those expressed by Reed Exhibitions. Visit our website at http://www.reedexpo.com ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212954 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
Re: The Parable of the OOP and Breakfast
ROFL!! In the moat with you! On 7/27/05, Dave Watts [EMAIL PROTECTED] wrote: Neither Java nor CF supports multiple inheritance. ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212967 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
Re: The Parable of the OOP and Breakfast
Well, that was a weird post to read while eating breakfast. I think it's fairly misguided, as it contrasts a good procedural design (the engineer's perspective) with really lousy OO design. The second advisor, a ColdFusion developer, highly skilled in Mach-II, Model-Glue and java, immediately recognized the danger of such short-sighted thinking. He said, Toasters don't just turn bread into toast, they are also used to warm frozen waffles. What you see before you is really a breakfast food cooker. As the subjects of your kingdom become more sophisticated, they will demand more capabilities. They will need a breakfast food cooker that can also cook sausage, fry bacon, and make scrambled eggs. A toaster that only makes toast will soon be obsolete. If we don't look to the future, we will have to completely redesign the toaster in just a few years. I'll go a stretch and call myself skilled in OO - my reply would be It's a toaster. It needs to be able to cook frozen bread products *made for the interface of a toaster*. Asking it to cook eggs, bacon, and etc. is just plain silly. If you want something that makes eggs, go spec a frying pan. This paragraph is a nice example of a naive, unbalanced approach to OO where you think one master object can be extended to do everything from make toast to fly to Mars. With this in mind, we can formulate a more intelligent solution to the 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 omelet classes. No right-minded OO designer would do this. That's an inheritance tree that exists for no real reason. The ham and cheese omelet class is worth special attention because it must inherit characteristics from the pork, dairy, and poultry classes. Thus, we see that the problem cannot be properly solved without multiple inheritance. At run time, the program must create the proper object and send a message to the object that says, `Cook yourself.' The semantics of this message depend, of course, on the kind of object, so they have a different meaning to a piece of toast than to scrambled eggs. Neither CF nor Java nor .NET support multiple interfaces. That's largely because it's a much better idea to program to interfaces instead of implementations - and anytime you inherit, you're carting around your entire implementation tree. Composition could also be used here - an omelette is not an egg, nor is it a pork. It's made up of ingrediants, it isn't extensions of the ingrediants themselves. But I would not, not matter how good the omelette design, try pouring it into a toaster. Reviewing the process so far, we see that the analysis phase has revealed that the primary requirement is to cook any kind of breakfast food. In the design phase, we have discovered some derived requirements. Specifically, we need an object-oriented language with multiple inheritance. Of course, users don't want the eggs to get cold while the bacon is frying, so concurrent processing is required, too. But that's a crock! The requirements are to make toast, and trying to do anything more is silly! If its intention is to show precedural vs. OO, this whole parable is a farce. We must not forget the user interface. The lever that lowers the food lacks versatility, and the darkness knob is confusing. Users won't buy the product unless it has a user-friendly, graphical interface. When the breakfast cooker is plugged in, users should see a cowboy boot on the screen. Users click on it, and the message `Booting Application Breakfast v1.2' appears on the screen. (Breakfast v1.2 should be out by the time the product gets to the market.) Users can pull down a menu and click on the foods they want to cook. An OO designer probably wouldn't give a rats ass about the UI. They'd specifically work to separate the application from the UI, letting it be anything it wants: a simple analog knob, a digital GUI, or an automated telephone system where you can call in to start your toaster. It's about interface again, not implementation. The king had the computer scientist thrown in the moat, and they all lived happily ever after. Well, yeah, if that's the best guy the king could hire, I'd throw him in the moat, too. ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212970 Archives:
Re: The Parable of the OOP and Breakfast
Neither CF nor Java nor .NET support multiple interfaces. Erm...make that multiple inheritance. OOPs. (pun intended). ~| Find out how CFTicket can increase your company's customer support efficiency by 100% http://www.houseoffusion.com/banners/view.cfm?bannerid=49 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212971 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
RE: The Parable of the OOP and Breakfast
The second advisor, a ColdFusion developer, highly skilled in Mach-II, Model-Glue and java, immediately recognized the danger of such short-sighted thinking. ... Specifically, we need an object-oriented language with multiple inheritance. Neither Java nor CF supports multiple inheritance. No but a number of CF programmers have faked it... Myself included -- although it was actually a side-effect of wanting a way to package up my applications for consumption that would avoid some problems related to discovery. s. isaac dealey 954.522.6080 new epoch : isn't it time for a change? add features without fixtures with the onTap open source framework http://www.fusiontap.com http://coldfusion.sys-con.com/author/4806Dealey.htm ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:212986 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
Re: The Parable of the OOP and Breakfast
This parable is actually a rather old one, told by Electrical/Electronic Engineers when they want to gain points on Computer Scientists, hence the bias of a good, simple procedural design vs a poor, bloated and inappropriate OO design. The language in it changes from telling to telling. ~| Logware (www.logware.us): a new and convenient web-based time tracking application. Start tracking and documenting hours spent on a project or with a client with Logware today. Try it for free with a 15 day trial account. http://www.houseoffusion.com/banners/view.cfm?bannerid=67 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:213007 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54
Re: The Parable of the OOP and Breakfast
Actually I just thought it was amusing, thats all. I found it while doing some preparation for my radio show and thought with a little adaptation it would amuse some people here. I'm sorry Joe got a bit put out by it. I never intended that Joe. It's just a joke ok? And it hit home because I've caught myself in the past spending half a day writing an application with a database etc to record something for a one-off job and provide the hooks for later analysis, when in truth all that was really needed was a piece of paper and a pen. But it's just a joke. That's all. Cheers Mike Kear Windsor, NSW, Australia Certified Advanced ColdFusion Developer AFP Webworks http://afpwebworks.com ColdFusion, PHP, ASP, ASP.NET hosting from AUD$15/month On 7/28/05, James Holmes [EMAIL PROTECTED] wrote: This parable is actually a rather old one, told by Electrical/Electronic Engineers when they want to gain points on Computer Scientists, hence the bias of a good, simple procedural design vs a poor, bloated and inappropriate OO design. The language in it changes from telling to telling. ~| Find out how CFTicket can increase your company's customer support efficiency by 100% http://www.houseoffusion.com/banners/view.cfm?bannerid=49 Message: http://www.houseoffusion.com/lists.cfm/link=i:4:213037 Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4 Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4 Donations Support: http://www.houseoffusion.com/tiny.cfm/54