Objects & Patterns Design Workshop
Bruce Eckel Presents:
5 days of Java Design
A Hands-on Intensive Workshop
Taught by Bruce Eckel & Bill Venners
Note: this will be the last one of these seminars that will be given. After this,
we will be teaching separate classes on Object-Oriented Design and Design Patterns (although
Bill and I still plan to co-teach both classes). We haven't decided when the first one will be
scheduled, but because of the time required for Thinking in Java, 3rd edition,
it may not be until next year. So if you've ever wanted to take this very popular class, this is
your last chance!
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:
1. Java Object Design Guidelines & Idioms (2.5
2. Understanding and Applying Design Patterns (2.5
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"
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, email@example.com
- 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
An important part of good object-oriented design is well-designed objects.
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
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 other.
The Object Design Workshop focuses heavily on 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
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
Designing with Objects
- Understand the importance of the object.
- See objects as bundles of services, not bundles of data.
- Idiom: The State Machine.
- Idiom: The Actor.
- Idiom: The Messenger.
- Idiom: The Immutable.
- Separate interface from implementation.
- Minimize the number of methods in object interfaces.
- Simplify the semantic contract of object interfaces.
- Idiom: The Event Generator.
Designing with Composition, Inheritance, and Interfaces
- Use classes to say "What objects are."
- Use class extension to model IS-A-KIND-OF relationships.
- Use composition to enlist the help of other objects.
- Understand the difference between inheritance and composition.
- Understand 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.
Designing with Types
- Make the types of your method parameters and return values as precise as
- Prefer dynamic binding to instanceof and downcasting.
- Make sure subtypes fulfill the semantic contract of their supertypes.
- Use instanceof and downcasting to ask "Can you do something for me?"
- Avoid optional clauses in semantic contracts.
- Prefer compile-time type information to run-time class information.
- 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 material
that has been spun off from Thinking in Java (2nd
ed) into its own book, Thinking in Patterns, a preliminary
version of which you can find at this link.
The best way to find out what's in this portion of the seminar is to download
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
- 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, 2nd
Edition, by Bruce Eckel
Bruce Eckel's Hands-On
Recommended Reading (before the seminar):
Best Practices in Object-Oriented API Design in Java, by Bill Venners
Chapter 1 of Design Patterns: Elements of Reusable Object-Oriented
Software, by Gamma et al.
Thinking in Patterns, a preliminary version of which you can find here. (This material
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.