Re[58]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.11 03:56
Оценка:
Здравствуйте, samius, Вы писали:
S>Не согласен.
S>Сравнение ссылок (при отсутствии оператора сравнения) дает нам ссылочную эквивалентность; вызов Equals дает нам эквивалентность по умолчанию; Comparison<T> дает нам любую другую эквивалентность. В то время как идентичность обусловлена идентичным поведением.
Не имеет смысла не соглашаться с определением. Идентичность специально определена отдельно от эквивалентности, и никакого отношения к идентичности поведения не имеет.
Идентичность обеспечивает нам возможность взаимодействовать с конкретным объектом.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[62]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.11 04:00
Оценка:
Здравствуйте, samius, Вы писали:

S>Если ты под идентичностью подразумеваешь возможность сказать что a1 и a2 это в точности тот же самый объект, занимающий ту же самую память, то identity с википедии точно не про это.

Слова про занимание памяти нужно выкинуть, а в остальном identity именно про это.
S>Надо сперва разобраться с тем, что подразумевать под identity, способ идентифицировать объект с точностью до экземпляра, либо с точностью до поведения. Вики говорит об поведении, допуская множество объектов с same identity.
Где именно вики говорит о множестве объектов с same identity? Нет такого.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[53]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.11 04:02
Оценка:
Здравствуйте, samius, Вы писали:
S>Если к отсутствию состояния добавить требование детерминированности, то у однотипных объектов поведение будет неотличимо, т.е. их идентичность не может быть опровергнута. А раз так — нет оснований их считать неидентичными. Это абсолютная аналогия объектам, расшаривающим общее состояние. Разница может быть выявлена лишь с помощью сравнения ссылок, что нельзя отнести к поведению объекта.

S>детерминированность достаточное требование, но не необходимое. Объект-обертку(без состояния) над статическим методом Console.ReadLine() можно считать идентичным другому такому же объекту.

Нет. Можно считать его эквивалентным. Идентичным считать его не получится — по определению идентичности. Идентичность позволяет всегда отличить объект от других объектов. Независимо от наличия или отсутствия состояния. И даже поведения.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[54]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.11 04:12
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Разве 2 объекта с одинаковым контрактом и без состояния можно как-то отличить?

Да, благодаря наличию identity.
Пример привели по соседству. На самом деле не нужен даже специальный класс:

var a = new object();
var b = new object();
var c = a;
Debug.Assert(a == c);
Debug.Assert(a != b);

Одинаковость контракта обеспечивается тем, что все объекты — одного класса.
Состояния у объектов нет. Проверить это утверждение можно следующим образом:
1. состояние объекта в ООП определяется по его поведению.
2. т.е. о различиях в состоянии объекта можно судить по различиям его реакции на различные сообщения
3. Какие бы вызовы мы ни выполняли на объектах a и b, их результаты всегда будут оставаться одними и теми же.
Формально тут есть некоторая сложность, связанная с тем, что мы делаем всеобщее утверждение, которое невозможно доказать никаким количеством примеров. Неформально мы поступим наоборот — выполним акт веры, примем утверждение за истинное, и подождём опровержения .
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[63]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.10.11 04:49
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


S>>Если ты под идентичностью подразумеваешь возможность сказать что a1 и a2 это в точности тот же самый объект, занимающий ту же самую память, то identity с википедии точно не про это.

S>Слова про занимание памяти нужно выкинуть, а в остальном identity именно про это.
S>>Надо сперва разобраться с тем, что подразумевать под identity, способ идентифицировать объект с точностью до экземпляра, либо с точностью до поведения. Вики говорит об поведении, допуская множество объектов с same identity.
S>Где именно вики говорит о множестве объектов с same identity? Нет такого.

http://en.wikipedia.org/wiki/Identity_(object-oriented_programming)#Consequences_of_identity
If the references do not compare equal, then it's not necessarily guaranteed that the identity of the objects behind those references is different.
The object identity of two objects of the same type is the same, if every change to either object is also a change to the other object.

Оба процитированных следствия подразумевают возможность существования различных объектов с same identity.
Re[54]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.10.11 04:52
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

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

S>>Если к отсутствию состояния добавить требование детерминированности, то у однотипных объектов поведение будет неотличимо, т.е. их идентичность не может быть опровергнута. А раз так — нет оснований их считать неидентичными. Это абсолютная аналогия объектам, расшаривающим общее состояние. Разница может быть выявлена лишь с помощью сравнения ссылок, что нельзя отнести к поведению объекта.

