Farewell to 'Design Techniques'

This final installment of Design Techniques gives a brief history of the column, tracing its development and maturation, a topical index of the column's back issues, links to related discussion forum topics, and a hint of what's to...

Design with static members

In this installment of his Design Techniques column, Bill Venners discusses the ways in which static fields and methods, which exist outside of objects, fit in a design that's object-oriented. (1,500 words)

Design with runtime class information

In this installment of Design Techniques, Bill gives advice on using runtime class information in Java programs. He talks about the method area of the JVM and the structure of Java objects, upcasting and downcasting, polymorphism and...

Design with dynamic extension

In this installment of Design Techniques, Bill takes a look at a less commonly understood aspect of Java's architecture: dynamic extension. He discusses the two kinds of dynamic extension, forName() and class loaders, and offers...

Designing with interfaces

In this installment of my Design Techniques column, I describe my process to understanding Java's interface. I talk about multiple inheritance and the diamond problem, polymorphism and dynamic binding, separation of interface...

The canonical object idiom

In this installment of the Design Techniques column, I propose "the canonical object" as a Java idiom. The article discusses the fundamental services that all objects in general should offer, shows how objects can offer these...

The 'event generator' idiom

In this installment of the Design Techniques column, Bill proposes the "event generator" as a Java idiom. The article provides a background on the concepts of patterns and idioms, describes the observer pattern, and demonstrates...

Design for thread safety

This installment of the Design Techniques column gives you design guidelines that pertain to thread safety. It provides a background on the concept of thread safety and shows several examples of objects that are and are not...

Designing with exceptions

This installment of the Design Techniques column discusses design guidelines that pertain to exceptions. It focuses primarily on how to decide when to use exceptions, and gives several examples from the Java API that illustrate...

Object finalization and cleanup

This installment of the Design Techniques column discusses the design guidelines that pertain to the end of an object's life. Columnist Bill Venners gives an overview of the rules of garbage collection, discusses finalizers, and...

What's a method to do?

In this installment of the Design Techniques column, brush up on how -- and why -- to divide a class's functionality among its methods. Ever the minimalist, Bill Venners demonstrates how to maximize method cohesion while keeping...

Designing fields and methods

This installment of the Design Techniques column shows how some fundamental software design techniques, like avoiding special data values and minimizing method coupling, apply to Java. (4,000 words)

Designing object initialization

This installment of the Design Techniques column begins with a quick look at object-design fundamentals, then goes on to discuss various approaches to designing initializers and constructors so as to facilitate the proper...

Introduction to "Design Techniques"

This first installment of the new Design Techniques column introduces the column and discusses the larger issues involved in designing Java programs. In addition, we'll examine the software development process in general, describe the...