Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>Формально, samius это вывеска ...
I>Хорошо, формальная вывеска, ответь пожалуйста, какие из нижеприведенных идентификаторов i1, j1, i2 и j2 являются идентификаторами неизменяемых объектов?
Все являются.
Здравствуйте, igna, Вы писали:
I>В статьях про "Immutable object" или про "Неизменяемый объект" в Википедии, во всех примерах речь идет о типах, все экземпляры которых неизменяемы, хотя согласно определениям данным в начале статей i в примере ниже является неизменяемым объектом:
I>
I>int const i = 123;
I>
I>Так ли это, можно ли назвать i здесь immutable?
Я не теоретик и определения из статей не читал, но если речь о С++, то, имхо, да, вполне себе immutable
Здравствуйте, Lloyd, Вы писали:
L>Это не подмена, это аналогия.
Ложная. Указатель, хоть в программировании, хоть дорожный никогда не имеет значения того, на что он указывает. А что означает имя, само себя или то, что оно именует, зависит от контекста.
L>Да, именно это там и написано.
Ты все-каки задумайся над тем, что ратуя за строгое различение между именем и тем, что оно именует, ты сам употребил имя Луна во втором значении, а не написал чего-либо вроде:
Палец указывающий на то, имя чего Луна, не есть то, имя чего Луна.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, DorfDepp, Вы писали:
DD>>Если его положить в обертку, т.е., внутрь класса, тогда он превратится в "Immutable object".
I>Кто "он", объект именуемый i со значением 123, или объект класса-обертки?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
I>>>Хорошо, формальная вывеска, ответь пожалуйста, какие из нижеприведенных идентификаторов i1, j1, i2 и j2 являются идентификаторами неизменяемых объектов? S>>Все являются.
L>Идентификатор все-таки не у объекта, а у переменной.
Верно. Но язык не допускает засовываение в i1, j1, i2, j2 изменяемых объектов.
И все-таки в ООП нет понятия переменной. Но есть идентификаторы объектов, ссылки на объекты. Как идентификаторы объектов i1-j2 все идентифицируют незименяемые объекты, даже если переменные изменяемы.
Здравствуйте, igna, Вы писали:
I>Ложная. Указатель, хоть в программировании, хоть дорожный никогда не имеет значения того, на что он указывает.
Именно об этом и речь.
I>А что означает имя, само себя или то, что оно именует, зависит от контекста.
Имя никогда не означает "само себя".
L>>Да, именно это там и написано.
I>Ты все-каки задумайся над тем, что ратуя за строгое различение между именем и тем, что оно именует, ты сам употребил имя Луна во втором значении, а не написал чего-либо вроде:
Я не ратую за строгое различение.
I>
I>Палец указывающий на то, имя чего Луна, не есть то, имя чего Луна.
Это не до конца исправленная версия.
Нечто, именуемое "Палец", проиводящее действие, именуемое "указывание", в отношении того, имя чего Луна, не есть то, имя чего Луна.
Здравствуйте, samius, Вы писали:
S>И все-таки в ООП нет понятия переменной. Но есть идентификаторы объектов, ссылки на объекты. Как идентификаторы объектов i1-j2 все идентифицируют незименяемые объекты, даже если переменные изменяемы.
Здравствуйте, igna, Вы писали:
L>>Имя никогда не означает "само себя".
I>Ну вот же в твоей цитате:
I>
L>>Палец указывающий на Луну, не есть Луна
Для того, чтобы обозначить "Палец указывающий на Луну" одного его недостаточно, нужен другой палец, указываюший на "Палец указывающий на Луну". Или не палец.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>И все-таки в ООП нет понятия переменной. Но есть идентификаторы объектов, ссылки на объекты. Как идентификаторы объектов i1-j2 все идентифицируют незименяемые объекты, даже если переменные изменяемы.
I>И после выполнения присваивания
I>
I>i1 = 456;
I>
I>i1 начинает идентифицировать другой объект?
В терминах ООП — да. В терминах конкретного языка — i1 продолжит идентифицировать переменную, в которую положат новый объект.
Здравствуйте, samius, Вы писали:
S>В терминах ООП — да. В терминах конкретного языка — i1 продолжит идентифицировать переменную, в которую положат новый объект.
Что такое "положить объект в переменную", чем это отличается от "присвоить объект переменной"?
Здравствуйте, Lloyd, Вы писали:
L>Для того, чтобы обозначить "Палец указывающий на Луну" одного его недостаточно, нужен другой палец, указываюший на "Палец указывающий на Луну". Или не палец.
Да, этот форум стал просто фиеричен. Такие флэймы с такими аллегориями, по такому, казалось бы, прозаичному вопросу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, igna, Вы писали:
I>В статьях про "Immutable object" или про "Неизменяемый объект" в Википедии, во всех примерах речь идет о типах, все экземпляры которых неизменяемы, хотя согласно определениям данным в начале статей i в примере ниже является неизменяемым объектом:
I>
I>int const i = 123;
I>
I>Так ли это, можно ли назвать i здесь immutable?
Нужно детерминировать понятия "объект". Речь идет об экземпляре типа (т.е. объекте в терминах ООП), просто о некой сущности или еще о чем-то. Приведенный пример выдает своим синтаксисом тот факт, что речь идет о C#. Так что будем понимать под объектом — экземпляр некоторого типа в C#.
В такой постановке вопрос является некорректным, Так как:
1. В C# нет средств обеспечения неизменяемости для отдельных объектов.
2. Описанное выражение является константой, а константы в C# заменяются их значениями в местах применения.
Правильно будет говорить о неизменяемых типах. Неизменяемым типом являются любой тип значение полей экземпляра которого нельзя изменить после создания экзепляра.
Все встроенные типы (за исключением грязных хаков, которые не стоит брать в рассчет) обладают этим свойством хотя бы потому, что не имеют ни одного поля (являются встроенными). Исключением является тип string. Но для него незменяемость гарантируется спецификацией и обеспечивается реализацией.
Таким образом ответ таков. "int const i = 123" не является объектом, а является константным значением (или его именем, если угодно).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>В терминах ООП — да. В терминах конкретного языка — i1 продолжит идентифицировать переменную, в которую положат новый объект.
I>Что такое "положить объект в переменную"
Это такая историческая глупость. Предки называли переменные rabyach1, rabyach2, что означало "рабочая ячейка". В эти ячейки "клали" значения. Но да, я подразумевал присваивание переменной значения.
I>чем это отличается от "присвоить объект переменной"?
Практически ничем. Оба выражения годятся для местечкового употребления, но верным все-таки будет являться "присваивание значения переменной". Хотя надо понимать, что за этим процессом может стоять вызов оператора присваивания/конструктора копирования, которые ничего о переменных не знают. Но в результате переменная получит новое значение.
Значения, точнее типы значений, могут быть иммутабельны сами по себе, а переменные сами по себе. И для того что бы отличать, что мы конкретно делаем, кладем в изменяемую переменную значение неизменяемого типа, или в неизменяемую переменную значение изменяемого типа, принято расставлять акценты об иммутабельности объекта/переменной.
Есть еще тонкость. Иммутабельность объекта определяется не его состоянием, а его наблюдаемым поведением. Например, следующий объект иммутабелен:
class Immutable
{
int v_;
public:
void Update() { v_++; }
};
Здравствуйте, samius, Вы писали:
S>Это такая историческая глупость. Предки называли переменные rabyach1, rabyach2, что означало "рабочая ячейка". В эти ячейки "клали" значения. Но да, я подразумевал присваивание переменной значения.
Ну то-то. А то начал с того, чем отличается переменная от ее имени, а кончил тем, что не удержал заданный самим собой уровень точности и формальности, и "наклал".
S>Практически ничем. Оба выражения годятся для местечкового употребления, но верным все-таки будет являться "присваивание значения переменной".
Ну слава богу! Так давай так и писать, а то я уж пытаюся приспособиться к твоему местечковому диалекту, и вот глагол заменил, а существительное оставил как в оригинале.
И кстати, в результате мы остались с переменными и значениями, куда вообще объекты-то делись, остались в местечковом диалекте? Может они и вовсе не нужны, достаточно переменных (и их имен, да ).
S>Значения, точнее типы значений, могут быть иммутабельны сами по себе, а переменные сами по себе. И для того что бы отличать, что мы конкретно делаем, кладем в изменяемую переменную значение неизменяемого типа, или в неизменяемую переменную значение изменяемого типа, принято расставлять акценты об иммутабельности объекта/переменной.