У меня есть объект, который я передаю в вызове метода. Скажем, я использую язык, который позволяет передавать объекты только по ссылке, например, Java или PHP. Если метод вносит изменения в объект, это повлияет на вызывающего. Я не хочу, чтобы это случилось. Похоже, мне нужно сделать копию объекта.
Мой вопрос: кто несет ответственность за клонирование объекта? Вызывающий, прежде чем он вызывает метод? Или вызываемый, прежде чем он меняет объект?
РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я хочу, чтобы это было частью контракта этого метода - что он никогда не изменяет исходный объект. Так что, похоже, все зависит от способа сделать копию. Но тогда у вызывающей стороны нет защиты от метода, который не делает это должным образом. Я думаю, что это приемлемо - похоже, единственной альтернативой является то, что это встроено в язык.