Re[7]: Immutable object
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.11.11 12:54
Оценка: 2 (1) -1
Здравствуйте, igna, Вы писали:

I>Здравствуйте, samius, Вы писали:


S>>Формально, samius это вывеска ...


I>Хорошо, формальная вывеска, ответь пожалуйста, какие из нижеприведенных идентификаторов i1, j1, i2 и j2 являются идентификаторами неизменяемых объектов?

Все являются.
Re[8]: Immutable object
От: Lloyd Россия  
Дата: 08.11.11 12:56
Оценка:
Здравствуйте, samius, Вы писали:

I>>Хорошо, формальная вывеска, ответь пожалуйста, какие из нижеприведенных идентификаторов i1, j1, i2 и j2 являются идентификаторами неизменяемых объектов?

S>Все являются.

Идентификатор все-таки не у объекта, а у переменной.
Re: Immutable object
От: jazzer Россия Skype: enerjazzer
Дата: 08.11.11 12:57
Оценка: 2 (1) +3
Здравствуйте, igna, Вы писали:

I>В статьях про "Immutable object" или про "Неизменяемый объект" в Википедии, во всех примерах речь идет о типах, все экземпляры которых неизменяемы, хотя согласно определениям данным в начале статей i в примере ниже является неизменяемым объектом:


I>
I>int const i = 123;
I>


I>Так ли это, можно ли назвать i здесь immutable?


Я не теоретик и определения из статей не читал, но если речь о С++, то, имхо, да, вполне себе immutable
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: Immutable object
От: igna Россия  
Дата: 08.11.11 13:04
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Это не подмена, это аналогия.


Ложная. Указатель, хоть в программировании, хоть дорожный никогда не имеет значения того, на что он указывает. А что означает имя, само себя или то, что оно именует, зависит от контекста.

L>Да, именно это там и написано.


Ты все-каки задумайся над тем, что ратуя за строгое различение между именем и тем, что оно именует, ты сам употребил имя Луна во втором значении, а не написал чего-либо вроде:

Палец указывающий на то, имя чего Луна, не есть то, имя чего Луна.

Re[3]: Immutable object
От: DorfDepp  
Дата: 08.11.11 13:05
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, DorfDepp, Вы писали:


DD>>Если его положить в обертку, т.е., внутрь класса, тогда он превратится в "Immutable object".


I>Кто "он", объект именуемый i со значением 123, или объект класса-обертки?


объект класса-обертки
Re[9]: Immutable object
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.11.11 13:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, samius, Вы писали:


I>>>Хорошо, формальная вывеска, ответь пожалуйста, какие из нижеприведенных идентификаторов i1, j1, i2 и j2 являются идентификаторами неизменяемых объектов?

S>>Все являются.

L>Идентификатор все-таки не у объекта, а у переменной.

Верно. Но язык не допускает засовываение в i1, j1, i2, j2 изменяемых объектов.

И все-таки в ООП нет понятия переменной. Но есть идентификаторы объектов, ссылки на объекты. Как идентификаторы объектов i1-j2 все идентифицируют незименяемые объекты, даже если переменные изменяемы.
Re[9]: Immutable object
От: Lloyd Россия  
Дата: 08.11.11 13:11
Оценка: 1 (1) -1 :)
Здравствуйте, igna, Вы писали:

I>Ложная. Указатель, хоть в программировании, хоть дорожный никогда не имеет значения того, на что он указывает.


Именно об этом и речь.

I>А что означает имя, само себя или то, что оно именует, зависит от контекста.


Имя никогда не означает "само себя".

L>>Да, именно это там и написано.


I>Ты все-каки задумайся над тем, что ратуя за строгое различение между именем и тем, что оно именует, ты сам употребил имя Луна во втором значении, а не написал чего-либо вроде:


Я не ратую за строгое различение.

I>

I>Палец указывающий на то, имя чего Луна, не есть то, имя чего Луна.


Это не до конца исправленная версия.

Нечто, именуемое "Палец", проиводящее действие, именуемое "указывание", в отношении того, имя чего Луна, не есть то, имя чего Луна.

Re[10]: Immutable object
От: igna Россия  
Дата: 08.11.11 13:13
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Имя никогда не означает "само себя".


Ну вот же в твоей цитате:

L>Палец указывающий на Луну, не есть Луна

Re[10]: Immutable object
От: igna Россия  
Дата: 08.11.11 13:16
Оценка:
Здравствуйте, samius, Вы писали:

S>И все-таки в ООП нет понятия переменной. Но есть идентификаторы объектов, ссылки на объекты. Как идентификаторы объектов i1-j2 все идентифицируют незименяемые объекты, даже если переменные изменяемы.


И после выполнения присваивания

i1 = 456;


i1 начинает идентифицировать другой объект?
Re[11]: Immutable object
От: Lloyd Россия  
Дата: 08.11.11 13:17
Оценка: :)
Здравствуйте, igna, Вы писали:

L>>Имя никогда не означает "само себя".


I>Ну вот же в твоей цитате:


I>

L>>Палец указывающий на Луну, не есть Луна


Для того, чтобы обозначить "Палец указывающий на Луну" одного его недостаточно, нужен другой палец, указываюший на "Палец указывающий на Луну". Или не палец.
Re[11]: Immutable object
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.11.11 13:19
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, samius, Вы писали:


