Objects & Patterns: Five Days of Java Design
A Hands-on Intensive Workshop Taught by Bruce Eckel & Bill Venners
August 26 to 30 in Crested Butte, Colorado
Click Here for Information and Registration
The goal of this exercise-based workshop is to give you a
set of tools covering the design aspects of the software-building life cycle,
which will be presented in two parts:
- Java design idioms and programming techniques
- Practical understanding and application of
The workshop combines lectures,
guided exercises, and
team-based independent work to demonstrate how
object-oriented design with patterns and idioms can work in a production
environment. As with all Bruce Eckel's seminars, the emphasis will
be on getting you "thinking in" objects.
Comments From Students
- Thanks to you and Bill for conducting a great seminar. The past five days
rank as one of the best learning experiences in my life (and I've taken far too
many courses in my 25 years of schooling ;-)). Dr. Mark Borges, MTT, AT&T
Wireless Services, Inc., Redmond, WA
- Exceptional. Malcolm Davis, New Earth Software
- This class was a great opportunity to meet and work with experienced Java
designers. Bruce & Bill are able to take complex ideas and explain design
concepts in a way that make them practical to implement. The emphasis on testing
and XP was extremely valuable. Kathy Wisniewski, Senior Applications
- This is one of the best design seminars I've been to. Both Bill and Bruce
take very complex concepts and lay them out in simple-to-follow terms. You walk
away from the seminar not only with good understanding of design patterns
concepts but also implementation frameworks of the patterns in Java. Well
- Outstanding class! A healthy treatment of the latest thinking in software
development and a great opportunity to interact with experts from all over the
world. Michael Wagner, director of software engineering, NCS
- Wow! Lots of "Thinking" done here, maybe this is why Bruce's books are
entitled Thinking, etc. The seminar is an in-depth analysis of the
primary patterns popularized by the Gof book, plus others are introduced. The
discussions, material, examples location all make this seminar a most enriching
learning experience. Jason Zielke, Developer, Lante
- Through this course, I have learned some design patterns and in
particular, many new developments in the field, that could shape our software
development cycle and speed it up. Bin Yang, Online Environs,
- Best use of training dollars I've seen my company spend! George
- This seminar advanced my understanding of design patterns, and of OO programming in general, by an order of magnitude. If I could, I'd make every software developer I work with attend Objects and Patterns before the project started. Christopher Rodriges Marcias
- This course put the theory into the right perspective and gave very
valuable insights on how other people are looking at everyday problems
Erick Jogi, Hansabank, Estonia
- This seminar/workshop leads you to start thinking about a solution to a
problem using particular guidelines and approaches instead of jumping to
"solution-by-coding" Ilyn Simuni, Independent Contractor
- Bruce & Bill have a way of guiding you on a path of discovery without
being preachy or heavy handed. They are open to new ideas and quite to point out
advantages, disadvantages, and alternatives. Justin Shaw, The Aerospace
- Bruce and Bill provided thoughtful insights into the dense, often misunderstood, world of design patterns.
Nicholas Bleibtrey, MapInfo Corporation
- This helped me organize the knowledge and concepts of designs into
something I can apply and use in the real programming world. Michael
Cardon, Migration Software
- I met fascinating people from all over the world, I was challenged by new
ideas, and I learned by applying these ideas to problems at the conference and
my work at home. Larry Jones, System Architect
- If you need insight on how to use patterns to solve problems, this is the
course for you. Moses Guillen, Federal Express Senior Technical
- A fantastic atmosphere for learning the tools that are essential to Java development.
David Bokor, MapInfo Corporation
- This seminar will help you get started with Patterns and Extreme
Programming. For experienced pattern developers, you will get additional
insights into the most common patterns. Mike Frey, Navigation
- The O&P seminar intersperses lectures and discussion with hands-on team exercises, making for a better "total learning experience" than either lectures or exercises alone. I came away with the ability to recognize and distinguish amongst the most common patterns. Much better than just reading GoF.
Susan Hoover, Pros Revenue Management
- An excellent course for those interested in an introduction to objects,
patterns and the reasoning behind them.Joe Callahan, Fox Chase Cancer
- I appreciated your insight into what I'll call, for lack of a better
term, Design Pattern Patterns. I think my personal evolution as a software
developer has mirrored our industry's evolution: We each are looking for the
next higher level of abstraction to develop a higher bandwidth vocabulary and
reduce the number of real problems we have to truly understand. Jack
Frosch, Frosch Enterprises, Inc.
- To the point lecture. Good points and bad points of OOAD are discussed without any bias.
- Fantastic! Learned a lot of new concepts and have deeper understanding of concepts I was already familiar with. Course ran the gamut - exceptions, patterns, object design, unit testing, paired programming, group designs, great group discussions and of course, sheep. Great mountain biking also.
Hunter Milligan, Zephyr Innovations, LLC.
- This definitely helped a great deal in synthesizing my thoughts and
understanding on usage and implementation of design patterns. Well worth the
time and effort. Bernard Schreiber, Emerging
- Reinforced and clarified patterns, helped a non-java oo programmer orient
to java at a level far above basic language use.Steve Harley, Independent
- I really liked the format of the workshop. By working in pairs and
groups, I was able to learn the material faster than if I had been struggling
with it alone.Eric Krysiak
- The "Java Design Patterns" class helps me to refocus back on design and
how I can write more flexible and robust applications in Java. In addition, it
helps me to get up to speed on Design Patterns quickly, rather than trying to
wade through all the patterns books out there. Ben Wong, Matthias Group,
- Even though I had a good experience in C++ and patterns, I found the
class very useful in using Java with design patterns. The class made me think
that the Java way than the C++ way in approaching solutions.Rakesh,
- Having been warned by Bruce that it could be too much material to wade through in two weeks, I took the "Thinking in Java Hands-On Seminar" and the "Objects and Patterns" workshop back-to-back (probably the first one to do it). These two training sessions stand well on their own; both are highly recommended. However, the combination of these two courses in succession is dynamite! Even with me having no working knowledge of Java, Andrea's thoughtful and thorough presentation of the Thinking in Java seminar prepared me well for the double barrel approach of Bruce and Bill during the Objects and Patterns Workshop. The learning curve was surely steep, but the journey was worth it. Crested Butte and Camp 4 is a must experience. If you don't mind feeling like you are just barely keeping your head above water, these working sessions will equip you to deal with the torrential floods of object technology later on.
Greg Valdez, scientist, Saudia National Laboratories
- Great discussions! Excellent crowd! Much outdoor fun. Would definitely
- Excellent Java and OOD training.Igor Mendelev, Principal SW
- One of the few good seminars in this subject you can find today.
- This course helped our project team discuss and understand design
patterns. It provided a good opportunity for us to take a step back and review
what we've done, discuss what we want to adopt into our development process, and
consider changes we could mkae to improve our designs. Overall the course
teaches fundamental skills necessary to apply object-oriented design in a
variety of situations. Kurt Welker, INEEL
- Patterns exercises & pair programming really illuminate the patterns
and intent. Best description of double (multiple) dispatch I've ever heard.
Bill's clarity, patience and rigor as an instructor were uncommonly strong.
Paul Bouzide, Navigation Technologies
- The best part of the course is that it is highly interactive and the
hands-on exercises help you to practically see how/why things can be designed in
a particular way. Lade Praveen
- The course is well-designed and the teaching style is excellent. It was
illuminating to have two experts, Bruce Eckel and Bill Venners, to discuss each
question or issue that arose. Highly recommended! Mark Barton, Navigation
- The course content was just right for me. The best week of conceptual
thinking I've done in a while. Couldn't have done it after the usual work
day. Bruce Campbell, University of Washington Research Scientist,
- The whole experience was one-of-a-kind. The little projects were
interesting. In spite of not having a Java background, I could grasp a lot of
stuff covered. Anwar Melethil
- A better name for the course would be "OOAD/Patterns/Idioms Retreat." It
was so much more than a mere seminar. It was an experinece that will stay with
me for a long time. Chris Busick, Data General
- Great course. I recommend it to everybody interested in Java and
Patterns. Elemei Kuclai, MIS AG
- I found the seminar excellent.
- This is probably the most times I've ever used the exclamation "cool!" in
any work-related activity. Teaches very clever and, well, cool, ways to think
about and solve problems. Adi Lachman
- Simply great, easy to understand, clear.
- Very worthwhile, very enjoyable. Helped me see relationships between
various programming concepts that I hadn't seen before. Ted Hill,
Software Engineer, Berbee Information Networks, firstname.lastname@example.org
- This course gave me a very good insight into design patterns and their
application. I shall be using what I learned here to implement some of these
concepts in our non-java COM/DCOM/COM+ World. I recommend this course to all
design architects, java-based or non-java-based. Gopinath Meghashyam, Sr.
- I liked the lecture-discussion-exercise cycle. Immediate exercises give
me a chance to better internalize the subject. I also enjoyed the pair
- Great course. It really makes me understand patterns and know how to possibly apply it in the future. The whole course makes a hard concept simple.
- Extremely valuable knowledge every object-oriented architect/developer should be equipped with.
Will Tan, Mass Material Financial Group
- Bruce Eckel and Bill Venners presented the "Objects & Patterns" class in, what I would say, a responsible way. The approach was not simply: "here are the design patterns as a cook book," but they shared their insights into the complexity and the context of how the patterns should be applied. This class is not for the beginner programmer that is first learning Java. This class is for the developer that is ready to learn advanced design tools from a wealth of material. Bruce has provided the perfect study environment. First of all, what a place to hold a class. Crested Butte is beautiful and we hiked almost every day. The combination of lecture, examples, exercises with partners, and a long break for the daily hike made for the most powerful learning environment I have encountered. Thanks Bruce, Bill, and Crested Butte.
- The design exercises showed the immediate use of patterns in design. This
made the class enjoyable. Raja Krishnamoorthy
- This great seminar gave me lots of new perspectives to look at in OOP
design. Bernhard Woditshka, Java OOP Developer
- Outstanding learning experience.
- Very helpful seminar for understanding design patterns and Java
programming techniques. Jim Taylor, Amgen
- Great Job! This course gave me a high level of understanding that will
greatly improve the quality of my work. I expect that this week's course will
save many weeks of work over the long term. Keith Bennett, FGM,
- This course was very useful because it let me understand the pattern
methodology, how it works and which cases we can apply. Lizeth
- Even with little OO/AD experience, I still got value for money.
- This seminar goes far to demystify design patterns.
Mike Cocchi, Systems Architect
- It's really been worth the effort to come to the USE to attend this
course. It pushed me to review the way I usually design software and made me
discover and become more aware of new weapons (patterns) to use in my everyday
job. Luca Sfarzo, Incard Spa, Italy
Object Design Workshop
An important part of good object-oriented design is
The first half of the seminar, which is called the Object Design
Workshop, focuses on guidelines and idioms that
will help you create well-designed objects.
Each guideline and idiom will be explained and justified, and then
discussed by the attendees.
This discussion is an integral part of the workshop, aimed at facilitating
a conversation about design among peers that can help everyone to learn
from each other's experiences and perspectives.
At the end of the Object Design Workshop, you will walk away with a specfic
set of practical guidelines and concrete idioms
that you can draw upon in your future object designs.
The Object Design Workshop also includes a hands-on design project.
Periodically, the attendees of
the workshop will break up into small groups, each of which is assigned an
API design project.
Each group will document their design with UML and/or javadoc HTML pages,
and present their design to the rest of the class, who will critique it
mercilessly. The point of the design reviews is the same as the discussions --
to draw out the experience and
perspectives of the entire group, and enable everyone to learn from each
The Object Design Workshop focuses heavily on the designing with Java.
Although many of the guidelines are applicable to any
object-oriented language, all examples are shown in Java. Most of the idioms,
by contrast, are specific to Java. In addition, the end result of each API design project
will be a Java package.
Here's a list of the guidelines and idioms that will be
covered during the Object Design Workshop:
(Each title is linked to an online copy of the lecture handout.):
Designing with Objects
- Appreciate the significance of the object.
- See objects as bundles of services, not bundles of data.
- In general, design objects that are State Machines.
- Pattern: The State Pattern.
- Use Messengers to transmit information.
- Use Immutables to represent values of abstract data types.
- Separate interface from implementation.
- Idiom: The Event Generator
Designing with Composition and Inheritance
- Use classes to say "What objects are."
- Use class extension to model permanent IS-A relationships.
- Prefer polymorphism over instanceof or reflection.
- Use composition to enlist the help of other objects.
- Understand the difference between inheritance and composition.
- Be aware of composition and inheritance in design patterns
Designing with Interfaces
- Appreciate the significance of the interface.
- Use interfaces to say "What objects can do," or occasionally, "What can be done to an object."
- Use interface extension to model INCLUDES-A relationships.
- Consider creating convenience implementations of your interfaces.
- Use abstract classes to provide default behavior or communicate limits.
Designing Object Semantics
- Appreciate the significance of semantics.
- Keep objects focused.
- Minimize the number of methods in object interfaces.
- Make object semantics as easy to understand as possible.
- Describe object semantics as explicitly as possible.
- Make sure subtypes fulfill the semantic contract of their supertypes.
- Avoid optional clauses in semantic contracts.
- Provide compatibility tests for your APIs
Guideline Grab Bag
- Throw exceptions on abnormal conditions.
- Use a checked exception to get the attention of clients.
- Throw a different exception type for each abnormal condition.
- Idiom: The Thread-Safe Object
- Idiom: The Hygienic Object
- Idiom: The Canonical Object
Articles covering most of these topics are posted at:
Probably the most important step forward in object-oriented design
is the "design patterns" movement, chronicled in Design Patterns, by
Gamma, Helm, Johnson & Vlissides (Addison-Wesley 1995). That
book shows 23 different solutions to particular classes of problems.
In this section, the basic concepts of design patterns will be
introduced along with examples. This should whet your appetite to
read Design Patterns (a source of what has now become an
essential, almost mandatory, vocabulary for OOP programmers).
The material in this section shows design patterns that have been
used in the Java Standard Libraries, and also follows the
Design Patterns chapter in
Thinking in Java. Much of the presentation is an example of the
design evolution process, starting with an initial solution and moving
through the logic and process of evolving the solution to more
appropriate designs. The last project shown (a trash recycling
simulation) has evolved over time, and you can look at that
evolution as a prototype for the way your own design can start as an
adequate solution to a particular problem and evolve into a flexible
approach to a class of problems.
- Dramatically increase the flexibility of your designs
- Build in extensibility and reusability
- Create denser communications about designs using the
language of patterns
Following each lecture there will be a set of patterns exercises for
you to solve, where you are guided to write code to apply particular
patterns to the solution of programming problems.
A high degree of comfort with object-oriented terminology.
Implementation experience with Java.
Thinking in Java, Bruce Eckel ($31.96 from Amazon) or
Bruce Eckel's Hands-On Java CD ($50 from MindView)
Recommended Reading (before the seminar)
Interface Design: Best
Practices in Object-Oriented API Design in Java, by Bill Venners
Chapter 1 of
Patterns: Elements of Reusable
Object-Oriented Software, by Gamma et al.
The Design Patterns chapter of the online 2nd edition of Thinking
in Java (this chapter will be evolving over time).
What you should bring
Your notebook computer with the Java 2 development environment
of your choice loaded and tested.
A willingness to actively participate in group activities.
Click Here to Register
The first iteration of this seminar, which took place August 9 to 13, 1999, in
Crested Butte, Colorado, was a big success.
Here's a picture of Bruce, Bill, and a few seminar attendees
on top of Mount Crested Butte, the nearby 12,000 foot peak that several of us
climbed during one four hour afternoon break. We're all smiling so glowingly
in this picture because we'd been having so much fun
If you have any questions about this seminar, please
e-mail Bill Venners at
Bruce Eckel at email@example.com.
Bruce Eckel's Home Page: