objects, TransmissionLine objects, Load objects, and so on. Each of these subclasses may actually have their own subclasses descend from them. All PowerSystemObject instances share common attributes and methods. They each have an identifier by which system operators reference them. They each have a geographic location. They each have a status. They each can report their identifier, geographic location, and status to other objects that request such information from them but the manner in which they do so likely will differ among different classes. For example, suppose the method that reports a PowerSystemObject's identifier is called getIdentifier. When a Bus object communicates its status to another object it might add the string “Bus” before its identifier, whereas a Load object might add the string “Load”. Thus, the definition of getIdentifier for Bus objects differs from the definition of getIdentifier for Load objects. Interestingly, however, if one iterates through this collection using a generic PowerSystemObject reference and calls getIdentifier from the context of this reference, the computer will locate and invoke the version of getIdentifier that is specific to the actual type of the object being considered.