I think it is a good idea to have a generic class of some sort I am not sure whether I should create a class for to represent "a set of similar models" or whether to treat models separately My goal is to create an appropriate class based on model number. What could be a good class decomposition?
Quick Short Answer
"God Class" is a good idea, that is already used by others. Sometimes, "A class for represent a set of similar models" applies, sometimes "model number" applies.
Long Extended Boring Answer
Contrary to what many people do, one way to design a clas hierarchy, is not to have any hierarchy at all, and start with several independent classes.
Check which features does the classes share, as properties, what operations does, and how operations are done.
Another, thing to consider, is that some values, that are shared by several classes, maybe computed, and some not.
That is a way to detect fields from properties.
Figure 1, shows a U.M.L. class diagram, with 3 non related classes.
.............................. ..+------------------------+.. ..| None: Model10Class |.. ..+------------------------+.. ..| [+] string: ModelName; |.. ..| [+] float: Weight; |.. ..| [+] FSize: Size; |.. ..| [+] ColorType: Color; |.. ..| [+] ... |.. ..+------------------------+.. ..| [+] void: Function1; |.. ..| [+] ... |.. ..+------------------------+.. .............................. ..+------------------------+.. ..| None: Model20Class |.. ..+------------------------+.. ..| [+] string: ModelName; |.. ..| [+] float: Weight; |.. ..| [+] FSize: Size; |.. ..| [+] ColorType: Color; |.. ..| [+] ... |.. ..+------------------------+.. ..| [+] void: Function1; |.. ..| [+] void: Function2; |.. ..| [+] ... |.. ..+------------------------+.. .............................. ..+------------------------+.. ..| None: Model30Class |.. ..+------------------------+.. ..| [+] string: ModelName; |.. ..| [+] float: Weight; |.. ..| [+] FSize: Size; |.. ..| [+] ColorType: Color; |.. ..| [+] ... |.. ..+------------------------+.. ..| [+] void: Function1; |.. ..| [+] void: Function2; |.. ..| [+] void: Function3; |.. ..| [+] ... |.. ..+------------------------+.. ..............................
Since, "ModelName", "Weight", "Size", and "Function1" are shared by all classes, lets generate a new base class with those members, and, subclass the previous classes from it.
The "..." means maybe there are, or not, other members, shared or not by other classes.
Figure 2, shows a U.M.L. class diagram, where a base class was extracted from the 3 classes.
..+------------------------+.. ..| None: ProductClass |.. ..+------------------------+.. ..| [+] string: ModelName; |.. ..| [+] float: Weight; |.. ..| [+] FSize: Size; |.. ..| [+] ColorType: Color; |.. ..+------------------------+.. ..| [+] void: Function1; |.. ..+------------------------+.. .............................. ..+------------------------+.. ..| None: Model10Class |.. ..+------------------------+.. ..| [+] ... |.. ..+------------------------+.. ..| [+] ... |.. ..+------------------------+.. .............................. ..+------------------------+.. ..| None: Model20Class |.. ..+------------------------+.. ..| [+] ... |.. ..+------------------------+.. ..| [+] ... |.. ..| [+] void: Function2; |.. ..+------------------------+.. .................................. ..+----------------------------+.. ..| Model20Class: Model30Class |.. ..+----------------------------+.. ..| [+] ... |.. ..+----------------------------+.. ..| [+] ... |.. ..| [+] void: Function3; |.. ..+----------------------------+.. ..................................
Note, that "Model30" also has the same members than "Model20".
[under construction]
...