S>>детерминированность достаточное требование, но не необходимое. Объект-обертку(без состояния) над статическим методом Console.ReadLine() можно считать идентичным другому такому же объекту.

S>Нет. Можно считать его эквивалентным. Идентичным считать его не получится — по определению идентичности. Идентичность позволяет всегда отличить объект от других объектов. Независимо от наличия или отсутствия состояния. И даже поведения.
Следствия идентичности в вики допускают наличие объектов с same identity.
Re[55]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.10.11 04:59
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

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


L>>Разве 2 объекта с одинаковым контрактом и без состояния можно как-то отличить?

S>Да, благодаря наличию identity.
S>Пример привели по соседству. На самом деле не нужен даже специальный класс:

S>
S>var a = new object();
S>var b = new object();
S>var c = a;
S>Debug.Assert(a == c);
S>Debug.Assert(a != b);
S>

S>Одинаковость контракта обеспечивается тем, что все объекты — одного класса.
S>Состояния у объектов нет. Проверить это утверждение можно следующим образом:
S>1. состояние объекта в ООП определяется по его поведению.
S>2. т.е. о различиях в состоянии объекта можно судить по различиям его реакции на различные сообщения
получается что a и b имеют различные состояния, что неверно. Но неверно это потому, что некоторые методы (Equals) заточены не на состояние, а на ссылку на объект.

S>3. Какие бы вызовы мы ни выполняли на объектах a и b, их результаты всегда будут оставаться одними и теми же.

a.Equals(b) != a.Equals(a)

S>Формально тут есть некоторая сложность, связанная с тем, что мы делаем всеобщее утверждение, которое невозможно доказать никаким количеством примеров. Неформально мы поступим наоборот — выполним акт веры, примем утверждение за истинное, и подождём опровержения .

Тремя строчками выше.

Но еще раз, это все потому, что реализация Equals имеет зависимость не от состояния объекта, а от ссылки на него, которую мы договорились не считать состоянием.
Re[64]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.11 05:58
Оценка:
Здравствуйте, samius, Вы писали:

S>http://en.wikipedia.org/wiki/Identity_(object-oriented_programming)#Consequences_of_identity

S>If the references do not compare equal, then it's not necessarily guaranteed that the identity of the objects behind those references is different.
S>The object identity of two objects of the same type is the same, if every change to either object is also a change to the other object.

S>Оба процитированных следствия подразумевают возможность существования различных объектов с same identity.

Нет. Первый фрагмент просто говорит о том, что бывают различные ссылки на один и тот же объект — читайте внимательно.
Классический пример — указатели в сегментированной модели памяти, используемые в качестве ссылок. Там можно иметь два битово различных указателя в одно и то же место.
В большинстве практических случаев ссылки можно использовать в качестве критерия идентичности.

Второй фрагмент говорит о том, что все изменения, применяемые к "одному объекту" также отражаются и на "другом". С точки зрения реализации, это может применяться для, к примеру, работы в распределённой среде. С точки зрения математики, все эти "объекты" — один и тот же объект.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[65]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.10.11 06:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


S>>http://en.wikipedia.org/wiki/Identity_(object-oriented_programming)#Consequences_of_identity

S>>If the references do not compare equal, then it's not necessarily guaranteed that the identity of the objects behind those references is different.
S>>The object identity of two objects of the same type is the same, if every change to either object is also a change to the other object.

S>>Оба процитированных следствия подразумевают возможность существования различных объектов с same identity.

S>Нет. Первый фрагмент просто говорит о том, что бывают различные ссылки на один и тот же объект — читайте внимательно.
я считаю что там написано не об этом (см. ниже).

S>Классический пример — указатели в сегментированной модели памяти, используемые в качестве ссылок. Там можно иметь два битово различных указателя в одно и то же место.

S>В большинстве практических случаев ссылки можно использовать в качестве критерия идентичности.

S>Второй фрагмент говорит о том, что все изменения, применяемые к "одному объекту" также отражаются и на "другом". С точки зрения реализации, это может применяться для, к примеру, работы в распределённой среде. С точки зрения математики, все эти "объекты" — один и тот же объект.

Это различные объекты с same identity. Паттерн monostate работает и без распределенной среды.

