Basically, what we're saying is that a component is a pre-compiled group of objects. Some of these objects can be used by client programs, while others may be hidden from the outside world, available for use only within the component itself. In many ways, a component is like a small application, but one that makes its functionality available for use by other applications.
Earlier, we discussed object interfaces and how they are made up of the object's Public
properties, methods, and events. Since a component is really a group of objects, the component's interface is made up of its public objects.
Of course, this implies that there is a way to indicate which of our objects are to be public and which are private. There's no real analog to this concept within traditional object-oriented design.
Object-oriented design always assumes that any object can interact with any other object within our application. Component-oriented design gives us greater control, since we can choose which of our component's objects are available for use by other applications: