To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
This is a bit of work I am particularly proud of. I wrote a little workspace that got me a method list browser on all the methods in the image that use “super” (that in itself was fun). Then I went through them trying to categorize each one. I felt like a real scientist there for a minute- taking samples, making hypotheses, testing them in the “real world.” The result is a “theory of super,” which is much simpler than the language feature (and perhaps not coincidentally quite similar to the “inner” feature of Simula, from which super was derived).
What is it with this super thing, anyway? The pseudo-variable super is a curious wart on the otherwise unblemished Smalltalk language design. Ordinary messages are sufficient to capture composition, conditionals, and looping. The three components of structured programming thus become unified in Smalltalk. Yes, but.…
The exception is super. It means the same object as self, but when you send it a message the difference is revealed. When you send an ordinary message the class of the receiver of the message is examined for an implementation of that message. If one is not found the superclass is searched, then its superclass, and so on until a method is found. Super circumvents normal message lookup. When you send a message to super the search begins in the superclass of the class in which the executing method was found.
This is the biggie, the paper that made my name (and to a lesser extent Ward's, since he was already a little famous). I got my name first on the paper because of our rule that whoever wrote the first draft of a paper got to put his name first. This has caused considered confusion since then, with people crediting me as the inventor of CRC, or telling Ward how exciting it must have been for him to work with me.
There are a couple of stories about this paper. First, the title. Ward and I wanted to be very careful not to claim more for CRC than we could prove. We knew it was good for teaching “object-think,” so that's the approach we took in the paper, the one single point we pushed. We deliberately understated what we thought the impact would be, leaving it to our readers to extrapolate to making CRC cards into a design or analysis technique. We spent at least an hour on the phone polishing the title, and the result pleases me as much now as it did then.
Another story- I missed OOPSLA '89, waiting for the arrival of Lincoln Curtis, child number two. I had no idea of the impact of this paper. Then I attended OOPSLA '90 in Ottawa. I was in a “Design and Analysis” BOF. The biggies were all there: Booch, Constantine, Yourdon.
There are two notable points to make about this paper. First, it is one of the first times Ward and I published any pattern-related material (we presented some stuff at OOPSLA 87 in Orlando, I in Norm Kerth's “Where Do Objects Come From” workshop, Ward on a panel). Second, it argues that the worst problem of reuse is one of communication, not technology or economics.
The paper started out life as a Tektronix technical report. Ward and I had the habit of writing up just about everything we did as a TR. After we had written this, I think we submitted it as a position paper for some conference or workshop. Somehow, JOOP got hold of a copy and contacted us about publishing it.
The paper can be summed up as: “We created two sets of abstractions. The first was communicated as literate source code. The second was communicated as patterns for its reuse. The first set of objects was misused; the second was used correctly. We conclude that the problem of reuse is one of effectively communicating the intent of the code.”
MAKING ABSTRACTIONS
We have found Smalltalk's notion of objects communicating with messages an effective vehicle for the express of algorithms and data structures in a form isolated from the details of an application program. The process of isolation, called abstraction, is emerging as a principal activity of programmers.
If you have read The Smalltalk Best Practice Patterns, you can see in this column the beginnings of the section in the book on collections. Once again, I mined the material from the image. Thinking back, I'm amazed at how important reading the image has been to me. I can remember being incredibly frustrated at having to spend all day looking for the method or class that I wanted, but then realizing at the end of the day that I had gotten more accomplished with six hours of reading and ten minutes of typing than I used to accomplish with ten hours of typing.
We may underestimate the value of a shared body of literature (the image) in creating and sustaining the Smalltalk culture. Perhaps that's why the visual “wire-and-fire” front-ends failed to have much impact-there was no corpus of visual code that everyone routinely consulted.
Our previous column focused on enumeration methods and how to use all of them to advantage. This column covers the common collection classes, how they are implemented, when you should use them, and when you should be careful.
COLLECTION CLASSES
ARRAY
Use an Array if you know the size of the collection when you create it and if the indices into the elements (the first argument to at: and at:put:) are consecutive integers between one and the size of the array.
One of the important characteristics of an autonomous robot lies in the capability of self-organizing its own behaviors in order to adapt to an unknown environment. The goal of this paper is to present an effective means for investigating such a capability, which enables us to graphically build a model of the autonomous robot and dynamically observe the emergence of reactive behaviors as a result of external stimulus controlled behavioral self-organization. In particular, the paper describes an integrated software workbench, called C4 (which stands for Create, Coordinate, Condition, and Co-evolve), for modeling and simulating autonomous robotic systems, e.g., legged and dual-arm ones. The module create enables us to build top-down graphical models of novel mechanisms, followed by primitive motion pattern (e.g., gaits) specification and visualization in the coordinate module. Learning mechanisms, as embedded in module condition further allow us to test how the animated robots acquire new behavioral rules triggerable by external stimuli. Finally, the module co-evolve facilitates the analysis of the distributed intelligence of robot groups, which manifests itself from the behaviors emergent from the interaction among individual robots.
The first stage in developing a task planning language for redundant manipulators is that of constructing an algorithm to produce a schedule of joint displacements for the specified task. This algorithm may be based upon the use of an inverse infinitesimal kinematic analysis for the majority of the path with a finite inverse analysis used to provide an initial joint configuration and periodically to correct for any joint errors that may have accumulated. Here, it is assumed that there is complete correlation and coherence of solutions between these analyses, otherwise problems, such as a lack of repeatability may occur. This may be accomplished by modelling the manipulator as an elastic system which permits the development of a task planning method by using analyses which are all mutually coherent. In this paper, the method is developed and demonstrated using a redundant manipulator that simultaneously avoids obstables, singularities and joint motion limitations. The task planning method and associated analyses are applicable to the general serial redundant manipulator with an arbitrary degree of redundancy.
There is growing interest in robots that are designed specifically to interact with people and which respond to voice commands. Very little attention has been paid, however, to the kind of verbal interaction that is possible or desirable with robots. This paper presents recent work in multimodal interfaces that addresses this question. It proposes a new form of robot-user interface, namely a collaborative conversational interface. This article explains what collaborative conversational interfaces are, argues for their application in robots, and presents strategies for designing good conversational interfaces. It concludes with a discussion of the particular challenges faced in designing conversational interfaces for robots.
In this paper we investigate the effectiveness of functional language features when writing scientific codes. Our programs are written in the purely functional subset of Id and executed on a one node Motorola Monsoon machine, and in Haskell and executed on a Sparc 2. In the application we study – the NAS FT benchmark, a three-dimensional heat equation solver – it is necessary to target and select one-dimensional sub-arrays in three-dimensional arrays. Furthermore, it is important to be able to share computation in array definitions. We compare first order and higher order implementations of this benchmark. The higher order version uses functions to select one-dimensional sub-arrays, or slices, from a three-dimensional object, whereas the first order version creates copies to achieve the same result. We compare various representations of a three-dimensional object, and study the effect of strictness in Haskell. We also study the performance of our codes when employing recursive and iterative implementations of the one-dimensional FFT, which forms the kernel of this benchmark. It turns out that these languages still have quite inefficient implementations, with respect to both space and time. For the largest problem we could run (323), Haskell is 15 times slower than Fortran and uses three times more space than is absolutely necessary, whereas Id on Monsoon uses nine times more cycles than Fortran on the MIPS R3000, and uses five times more space than is absolutely necessary. This code, and others like it, should inspire compiler writers to improve the performance of functional language implementations.
A graphical robot programming system has been developed. This system with a graphical interface is user-friendly and easy-to-learn for low-skill users. It has been developed as a prototype system under a project by the Japan Robot Association (JARA) since 1994. The system runs on a personal computer and consists of a graphical user interface and an editing system. It is designed for programming an arc welding robot in small batch production and is expected to provide low-skill users with a means to use industrial robots with ease.
This paper develops a method for neural network control design with sliding modes in which robustness is inherent. Neural network control is formulated to become a class of variable structure (VSS) control. Sliding modes are used to determine best values for parameters in neural network learning rules, thereby robustness in learning control can be improved. A switching manifold is prescribed and the phase trajectory is demanded to satisfy both, the reaching condition and the sliding condition for sliding modes.
Object-oriented concepts, including a few that we missed in The Object Primer.
Modeling techniques like class responsibility collaborator (CRC) modeling, use-case scenario testing, and class diagramming.
An iterative development life cycle called “The Pinball System Development Life Cycle (SDLC).”
What this book is all about.
Unless you're reading The Object Primer and Building Object Applications That Work back to back you're going to need a quick refresher. Furthermore, there's some new material in this chapter starting in section 1.3 (hey, like we'd want you to skip an entire chapter).
Until the release of this book, The Object Primer was the greatest thing since time-sliced bread. Now we have Building Object Applications, a book that is even more spectacular than its predecessor. In The Object Primer we covered analysis techniques such as class responsibility collaborator (CRC) modeling and use-case scenario testing. We also introduced several object-oriented (OO) concepts and showed you how to model them using class diagrams. We finally put all this into the context of the Pinbail System Development Life cycle (SDLC), an iterative and incremental approach to OO systems development.
Object-Oriented Concepts — A Really Quick Recap
In The Object Primer we introduced you to several concepts that are critical to understanding the OO development process. Let's invest a few minutes reviewing the following object-oriented concepts:
I wrote this paper in one sitting in my favorite coffee shop in Boulder Creek, perched out over the creek sipping a mocha (several mochas, in fact). I was trying to come up with a catchy intro. When the time machine idea came to me, the rest of the article wrote itself.
I don't know whether it will reproduce in the book, but in the magazine, the words “Star Trek” in the fourth paragraph were done in the Star Trek font. I was impressed that someone had the time and ingenuity to put in that little touch.
The other lesson in this is that the coffee shop in question closed soon after. The building owner wanted to jack the rent way up once the shop was successful, and the shopkeeper closed down rather than pay. The shop had become a gathering place for the community. Our little town still hasn't recovered
What I take from this is that even though as a businessman I have to pay attention to the bottom line, every decision I make also affects real people's lives. Once you're committed, not following through may have a huge cost for other people.
I was excited when Marie invited me to contribute a gentle introduction to patterns for this issue. Something as down-to-earth practical as patterns deserves the Object Magazine audience of folks trying to get the job done with objects.
Although I first got interested in Smalltalk when I read the 1981 Byte issue, I didn't get an opportunity to start using it until 1995. I was hooked right away. OOPSLA '96 was exciting because it was the first time I got to meet practicing Smalltalkers. I was thrilled to find people who were crazier than I was. One of them was Kent. Kent was working at the Tektronix labs at the time, and I spent a day there after OOPSLA was over, meeting Kent and Ward and lots of other Smalltalkers. They were bold, adventurous, experienced; they were pushing Smalltalk to its limits. I wanted to be like them.
Over the years, I've gotten to know Kent better than I ever expected. He has made me eat sushi, jump out of a redwood, and write about patterns. I've always felt that I was following where he had broken the trail. It's been a good path to follow.
Kent has always epitomized the spirit of Smalltalk to me. He is an intellectual and a nonconformist, yet he is an intensely practical person. He is concerned with making the world a better place for others, and not just for himself. He is open and sharing. Smalltalk is like that, too.
This was the first article I wrote after the big splash. I was asked to write the article for a special issue on objects, “something about CRC cards.” I remember re-reading the “Laboratory…” article and thinking, “I can't do anything better than that. That article says it all.”
After a brief pause for a personal crisis, I thought, “What the hell. I'll just write the same stuff with different words.” What came out, though, was very different. The original CRC article convinced bright people that CRC was a good idea. This one convinces regular engineers that they, too, can get started with objects.
Ward's goal when we wrote together was to write prose that fairly dripped with meaning. You could read the same sentence every six months and get new meaning out of it. The result is complex, dense, evocative, and sometimes hard to read.
This article is the first time I found my own voice. My writing voice is much plainer than Ward's. I write like I speak: plain and direct (although I generally use fewer expletives when I write). Both Ward's style and mine are directly at odds with my academic training, which was to layer any possible meaning behind layers of jargon, notation, and convoluted sentence structure. I suppose it's no wonder it took me a while to get over that.
What OO patterns, including both analysis patterns and design patterns, are.
How to use OO patterns effectively in the applications that you create.
How to create new OO patterns.
How to apply OO patterns throughout the life cycle.
What the advantages and disadvantages of OO patterns are.
Considering the number of combinations of operating systems, hardware platforms, and network protocols can you reasonably expect to be able to purchase business objects off the shelf? I'm not so sure. But what I do know is that developers are constantly solving the same problems over and over again. How many of you have been involved with developing inventory-control software? Or human-resource-management software? Or billing software? These problems keep repeating themselves over and over again. Although everyone's inventory-control system is different, the fact is that there is a lot of similarity between the designs of these systems. Wouldn't it be nice to be able to pick a design up off the shelf that has 80—90% of the thinking done for you already and all you have to do is develop the differences that are unique to your organization? That's what object-oriented (OO) patterns are all about, they're blueprints of generic designs that you can apply to the systems that you develop.
Doesn't it always seem as if you're solving the same problems over and over again? If you personally haven't solved a given problem before, then chances are pretty good you could hunt somebody down who had tackled the same, or at least a similar problem in the past.
You may have noticed me putting more and more personal comments at the beginning of columns. I think this resulted from getting more and more comfortable with my role as a columnist (even as I was losing interest—I didn't say I was straightforward).
I beat on the “inheritance, feh” horse a bit more in this column, but as before, I try to explain what to do about it, rather than just bash.
The other thing I noticed while rereading this column is the extra pattern thrown in at the end. I didn't do it to pad. I did it because I was honestly embarrassed to have missed it at the client and I didn't want other people to make the same mistake. This violates the “what one thing do you want to say” rule, but it doesn't bother me here. I'm very clear that there are two things to talk about, from the title on down. The power of any rule is when you understand it well enough to break it.
Once again, no garbage collectors. I've been busy paying the bills, so I haven't had a change to look in detail at the garbage collectors in the various Smalltalks. I'll get to it, but those college educations have to come first.