Why not using uvm_component for all verification components

Why dont we use uvm_component instead of uvm_driver, uvm_sequencer, uvm_test, uvm_monitor?

A number of classes derived from uvm_component like uvm_driver, uvm_sequencer, uvm_subscriber have class properties required for implementation. A few classes like uvm_test and uvm_monitor are just empty extensions of uvm_component.

At one time it was thought these classes might have some future functionality in their respective base classes, but they do help organize your testbench. For example, it becomes easy to show all your tests as being derived from uvm_test.