Hola Jonathan,
El constructor es mejor cuando se requiere inmutabilidad y un objeto completamente inicializado desde su creación. Ejemplo: Tu te creas una cuenta bancaria. Obviamente que esa cuenta estará asignada a tu nombre y a tu documento de identidad , sin posibilidad de cambiarla nunca mas. ¿Error humano? No debería o se asume que no existirá. ¿Cambiar la titularidad de una cuenta bancaria? Tampoco se puede.
Set: son utiles para inicialización tardía, flexibilidad en la configuración, o cuando se trabaja con frameworks que dependen de ellos.
Ejemplo: Estas haciendo un programa de facturación , tienes todos los datos pero tu cliente tiene múltiples direcciones. En casos como estos entra set.direccionCliente de esta manera inicializas la factura con algunos datos como ruc , razon social etc pero pones la direcciones despues.
Espero haberte aclarado el panorama. Si es así marca como solucionado.