Why was it necessary to create a separate class of uvm_seq_item_pull_port for use in the driver-sequencer handshake?

Hi,
My question is - why was it necessary to create a separate class of uvm_seq_item_pull_port for use in the driver-sequencer handshake? Could this functionality have been achieved by using ‘regular’ classes of ports, exports and imps? If not, what is the motivation for introducing this separate class? Thanks

In reply to dhrub1:
https://verificationacademy.com/forums/uvm/why-trynextitem-sequencer/port/etc-declared-task#reply-71774