We chose C++ as a programming language because it enforced modularity, is widely known, and allows extensibility through derived classes.
In order to prevent invalid programs from being created, we decided to create a data typing system. This restriction, and our desired ease of genetic operations on programs, dictated that we use a tree structure for storing programs.
In creating an initial population, and in the following genetic operations, we must make sure that the data-typing is consistent.
For the system to be easily extensible to work with new models, a well-defined interface must exist.