S>>И все-таки в ООП нет понятия переменной. Но есть идентификаторы объектов, ссылки на объекты. Как идентификаторы объектов i1-j2 все идентифицируют незименяемые объекты, даже если переменные изменяемы.


I>И после выполнения присваивания


I>
I>i1 = 456;
I>


I>i1 начинает идентифицировать другой объект?

В терминах ООП — да. В терминах конкретного языка — i1 продолжит идентифицировать переменную, в которую положат новый объект.
Re[12]: Immutable object
От: igna Россия  
Дата: 08.11.11 13:33
Оценка:
Здравствуйте, samius, Вы писали:

S>В терминах ООП — да. В терминах конкретного языка — i1 продолжит идентифицировать переменную, в которую положат новый объект.


Что такое "положить объект в переменную", чем это отличается от "присвоить объект переменной"?
Re[3]: Immutable object
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 14:42
Оценка: -1
Здравствуйте, igna, Вы писали:

I>К объекту то есть (по крайней мере в C или C++, на котором пример, i является объектом).


В С даже понятия такого "объект" нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Immutable object
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 14:44
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

L>Для того, чтобы обозначить "Палец указывающий на Луну" одного его недостаточно, нужен другой палец, указываюший на "Палец указывающий на Луну". Или не палец.


Да, этот форум стал просто фиеричен. Такие флэймы с такими аллегориями, по такому, казалось бы, прозаичному вопросу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Immutable object
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 14:54
Оценка: 2 (1) -1
Здравствуйте, 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" не является объектом, а является константным значением (или его именем, если угодно).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Immutable object
От: igna Россия  
Дата: 08.11.11 15:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В С даже понятия такого "объект" нет.


Понятия может и нет, а объект есть:

3.14
1 object
region of data storage in the execution environment, the contents of which can represent
values

Re[5]: Immutable object
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 16:01
Оценка:
Здравствуйте, igna, Вы писали:

I>Понятия может и нет, а объект есть:


I>

I>3.14
I>1 object
I>region of data storage in the execution environment, the contents of which can represent
I>values


Объект неизменяемого типа по определению не изменяем. Но вот понятие неизменяемость не относится к объектам.

Более того, примитивные типы в дотнете не являются полноценными объектами, если они не забоксены. Правильным термином будет — "значение".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Immutable object
От: igna Россия  
Дата: 08.11.11 16:11
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Объект неизменяемого типа по определению не изменяем. Но вот понятие неизменяемость не относится к объектам.


По твоему immutable object есть сокращение для immutable type object?
Re[13]: Immutable object
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.11.11 18:18
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, samius, Вы писали:


S>>В терминах ООП — да. В терминах конкретного языка — i1 продолжит идентифицировать переменную, в которую положат новый объект.


I>Что такое "положить объект в переменную"

Это такая историческая глупость. Предки называли переменные rabyach1, rabyach2, что означало "рабочая ячейка". В эти ячейки "клали" значения. Но да, я подразумевал присваивание переменной значения.

I>чем это отличается от "присвоить объект переменной"?

Практически ничем. Оба выражения годятся для местечкового употребления, но верным все-таки будет являться "присваивание значения переменной". Хотя надо понимать, что за этим процессом может стоять вызов оператора присваивания/конструктора копирования, которые ничего о переменных не знают. Но в результате переменная получит новое значение.

Значения, точнее типы значений, могут быть иммутабельны сами по себе, а переменные сами по себе. И для того что бы отличать, что мы конкретно делаем, кладем в изменяемую переменную значение неизменяемого типа, или в неизменяемую переменную значение изменяемого типа, принято расставлять акценты об иммутабельности объекта/переменной.

Есть еще тонкость. Иммутабельность объекта определяется не его состоянием, а его наблюдаемым поведением. Например, следующий объект иммутабелен:
class Immutable
{
    int v_;
public:
    void Update() { v_++; }
};
Re[14]: Immutable object
От: igna Россия  
Дата: 09.11.11 04:56
Оценка:
Здравствуйте, samius, Вы писали:

S>Это такая историческая глупость. Предки называли переменные rabyach1, rabyach2, что означало "рабочая ячейка". В эти ячейки "клали" значения. Но да, я подразумевал присваивание переменной значения.


Ну то-то. А то начал с того, чем отличается переменная от ее имени, а кончил тем, что не удержал заданный самим собой уровень точности и формальности, и "наклал".

S>Практически ничем. Оба выражения годятся для местечкового употребления, но верным все-таки будет являться "присваивание значения переменной".


Ну слава богу! Так давай так и писать, а то я уж пытаюся приспособиться к твоему местечковому диалекту, и вот глагол заменил, а существительное оставил как в оригинале.

И кстати, в результате мы остались с переменными и значениями, куда вообще объекты-то делись, остались в местечковом диалекте? Может они и вовсе не нужны, достаточно переменных (и их имен, да ).

S>Значения, точнее типы значений, могут быть иммутабельны сами по себе, а переменные сами по себе. И для того что бы отличать, что мы конкретно делаем, кладем в изменяемую переменную значение неизменяемого типа, или в неизменяемую переменную значение изменяемого типа, принято расставлять акценты об иммутабельности объекта/переменной.


Все-таки ты опять "наклал".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.