Overview

The basis of my coding style is one simple axiom: The easiest code to read is the code that is not there. Given any two programs that have the exact same functionality one with 1000 lines of code the other with 10,000 lines of code. The 1000 line program's code will be easier to read and maintain.

The advantages of less code in and of itself makes this axiom worth while, but I have discovered some consequences of continually trying to prune lines of code from an application. By simply trying to reduce lines of code a program is pushed towards towards optimal OO design and, in most cases, performs faster.

Classification

Java itself has perhaps 3 types of classes: class, abstract class and interface. In looking at my code, it seems that I have a number of different ways I make use of these 3 basic Java types. I'm not much for reading about computers and programming, so I have no idea whether I'm using certain well known patterns or not or what their names are if I am.

But, I'd like to develop some visual representations of the libraries here and I think it would be helpful to come up with a notation that represents each of the different types of objects. So, I would like to name, define and indicate a notation for each of the different types that I use. Hopefully, this will be helpful in reading the visual documentation of the libraries.

a class with only instance variables and accessors for those variables
a class that contains instance variables and methods.
an interface
an abstract class that is to be implemented by numerous peer classes
an abstract class that is not to be implemented and contains solely static methods, and no data
an abstract class that is not implemented and contains solely static variables and methods
a class that extends from Throwable

Interaction

There are a number of ways classes interact with one another. I'd like to come up with a concise, but visually meaningful representation of those interactions that isn't simply symbolic. This may be a difficult request, but I'll see how it goes. The following is a list of the types of interaction.

A extends B
A implements B
A contains B
A takes B as a parameter on one or more public methods
A returns B from one or more public methods