In reply to verif_learner:
Going into UVM base class library we would know how each OOP principal is used for different purpose, which I did not try my myself.
An OOP principal I liked is SRP(Single Responsibility Principal) as I’ve seen enough of testbenches where user adds all the responsibility to a single class which is sometimes harder to debug/reuse.
However I would like to know other practices that an user follows when creating testbench either keeping re-usability in mind or for ease of debug!