ArcObjects is a development environment of the ArcGISfamily of applications. Using Visual Basic for Applications, C# or Java SDK for ArcGIS, it allows developers to extend these applications. ArcObjects is a library of COM components that build up the foundation of the Esri's ArcGIS platform. ArcObjects is written mostly in the C++ programming language. All the ArcGIS for Desktop applications are based on ArcObjects. Since ArcGIS is completely built on top of ArcObjects, you can make use of COM services and capabilities to fully customize and extend the ArcGIS platform —meaning that extending the ArcObjects data model can be done easily and with virtually all COM-compatible programming languages. COM enables components to be reused at a binary level. In other words, developers do not require access to the source code of ArcObjects in order to extend the ArcGIS platform. For this reason, an ArcObjects programmer can make use of any type inside the ArcObjects system without knowing the implementation details of the type. The developer only needs to know what the type is able to do. Because ArcObjects is based on the COM standard, you can easily work with it in conjunction with other COM objects and applications. As previously mentioned, the ArcGIS platform was built using ArcObjects types. In the world of ArcObjects, classes use interfaces to organize properties and methods. Put simply, classes inside ArcObjects use only COM interfaces to expose their public members and communicate with each other. When working with an ArcObjects COM class, you never work with the properties and methods of the class; rather, you always access its properties and methods via one of its implemented interfaces. As an example, when you instantiate an object, you can only use one interface. However, after instantiation, you can query for any other interface that is implemented by that object. This process is sometimes called a Query Interface. Classes in ArcObjects often have many interfaces.