Return to Home Page
      Blog     Consulting     Seminars     Calendar     Books     CD-ROMS     Newsletter     About     FAQ      Search

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!

Click here to register for August 26-30, in Crested Butte, Colorado

Click Here for Crested Butte Location and Lodging Information

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 days)
2. Understanding and Applying Design Patterns (2.5 days)

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 Developer, SAS

  • 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 done!

  • 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 Learn

  • 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 Corporation

  • 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, Inc.

  • Best use of training dollars I've seen my company spend! George Runyan, Emerging

  • 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 Corporation

  • 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 Advisor

  • 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 Technology

  • 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 Center

  • 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 Contractor

  • 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, Inc.

  • 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, Lakshmi

  • 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 recommend.

  • Excellent Java and OOD training.Igor Mendelev, Principal SW Engineer

  • 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 Technologies

  • 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,

  • 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. Engineer

  • I liked the lecture-discussion-exercise cycle. Immediate exercises give me a chance to better internalize the subject. I also enjoyed the pair programming concept.

  • 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. Shujing Liu

  • 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. Bill Bashford

  • 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, Inc.

  • This course was very useful because it let me understand the pattern methodology, how it works and which cases we can apply. Lizeth Hernandez

  • Even with little OO/AD experience, I still got value for money. Shola Oshilaja

  • 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 (2.5 days)

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 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 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 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

  • 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 possible.
  • 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.

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:

Design Patterns (2.5 Days)

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 the book.

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, 2nd Edition, by Bruce Eckel
Bruce Eckel's Hands-On Java CD

Recommended Reading (before the seminar):

Interface Design: Best Practices in Object-Oriented API Design in Java, by Bill Venners (free download)

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.

Search     Home     WebLog     Consulting     Seminars     Calendar     Books     CD-ROMS     Newsletter     About     Contact     Site Design     Server Maintenance     Powered by Zope
©2007 MindView, Inc.