Здесь описаны (но не определены формально) два понятия идентичности http://c2.com/cgi/wiki?ObjectIdentity, логическая и физическая.

There are two varieties of identity. There is internal identity, and there is external identity. Internal identity is logical identity. External identity is physical identity. Internal identity is independent of context. External identity is not.

A data tuple has a logical identity according to its value(s). We can copy it to different places. We can duplicate it as many times as we like. Yet at all times we can identify it, by its value. Since we identify it by its value, we can say that this identity is internal. Furthermore we can say that this identity is logical. It is independent of the physical context or representation. If it is duplicated then it is still the same object.

В вики описана именно логическая идентичность, я уверен в этом. Во всяком случае с точки зрения логической идентичности, описанное в вики не противоречит моему пониманию вики. А с точки зрения физической идентичности приходится в концептуальную модель вводить неравные ссылки на один объект, что бы написанное в вики было похоже на правду.

В отношении классических изменяемых объектов (не расшаривающих состояние) понятия логической и физической идентичности эквивалентны. Т.е. из одной вытекает другая и наоборот. Возможно по этой причине варианты идентичности не разделяют.
С неизменяемыми объектами логическая эквивалентность шире физической. Их невозможно отличить, не сравнивая физическое расположение или ссылки (которые не являются атрибутом объекта). Потому следует рассматривать изменяемые объекты и их идентичность как частный случай идентичности.
Re[8]: ООП головного мозга
От: Lloyd Россия  
Дата: 05.10.11 06:47
Оценка:
Здравствуйте, michael_isu, Вы писали:

L>>Потому что имеем разнесение данных и способов работы с ними. Может "процедурный" и не самое удачное слово, но вот "ООП" уж тут точно ни в какие ворота.


_>ООП — это только поведение. Данные там вообще ортогональны.


Читайте, читайте.
Re[62]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.10.11 06:51
Оценка:
Здравствуйте, samius, Вы писали:

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


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


S>>>Верно, а в ООП объекты идентифицируются по поведению.

G>>Нет, идентифицируемость объекта ортогонально поведению. Фактически возможность узнать являются ли два объекта идентичными (не путать с эквивалентностью). Свойство идентичности нельзя нарушить, в отличие от эквивалентности, которое может зависеть от состояния.
S>Если ты под идентичностью подразумеваешь возможность сказать что a1 и a2 это в точности тот же самый объект, занимающий ту же самую память, то identity с википедии точно не про это.

Я конкретно про современные языки и реализацию ООП в них.

S>>>Не получить, но это не делает ссылку атрибутом объекта. Тем более, что объект без ссылки в дотнете существовать может (недетерминированное время).

G>>Нет, может существовать память объекта, но не сам объект, потому что объект — identity+поведение. Если на объект нет ссылок, то фактически у него нет ни identity и нету способов получить поведение.
G>>Не стоит путать концептуальные вещи с деталями реализации. Ведь в .NET value-типы наследуются от Object, но это не значит что для каждого value-типа есть указатель на VMT.
S>Надо сперва разобраться с тем, что подразумевать под identity, способ идентифицировать объект с точностью до экземпляра, либо с точностью до поведения. Вики говорит об поведении, допуская множество объектов с same identity. Есть более компетентные источники с противоположным мнением?

Ты опять концепцию с реализацией путаешь. Может быть где-то и есть реализации где для идентичности не обязательно совпадение ссылок, но я таких не видел.



S>>>

