an abstract class containing pure virtual functions (forming together the interface)
a set of functions implemented by a component (such as a plug-in) and used by another component called the client
a strongly-typed contract between software components to provide a set of operations (methods)
a table of pointers to functions that implement the methods and properties