In reply to Yehu:
It seems very unusual to use parameters for this. You cannot override a parameter value with the value form a variable, regardless of the type. You can use another parameter to override parameter.
class external_reference_model#(parameter string EXECUTEABLE_PAT
parameter int NUMBER_OF_INPUTS,
parameter int NUMBER_OF_OUTPUTS,
parameter qstring_t EXPECTED_OUT_FILES_NAMES;
parameter type TRANSACTION_TYPE=uvm_object,
parameter bit INPUT_DATA_W,
parameter bit OUTPUT_DATA_W
)extends uvm_component;
...
endclass
parameter qstring_t names_file_array = {"input1.txt","input2.txt","input3.txt","input4.txt"};
external_reference_model#(.EXPECTED_OUT_FILES_NAMES(names_file_array)) ext_obj;
But I think it would be much easier to use a variable for this and set it with the values you need after constructing it.