S>>>If the references do not compare equal, then it's not necessarily guaranteed that the identity of the objects behind those references is different.
S>>>(http://en.wikipedia.org/wiki/Identity_%28object-oriented_programming%29)

S>>>т.е. согласно выделенному — из отсутствия равенства ссылок не следует различная идентифицируемость.
G>>Да, потому что это деталь реализации.
S>Это общая концепция.
Я неправильно выразился. Конкретная реализация работает на сравнении ссылок, других я не видел.

S>>>В том числе в C#.

G>>Нет, ты не можешь в C# получить пару объектов reference типа для которых object.ReferenceEquals(a,b) == true, но a.Equals(b) == false, если нормально реализован Equals. Более того гайдлайн требует чтобы реализация equals была такова что идентичные объекты будут эквивалентны. На это и опирается ООП.
S>ООП опирается на понятие identity. А Equals — это особенности реализации эквивалентности в дотнете.
S>Качество реализации Equals влияет на работу с этим объектом средствами фреймворка, но не влияет на концептуальные качества объекта, не относящиеся к платформе.

S>>>Если identity принимается за паспорт, то при разных паспортах мы получим разное identity. Из этого следует что экземпляры разные. Верно. Но из того что паспорта одинаковы не будет следовать что экземпляр один.

G>>Ну возьми SSN\СНИЛС, он не меняется.
S>Не имеет смысла обсуждать без согласования термина identity.
Indentity — возможность узнать что a1 и a2 — один и тот же объект, и это свойство не изменяется со временем. В отличие от эквивалентности двух разных объектов a1 и a2, когда a1.Equals(a2) зависит от состояния a1 и a2.

S>>>Это как если в дотнете взять две строки с одинаковым содержимым (пусть будут получены разным способом, что бы избежать скидки на интернирование). Поведение одинаково. о них говорят same identity, даже если ссылки будут отличаться.

G>>Где говорят? Ссылку дай что ли. То что на equal string говорят same identity не делает чести тому кто говорит.
S>Не знаю, где говорят, но я сделал такой вывод на основании статьи в вики.
То есть так только ты говоришь?

G>>И уж точно никак не влияет на соотношение identity и equal в ООП.

S>не влияет, т.к. между ними мало общего, учитывая то, что эквивалентность — понятие навесное. Никто не может мне запретить считать эквивалентными людей с одной фамилией при различном их поведении.
Да считай, твое дело. Главное чтобы идентичные объекты всегда были эквивалентны, тогда будет ООП.
Re[55]: ООП головного мозга
От: Lloyd Россия  
Дата: 05.10.11 06:55
Оценка: +1 :)
Здравствуйте, Sinclair, Вы писали:

S>Формально тут есть некоторая сложность, связанная с тем, что мы делаем всеобщее утверждение, которое невозможно доказать никаким количеством примеров. Неформально мы поступим наоборот — выполним акт веры, примем утверждение за истинное, и подождём опровержения .


Т.е. понятие ООП вдобавок еще и не фальсифицируемо и без веру сторонникам оного ну никак не обойтись?
Куда я попал? Вы хоть жертвоприношения не практикуете?
Re[55]: ООП головного мозга
От: Lloyd Россия  
Дата: 05.10.11 07:02
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Одинаковость контракта обеспечивается тем, что все объекты — одного класса.


Опа, а откуда еще классы нарисовались?

Я-то думал, мне заслуженно минусов наставили за то, что я обозвал ООП мутным, а тут сами радетели оного только подтверждают мои догадки.
Re[56]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.11 07:07
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Опа, а откуда еще классы нарисовались?
Оттуда, что пример — на C#. В терминах дотнета контракт объекта определяется классом, которому он принадлежит.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[57]: ООП головного мозга
От: Lloyd Россия  
Дата: 05.10.11 07:22
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

L>>Опа, а откуда еще классы нарисовались?
S>Оттуда, что пример — на C#. В терминах дотнета контракт объекта определяется классом, которому он принадлежит.

Хорошо, выкрутился.
А как будет выглядеть identity для COM-а, например? Там QueryInterface вполне может вернуть разные адреса.
Identity тут все еще будет применимо или же COM с ООП не совсем совместим?
Re[63]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.10.11 07:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


S>>Если ты под идентичностью подразумеваешь возможность сказать что a1 и a2 это в точности тот же самый объект, занимающий ту же самую память, то identity с википедии точно не про это.


G>Я конкретно про современные языки и реализацию ООП в них.

А я про концептуальную модель, которой современные языки не противоречат.

S>>Надо сперва разобраться с тем, что подразумевать под identity, способ идентифицировать объект с точностью до экземпляра, либо с точностью до поведения. Вики говорит об поведении, допуская множество объектов с same identity. Есть более компетентные источники с противоположным мнением?


G>Ты опять концепцию с реализацией путаешь. Может быть где-то и есть реализации где для идентичности не обязательно совпадение ссылок, но я таких не видел.

A reference contains the information that is necessary for the identity property to be realized in the programming language, and allows access to the object with the identity. (вики)

