answer:
I would create a class for registers, a class for each important combinational unit, such as adder, a class for bus, and a class for controller (a finite-state machine). Each of these classes would have a constructor indicating how many bits the item is, etc. For a finite-state machine, there would be a way to specify state-transition information as an array. Objects such as register and controller would have internal state. Stateless objects such as adder might be represented by static functions in the class.
I will give an example of the Register class:
class Register
{
int bits;
boolean contents[ ];
Register(int bits) // constructor
{
this.bits = bits;
}
void clear() // clear the register
{
for( int i = 0; i < bits; i++ )
contents[i] = false;
}
void set(boolean new_contents[]) // set the register contents
{
for( int i = 0; i < bits; i++ )
contents[i] = new_contents[i];
}
boolean[ ] value() // get the contents
{
boolean result = new boolean[bits];
for( int i = 0; i < bits; i++ )
result[i] = contents[i];
}
boolean shiftRight() // shift right one bit
{
boolean result = contents[0];
for( int i = 0; i < bits-1; i++ )
contents[i] = contents[i+1];
return result;
}
}