Is component-based the same thing as object-based?
Not quite; and the distinction here is rather important. A component is a subsystem whose internal workings are hidden from the outside world. Systems or other subsystems are only allowed to interact with a component through the component’s interface. For a real world example, think of your VCR. The VCR’s interface consists of the buttons on the front: RECORD, PLAY, STOP, REWIND, etc. Press the PLAY button, and the tape inside begins to play. Press STOP, and it stops. Press REWIND, and… well, you get the idea. The buttons operate according to a set of rules. For example, the rule for the play button says: provided you give me a tape, pressing PLAY will play the tape. As a user of that component, you don’t need to understand how all the transistors and capacitors and what-not come together to make the tape play when you press the PLAY button. As long as the button does what it claims, you’re happy as pie. In the software world, a component is similar. Take, for example, a queue. In or