Automation macros in UVM

What is the purpose of Automation macros in UVM, used as shown below :

class Packet extends uvm_transaction;

rand bit [7:0] da;
rand bit [7:0] sa;
rand bit [7:0] length;
rand bit [7:0] data;
rand byte fcs;

uvm_object_utils_begin(Packet) uvm_field_int(da, UVM_ALL_ON|UVM_NOPACK)
uvm_field_int(sa, UVM_ALL_ON|UVM_NOPACK) uvm_field_int(length, UVM_ALL_ON|UVM_NOPACK)
uvm_field_array_int(data, UVM_ALL_ON|UVM_NOPACK) uvm_field_int(fcs, UVM_ALL_ON|UVM_NOPACK)
`uvm_object_utils_end

endclass

In reply to Gokul S:

Please see this post. And note the strong recommendation to not use the field automation macros.

In reply to cgales:

Thanks.