[<<] Industrie Toulouse

Ned Batchelder has a link to the paper Objects Have Failed (PDF). Like him, I'm putting this here to remind myself about it later. I skimmed over it tonight, but I so hate reading PDF's sometimes.

Personally, I don't know if objects have failed. But on the large scale, I think that we are entering an object/framework/component mishmash era, and that's not a bad thing. Java's power and popularity come as much from its ever growing standard library, augmented by strong standards like J2EE. I think that the .NET framework is a serious contender, and very similar to Java's standard class library. Objective-C and the Cocoa framework have finally been vindicated with the success of Mac OS X. Cocoa precedes Java and .NET by a good many years and offers a similar thing - a dynamic runtime system comprised of a large library of objects and classes for building applications.

I saw a couple of heartening things today. The first was my glancing over a sample chapter of O'Reilly's Mastering Visual Studio .NET covering integration of components into Visual Studio. Rapidly glancing over the code snippets, screen shots, and some of the text, I realized that it was pretty understandable. This is a considerable improvement over the last generation of common component frameworks (COM, etc), although some of the object/component hybrid systems such as SOM didn't suffer so badly. I think what was impressive was that the concepts were not dissimilar to Zope 3 - there were service managers, services, and contexts. I think this move towards services is especially heartening - "get me the foo service" "have that service do something to this object". This seems to take a lot fewer lines of code than it used to, and more seems to get done. And I think a lot of this stems from the influence of Design Patterns, which took a lot of the common good ideas of different well written frameworks (including MacApp and Cocoa's ancestor, NeXTStep) and codified it into a common language. A lot of the things we were accidentally coding over and over again is now done on purpose, and the standard frameworks and class libraries have grown to offer more of these services.

The other thing I saw and liked was an old PyObjC article with example code that set up an application that watched mounted volumes and automatically opened "README" files. The code was really quite concise and understandable. Part of this is of course due to Python, but a lot of it stems from the power of the built in objects and classes of Cocoa.

So, while I haven't looked at the Objects have Failed paper in any sort of depth yet, I wouldn't say objects have failed. It's just taken a while for the general industry to use them correctly. I think that OOP has been taught and/or picked up incorrectly by so many people that we're just now starting to recover from the damage caused. There are many systems like Zope 2 which are a frightening mess of rigid (yet fragile) and deep incestual forking inheritance trees. Composition and dynamic relationships between smaller objects has been the right idea all along. Some systems got that, a lot didn't. But the latest crop (including Zope 3) seem to have seen the light.