//Accessor function to set what the robot will construct
 public void setWhatToAssemble(GuitarComponent whatToAssemble)
 {
     this.whatToAssemble = whatToAssemble;
     this.compositeIterator = new CompositeIterator(whatToAssemble.createIterator());
 }
 //Public constructor, names the robot and tells it what to assemble
 public Robot(String whichRobot, GuitarComponent whatToAssemble)
 {
     this.whichRobot = whichRobot;
     this.whatToAssemble = whatToAssemble;
     this.compositeIterator = new CompositeIterator(whatToAssemble.createIterator());
 }
 //Public constructor, takes an array of GuitarComponent objects as an argument
 public GuitarComponentIterator(GuitarComponent[] items)
 {
     this.items = items;
 }
 public override void add(GuitarComponent guitarComponent)
 {
     itemList.Add(guitarComponent);
 }
 //This isn't implemented, as these objects are atomic
 public override void add(GuitarComponent guitarComponent)
 {
     throw new NotImplementedException();
 }
 //These items must be implemented by all implementations, including GuitarItems
 //Function to add children to the node
 public abstract void add(GuitarComponent guitarComponent);