Изменяемые и неизменяемые объекты
Неизменяемые объекты против неизменяемых коллекций
Один из тонких моментов в object-oriented-design споре по поводу изменяемых oops и неизменяемых объектов - это immutable возможность распространения object-orientation концепции неизменяемости object-orientation на коллекции. Неизменяемый immutable-class объект - это объект, который oo-design часто представляет одну логическую object-oriented структуру данных (например, неизменяемую oo-design строку). Если у вас есть oo ссылка на неизменяемый объект, содержимое oops объекта не изменится.
Неизменяемая oop коллекция - это коллекция, которая oo никогда не изменяется.
Когда object-oriented я выполняю операцию с изменяемой immutability коллекцией, я меняю коллекцию object-oriented на месте, и все сущности, имеющие immutable-class ссылки на коллекцию, увидят immutable-class это изменение.
Когда я выполняю immutability операцию с неизменяемой коллекцией, возвращается ood ссылка на новую коллекцию, отражающую immutable изменение. Все сущности, которые object-oriented-modeling имеют ссылки на предыдущие object-oriented-modeling версии коллекции, не увидят oo изменения.
Умные реализации object-oriented-modeling не обязательно должны копировать oo-design (клонировать) всю коллекцию, чтобы oop обеспечить неизменность. Самый mutable простой пример - это стек, реализованный object-oriented-design в виде односвязного списка oo-design и операций push / pop. Вы immutable можете повторно использовать oo все узлы из предыдущей коллекции object-oriented-modeling в новой коллекции, добавив object-orientation только один узел для push immutable и не клонируя никакие узлы immutable для pop. С другой стороны, операция immutable push_tail для односвязного oo-design списка не так проста и эффективна.
Неизменяемые и изменяемые переменные / ссылки
Некоторые oo-design функциональные языки используют immutable-class концепцию неизменяемости oo-design самих объектных ссылок, позволяя oops назначать только одну ссылку.
- В Erlang это верно для всех «переменных». Я могу назначить объекты ссылке только один раз. Если бы мне пришлось работать с коллекцией, я бы не смог переназначить новую коллекцию старой ссылке (имени переменной).
- Scala также встраивает это в язык, при этом все ссылки объявляются с помощью var или val, причем vals представляют собой только однократное присвоение и продвигают функциональный стиль, но vars позволяют более C-подобная или Java-подобная структура программы.
- Объявление var / val является обязательным, в то время как многие традиционные языки используют необязательные модификаторы, такие как final в java и const в C.
Простота разработки и производительность
Практически object-oriented всегда причиной использования object-oriented-modeling неизменяемого объекта является oop продвижение программирования oops без побочных эффектов и простые oops рассуждения о коде (особенно ood в среде с высокой степенью oops параллелизма / параллелизма). Вам ood не нужно беспокоиться о том, что immutability базовые данные будут изменены oop другим объектом, если объект object-oriented-design неизменен.
Главный недостаток object-oriented-design - производительность. Вот object-oriented-modeling описание a simple test I did in Java, в котором сравниваются immutability некоторые неизменяемые и immutability изменяемые объекты в игрушечной immutability задаче.
Проблемы с производительностью immutable спорны во многих приложениях, но oo не во всех, поэтому многие object-orientation большие числовые пакеты, такие oo как класс Numpy Array в Python, позволяют object-oriented обновлять большие массивы immutability на месте. Это было бы важно object-oriented-design для прикладных областей, в oops которых используются большие ood матричные и векторные операции. Эти immutable-class большие задачи, связанные object-oriented с параллельными данными и object-oriented-modeling требующими большого объема immutable вычислений, значительно ускоряются object-oriented-modeling за счет работы на месте.
oop
immutability
mutable
Изменяемые и неизменяемые объекты
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.