Introduction to "Design Techniques"
At last year's JavaOne conference, I attended a session in which the speaker talked about Sun's plan for the Java virtual machine (JVM). In this talk, the speaker stated that Sun planned, among other...
View ArticleDesigning object initialization
With this installment of Design Techniques, I begin a series of articles that will focus on the design of classes and objects. In this series I will discuss the following: designing classes for proper...
View ArticleDesigning fields and methods
This month's installment of Design Techniques is the second in a mini-series of columns about designing objects. In last month's column, which covered designing objects for proper initialization, I...
View ArticleWhat's a method to do?
In last month's Design Techniques column, I told half of the method design story: minimizing method coupling. In this month's installment, I'll reveal the other half of the story: maximizing method...
View ArticleObject finalization and cleanup
Three months ago, I began a mini-series of articles about designing objects with a discussion of design principles that focused on proper initialization at the beginning of an object's life. In this...
View ArticleDesigning with exceptions
Five months ago, I began a mini-series of articles about designing objects. In this Design Techniques article, I'll continue that series by looking at design principles that concern error reporting and...
View ArticleDesign for thread safety
Six months ago I began a series of articles about designing classes and objects. In this month's Design Techniques column, I'll continue that series by looking at design principles that concern thread...
View ArticleThe 'event generator' idiom
In January, I began a long series of articles about designing classes and objects. In this month's Design Techniques article, I'll continue that series but with a different approach. Up to now I have...
View ArticleThe canonical object idiom
In last month's installment of Design Techniques, I proposed the "event generator" as a Java idiom. This month I will propose another idiom, which I am calling the "canonical object."I call this object...
View ArticleInheritance versus composition: Which one should you choose?
One of the fundamental activities of an object-oriented design is establishing relationships between classes. Two fundamental ways to relate classes are inheritance and composition. Although the...
View ArticleDesigning with interfaces
One of the fundamental activities of any software system design is defining the interfaces between the components of the system. Because Java's interface construct allows you to define an abstract...
View ArticleDesign with dynamic extension
At the Second Annual JavaOne Developer Conference in 1997, I met a programmer from Mexico named Gerardo Horvilleur. Gerardo had created a product that he was publicizing from a booth on the convention...
View ArticleDesign with runtime class information
One of the cool things about Java's object model is that Java objects are "conscious": given a reference to an object, you can get information about that object's class. This "runtime class...
View ArticleDesign with static members
Although Java is object-oriented to a great extent, it is not a pure object-oriented language. One of the reasons Java is not purely object-oriented is that not everything in it is an object. For...
View ArticleFarewell to 'Design Techniques'
After 14 months of writing the Design Techniques column, the time has come for me to bring the column to a close. I'm saying farewell -- for a while.In this final installment of Design Techniques, I...
View Article