Ok ... I probably got a little crazy to start with, trying to add strict typing right off the bat. So, let's start from the beginning.
An class needs to be able to do the following things:
- Define which attributes exist within any instance of the class. (This also needs to be able to pull in any attributes defined in any parent classes.)
- Create an instance of the class
- Values come explicitly, in attribute-value pairs
- Values come implicitly, from an object reference of the same class (or some parent class?)
- check to see if this instance of this class is identical to another instance of this class (or some parent class?)
- check to see if an attribute exists or not
- set the value of an attribute
- get the value of an attribute
Did I miss anything, from the highest level? Did I add something that shouldn't be there?