ссылка обеспечивает все что нужно, что бы обратится к объекту с identity. Но из этого не следует что из идентичности следует совпадение ссылок. По крайней мере для логической идентичности это не следует (http://c2.com/cgi/wiki?ObjectIdentity).

S>>>>т.е. согласно выделенному — из отсутствия равенства ссылок не следует различная идентифицируемость.

G>>>Да, потому что это деталь реализации.
S>>Это общая концепция.
G>Я неправильно выразился. Конкретная реализация работает на сравнении ссылок, других я не видел.
Из равенства ссылок следует same identity. Т.е. увидеть что объекты идентичны можно по равенству ссылок. Из неравенство ссылок неравенство identity следует лишь в частном случае — в случае изменяемых объектов.

S>>Не имеет смысла обсуждать без согласования термина identity.

G>Indentity — возможность узнать что a1 и a2 — один и тот же объект, и это свойство не изменяется со временем. В отличие от эквивалентности двух разных объектов a1 и a2, когда a1.Equals(a2) зависит от состояния a1 и a2.
Верно. Но http://c2.com/cgi/wiki?ObjectIdentity описывает два варианта — логическую и физическую identity. В вики описана логическая. Я о ней. Ты, похоже, о физической.

G>>>Где говорят? Ссылку дай что ли. То что на equal string говорят same identity не делает чести тому кто говорит.

S>>Не знаю, где говорят, но я сделал такой вывод на основании статьи в вики.
G>То есть так только ты говоришь?
Такая формулировка слишком сильная. Я не слышал, что бы кто-то еще так говорил. Но что так говорят я сделал вывод из написанного в вики. Переформулирую, что бы избежать неоднозначности в трактовке identity:
Разные экземпляры строки (в дотнете) с одинаковым содержимым (по Ordinal типу сравнения) будут обладать same logical identity. Иначе говоря, доказать что они отличны будет невозможно, не сравнивая физические адреса, ссылки, и не портя память.

S>>не влияет, т.к. между ними мало общего, учитывая то, что эквивалентность — понятие навесное. Никто не может мне запретить считать эквивалентными людей с одной фамилией при различном их поведении.

G>Да считай, твое дело. Главное чтобы идентичные объекты всегда были эквивалентны, тогда будет ООП.
Можно ссылку?
Вообще это не всегда выполняется. Из логической идентичности ссылочная эквивалентность не следует.
Re[64]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.10.11 08:03
Оценка:
Здравствуйте, samius, Вы писали:


S>ссылка обеспечивает все что нужно, что бы обратится к объекту с identity. Но из этого не следует что из идентичности следует совпадение ссылок. По крайней мере для логической идентичности это не следует (http://c2.com/cgi/wiki?ObjectIdentity).

Для конкретного языка — следует, можешь обратный пример привести? Я таких не знаю.

S>>>>>т.е. согласно выделенному — из отсутствия равенства ссылок не следует различная идентифицируемость.

G>>>>Да, потому что это деталь реализации.
S>>>Это общая концепция.
G>>Я неправильно выразился. Конкретная реализация работает на сравнении ссылок, других я не видел.
S>Из равенства ссылок следует same identity. Т.е. увидеть что объекты идентичны можно по равенству ссылок. Из неравенство ссылок неравенство identity следует лишь в частном случае — в случае изменяемых объектов.
Ты опять путаешь identity и equals.
Закрой вики и попробуй придумать что такое идентифицируемость и эквивалентность, и чем эти понятия отличаются.

S>>>Не имеет смысла обсуждать без согласования термина identity.

G>>Indentity — возможность узнать что a1 и a2 — один и тот же объект, и это свойство не изменяется со временем. В отличие от эквивалентности двух разных объектов a1 и a2, когда a1.Equals(a2) зависит от состояния a1 и a2.
S>Верно. Но http://c2.com/cgi/wiki?ObjectIdentity описывает два варианта — логическую и физическую identity. В вики описана логическая. Я о ней. Ты, похоже, о физической.
Физическая identity — это и есть идентичность (не меняется со временем), "логическая" identity — эквивалентность.
Проблема возникла из C++ и подобных языков. Там ссылка не является неотъемлимым атрибутом объекта и identity для объектов на стеке нет. Различное понимание идентичности в с++ и том же smalltalk привело к тому что понятия identity и equals перемешались.


G>>>>Где говорят? Ссылку дай что ли. То что на equal string говорят same identity не делает чести тому кто говорит.

S>>>Не знаю, где говорят, но я сделал такой вывод на основании статьи в вики.
G>>То есть так только ты говоришь?
S>Такая формулировка слишком сильная. Я не слышал, что бы кто-то еще так говорил. Но что так говорят я сделал вывод из написанного в вики. Переформулирую, что бы избежать неоднозначности в трактовке identity:
S>Разные экземпляры строки (в дотнете) с одинаковым содержимым (по Ordinal типу сравнения) будут обладать same logical identity. Иначе говоря, доказать что они отличны будет невозможно, не сравнивая физические адреса, ссылки, и не портя память.
Это называется эквивалентностью.

S>>>не влияет, т.к. между ними мало общего, учитывая то, что эквивалентность — понятие навесное. Никто не может мне запретить считать эквивалентными людей с одной фамилией при различном их поведении.

G>>Да считай, твое дело. Главное чтобы идентичные объекты всегда были эквивалентны, тогда будет ООП.
S>Можно ссылку?
На что?

S>Вообще это не всегда выполняется. Из логической идентичности ссылочная эквивалентность не следует.

Покажи пример.
Re[65]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.10.11 08:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

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



S>>ссылка обеспечивает все что нужно, что бы обратится к объекту с identity. Но из этого не следует что из идентичности следует совпадение ссылок. По крайней мере для логической идентичности это не следует (http://c2.com/cgi/wiki?ObjectIdentity).

G>Для конкретного языка — следует, можешь обратный пример привести? Я таких не знаю.
Для C# две строки с одинаковым содержимым.

S>>Из равенства ссылок следует same identity. Т.е. увидеть что объекты идентичны можно по равенству ссылок. Из неравенство ссылок неравенство identity следует лишь в частном случае — в случае изменяемых объектов.

G>Ты опять путаешь identity и equals.
G>Закрой вики и попробуй придумать что такое идентифицируемость и эквивалентность, и чем эти понятия отличаются.
Придумать я могу все что угодно, что приведет к проблеме при общении со мной. Мне важно знать что я под термином понимаю именно то, что понимают другие. Для этого я открываю вики и шарюсь по книжкам.

S>>>>Не имеет смысла обсуждать без согласования термина identity.

G>>>Indentity — возможность узнать что a1 и a2 — один и тот же объект, и это свойство не изменяется со временем. В отличие от эквивалентности двух разных объектов a1 и a2, когда a1.Equals(a2) зависит от состояния a1 и a2.
S>>Верно. Но http://c2.com/cgi/wiki?ObjectIdentity описывает два варианта — логическую и физическую identity. В вики описана логическая. Я о ней. Ты, похоже, о физической.
G>Физическая identity — это и есть идентичность (не меняется со временем), "логическая" identity — эквивалентность.
логическая идентичность и эквивалентность — это разные термины.
Ссылочная эквивалентность эквивалентна физической идентичности.
Структурная эквивалентность логической идентичности не экивалентна. Пример:
возмьмем объекты
class A { public string Name { get; set; } }
var a = new A { Name = "a"; }
var b = new A { Name = "a"; }

a и b структурно эквивалентны, но логически не идентичны, что можно увидеть, присвоив a.Name другое значение и обнаружив что в b.Name осталось прежнее значение.

G>Проблема возникла из C++ и подобных языков. Там ссылка не является неотъемлимым атрибутом объекта и identity для объектов на стеке нет. Различное понимание идентичности в с++ и том же smalltalk привело к тому что понятия identity и equals перемешались.

Я их отличаю, см. пример выше.

S>>Разные экземпляры строки (в дотнете) с одинаковым содержимым (по Ordinal типу сравнения) будут обладать same logical identity. Иначе говоря, доказать что они отличны будет невозможно, не сравнивая физические адреса, ссылки, и не портя память.

G>Это называется эквивалентностью.
см. пример выше.
Для строк доказать их логическую неидентичность невозможно.

G>>>Да считай, твое дело. Главное чтобы идентичные объекты всегда были эквивалентны, тогда будет ООП.

S>>Можно ссылку?
G>На что?
На то что для существования ООП нужно что бы идентичные объекты всегда были эквивалентны. Откуда это?

S>>Вообще это не всегда выполняется. Из логической идентичности ссылочная эквивалентность не следует.

G>Покажи пример.
пример с двумя строками равного содержимого.
Re[66]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.10.11 08:42
Оценка:
Здравствуйте, samius, Вы писали:

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


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



S>>>ссылка обеспечивает все что нужно, что бы обратится к объекту с identity. Но из этого не следует что из идентичности следует совпадение ссылок. По крайней мере для логической идентичности это не следует (http://c2.com/cgi/wiki?ObjectIdentity).

G>>Для конкретного языка — следует, можешь обратный пример привести? Я таких не знаю.
S>Для C# две строки с одинаковым содержимым.

Они эквивалентны, но не идентичны.

S>>>Из равенства ссылок следует same identity. Т.е. увидеть что объекты идентичны можно по равенству ссылок. Из неравенство ссылок неравенство identity следует лишь в частном случае — в случае изменяемых объектов.

G>>Ты опять путаешь identity и equals.
G>>Закрой вики и попробуй придумать что такое идентифицируемость и эквивалентность, и чем эти понятия отличаются.
S>Придумать я могу все что угодно, что приведет к проблеме при общении со мной. Мне важно знать что я под термином понимаю именно то, что понимают другие. Для этого я открываю вики и шарюсь по книжкам.
Тем не менее надо думать головой. Вики и книги пишут люди и им свойственно ошибаться.
Вот есть два понятия: эквивалентность и идентичность. Придумай им формальные определения (разные определения).

S>логическая идентичность и эквивалентность — это разные термины.

Чем разные?

S>Ссылочная эквивалентность эквивалентна физической идентичности.

S>Структурная эквивалентность логической идентичности не экивалентна. Пример:
S>возмьмем объекты
S>
S>class A { public string Name { get; set; } }
S>var a = new A { Name = "a"; }
S>var b = new A { Name = "a"; }
S>

S>a и b структурно эквивалентны, но логически не идентичны, что можно увидеть, присвоив a.Name другое значение и обнаружив что в b.Name осталось прежнее значение.
То что они "структурно эквивалентны" C# не знает, там нет такого понятия.
В данном случае Object.ReferenceEquals(a,b) == false и a.Equals(b) == false. Других формальных утверждений про данный код ты сделать не можешь.
Ты ничего не доказал.

G>>Проблема возникла из C++ и подобных языков. Там ссылка не является неотъемлимым атрибутом объекта и identity для объектов на стеке нет. Различное понимание идентичности в с++ и том же smalltalk привело к тому что понятия identity и equals перемешались.

S>Я их отличаю, см. пример выше.
Пример твой ничего не доказывает.

S>>>Разные экземпляры строки (в дотнете) с одинаковым содержимым (по Ordinal типу сравнения) будут обладать same logical identity. Иначе говоря, доказать что они отличны будет невозможно, не сравнивая физические адреса, ссылки, и не портя память.

G>>Это называется эквивалентностью.
S>см. пример выше.
S>Для строк доказать их логическую неидентичность невозможно.
Я не понимаю уже что такое логическая идентичность. Как она в языке выражается? Если никак, то её нет, или ты просто ошибся с понятием.

G>>>>Да считай, твое дело. Главное чтобы идентичные объекты всегда были эквивалентны, тогда будет ООП.

S>>>Можно ссылку?
G>>На что?
S>На то что для существования ООП нужно что бы идентичные объекты всегда были эквивалентны. Откуда это?
http://msdn.microsoft.com/en-us/library/system.object.equals.aspx
Для любого другого языка с возможность переопределить equals можно найти подобные правила.

S>>>Вообще это не всегда выполняется. Из логической идентичности ссылочная эквивалентность не следует.

G>>Покажи пример.
S>пример с двумя строками равного содержимого.
Они эквивалентны, но не идентичны.
Re[19]: ООП головного мозга
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.10.11 08:49
Оценка:
Здравствуйте, michael_isu, Вы писали:

S>>http://martinfowler.com/bliki/AnemicDomainModel.html

S>>

S>>The fundamental horror of this anti-pattern is that it's so contrary to the basic idea of object-oriented design; which is to combine data and process together. The anemic domain model is really just a procedural style design, exactly the kind of thing that object bigots like me (and Eric) have been fighting since our early days in Smalltalk.


_>У Фаулера каша в голове. Тоже начитался определений из википедии.


Дело не в Википедии, а в том, что для ООП начисто отсутствует общепринятая терминология и фундаментальная база. Классики ООП как минимум две — Симула и Алана Кея. Каждая из этих классик имеет развитие. По большому счету нет ни одного принципа ООП, который не вызывал бы бурных споров, взять тот же SRP.

Что касается "каши" у Фаулера, то его взгляды разделяет достаточно большая часть людей в этом топике и хотя бы по этому не все так однозначно
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.