make the whole ShipDef construction read-only