Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>Это не проблемы концепции. Допустим, в некой реализации ссылки нельзя сравнивать. Ты скажешь что это не ООП на том основании что в известных тебе реализациях это не так?
S>Если в этой реализации не предложен другой способ получения идентити объекта, то я таки скажу, что это — не ООП.
Из вики:
A reference can be used to refer to an object with a specific identity. 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. A type of a target of a reference is a role.
Здесь не сказано что должен быть способ получения идентити объекта. Здесь сказано что ссылка может быть использована для доступа к объекту со специфичной идентити.
Здравствуйте, samius, Вы писали:
S>Вот из вики. S>
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.
Ну и в каком из этих двух мест по-вашему ошибка?
Ваш подход мне вообще очень нравится. Вот написано определение, которое всем понятно и однозначно. Но вас оно не устраивает, вы начинаете искать всякие комментарии и следствия из него, в поисках фразы, которую можно проинтерпретировать по-другому. Зачем?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали:
S>>При этом ID(o1) == ID(o2) тогда и только тогда, когда o1 и o2 обозначают один и тот же объект. S>Откуда это следует? Именно про один и тот же объект.
Из определения. Перечитайте его ещё раз: идентичность — свойство объекта, позволяющее отличить его от всех других объектов, независимо от их состояния и поведения.
S>В программе на C++ можно отправить сообщение объекту, обозначенному идентификатором o1 без ссылки.
Нет.
S>Я неверно ответил по поводу разных. У разных объектов ссылки разные. Но то что у двух идентичных объектов ссылки разные — неочевидно. И не вытекает из определения идентичности.
Этого никто не утверждал.
S>В ECMA собственное определение идентичности. Я не вижу его соответсвия или даже похожести на определение идентичности в ООП.
Странно, а я — вижу. Требованиям, предъявляемым к идентичности в ООП, ECMA-шное удовлетворяет.
S>Тогда эквивалентность поведение это не то же, что логическая эквивалентность.
Значит, вам ещё предстоит придумать определение логической эквивалентности. Как мы только что выяснили, эквивалентность поведения — это не она.
S>Я именно про поведение. Если в контракте объекта сказано что когда мы вызовем SetValue(42), то после этого будем получать GetValue() == 42, то это такое свойство поведения, по которому мы его сможем отличить от объектов, для которых мы не вызывали SetValue(42). S>Определение идентичности не указыват о том, что свойства, отличающие объекты есть именно ссылки/адреса/хэндлы и т.п. Значит может быть что-то еще, что их отличает. Я подразумеваю что это может быть наблюдаемое поведение.
Вы копаете не в ту сторону. По определению идентичности, она должна работать независимо от поведения.
S>Не неправильное, а не такое как у участников дискуссии.
Да-да. Весь мир идёт не в ногу.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали:
S>Здесь не сказано что должен быть способ получения идентити объекта. Здесь сказано что ссылка может быть использована для доступа к объекту со специфичной идентити.
Здесь — не сказано. Но есть определение идентити, и есть требование наличия такой идентити в определении того, что такое ООП.
Не нужно читать бесчисленные возможные следствия из различных реализаций идентити для того, чтобы понять, что если нет идентити — то нет и ООП. Чего ещё нужно-то?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>Вот из вики. S>>
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>Ну и в каком из этих двух мест по-вашему ошибка?
Вы же утверждаете что здесь ошибка. Я привел пример объектов одного типа, шарящих состояние, которые попадают под эту формулировку.
S>Ваш подход мне вообще очень нравится. Вот написано определение, которое всем понятно и однозначно.
Значит не всем оно поянтно. S>Но вас оно не устраивает, вы начинаете искать всякие комментарии и следствия из него, в поисках фразы, которую можно проинтерпретировать по-другому. Зачем?
Затем что я могу привести пример двух различных объектов с same identity. Что я деалю не так?
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>>При этом ID(o1) == ID(o2) тогда и только тогда, когда o1 и o2 обозначают один и тот же объект. S>>Откуда это следует? Именно про один и тот же объект. S>Из определения. Перечитайте его ещё раз: идентичность — свойство объекта, позволяющее отличить его от всех других объектов, независимо от их состояния и поведения.
Помните, пол года назад вы утверждали что у неизменяемых объектов нет идентичности? А я пытался докопаться, что отнимает у них идентичность?
S>>В программе на C++ можно отправить сообщение объекту, обозначенному идентификатором o1 без ссылки. S>Нет.
MyObj obj; obj.Foo();
Где здесь ссылка?
S>>Я неверно ответил по поводу разных. У разных объектов ссылки разные. Но то что у двух идентичных объектов ссылки разные — неочевидно. И не вытекает из определения идентичности. S>Этого никто не утверждал.
Отлично
S>>В ECMA собственное определение идентичности. Я не вижу его соответсвия или даже похожести на определение идентичности в ООП. S>Странно, а я — вижу. Требованиям, предъявляемым к идентичности в ООП, ECMA-шное удовлетворяет.
Оно как минимум выпадает из него (в вашей трактовке) в контексте value-объектов, т.к. допускает существование двух различных объектов same identity. А значит не может быть использовано для того что бы отличить один объект от всех остальных.
S>>Тогда эквивалентность поведение это не то же, что логическая эквивалентность. S>Значит, вам ещё предстоит придумать определение логической эквивалентности. Как мы только что выяснили, эквивалентность поведения — это не она.
Это срочно?
S>>Я именно про поведение. Если в контракте объекта сказано что когда мы вызовем SetValue(42), то после этого будем получать GetValue() == 42, то это такое свойство поведения, по которому мы его сможем отличить от объектов, для которых мы не вызывали SetValue(42). S>>Определение идентичности не указыват о том, что свойства, отличающие объекты есть именно ссылки/адреса/хэндлы и т.п. Значит может быть что-то еще, что их отличает. Я подразумеваю что это может быть наблюдаемое поведение. S>Вы копаете не в ту сторону. По определению идентичности, она должна работать независимо от поведения.
В некоторых источниках сказано что изменение объекта не приводит к изменению его идентичности. Это тоже можно трактовать как независимость идентичности от состояния и поведения.
S>>Не неправильное, а не такое как у участников дискуссии. S>Да-да. Весь мир идёт не в ногу.
Ваше понимание идентичности тоже какое-то не такое. Почему у иммутабельных объектов нет идентичности? Откуда это вытекает? Только не надо вспоминать семантику value-объектов В определении идентичности о ней нет упоминания.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>От всех с другой идентичностью. S>Это вы додумываете. В определениях такого нет.
Да, додумываю.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>Здесь не сказано что должен быть способ получения идентити объекта. Здесь сказано что ссылка может быть использована для доступа к объекту со специфичной идентити. S>Здесь — не сказано. Но есть определение идентити, и есть требование наличия такой идентити в определении того, что такое ООП.
Identity — это такая функция ID: obj->(?), переводящая объект или ссылку в неизвестно что, что можно сравнить. Нигде не написано что это неизвестно что (?) не может иметь связи с поведением. Вот я и предлагаю использовать область значений, завязанную на наблюдаемое поведение. Что не так? S>Не нужно читать бесчисленные возможные следствия из различных реализаций идентити для того, чтобы понять, что если нет идентити — то нет и ООП. Чего ещё нужно-то?
identity есть.
Здравствуйте, samius, Вы писали:
S>Вы же утверждаете что здесь ошибка. Я привел пример объектов одного типа, шарящих состояние, которые попадают под эту формулировку.
Но они не попадают под формулировку из вашей предыдущей цитаты. Очевидно, в какой-то из цитат перепутаны местами причина и следствие. Как вы думаете, в какой?
Я считаю — что в той, которая следует из определения. Цитата википедии, очевидно, из википедийного же определения не следует.
S>Затем что я могу привести пример двух различных объектов с same identity. Что я деалю не так?
Вы не так понимаете смысл термина identity. Разве это не очевидно?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали: S>Помните, пол года назад вы утверждали что у неизменяемых объектов нет идентичности? А я пытался докопаться, что отнимает у них идентичность? S>>>В программе на C++ можно отправить сообщение объекту, обозначенному идентификатором o1 без ссылки. S>>Нет. S>MyObj obj; obj.Foo(); S>Где здесь ссылка?
obj. Вы же ещё помните, что ссылка — это не адрес? S>Оно как минимум выпадает из него (в вашей трактовке) в контексте value-объектов, т.к. допускает существование двух различных объектов same identity. А значит не может быть использовано для того что бы отличить один объект от всех остальных.
Ещё раз напомню, что value-типы дотнета не попадают в классическое ООП.
S>>Вы копаете не в ту сторону. По определению идентичности, она должна работать независимо от поведения. S>В некоторых источниках сказано что изменение объекта не приводит к изменению его идентичности. Это тоже можно трактовать как независимость идентичности от состояния и поведения.
Ну, и замечательно. В чём вопрос-то? В том, как правильно пользоваться формальной логикой? Поясню: если есть какое-то следствие из идентичности, справедливое также для какого-то другого отношения, это не означает, что это другое отношение тоже можно использовать для идентичности.
S>Ваше понимание идентичности тоже какое-то не такое. Почему у иммутабельных объектов нет идентичности? Откуда это вытекает? Только не надо вспоминать семантику value-объектов В определении идентичности о ней нет упоминания.
Хорошо, вы правы. У immutable-объектов есть идентичность, если это объекты в смысле ООП.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>Вы же утверждаете что здесь ошибка. Я привел пример объектов одного типа, шарящих состояние, которые попадают под эту формулировку. S>Но они не попадают под формулировку из вашей предыдущей цитаты. Очевидно, в какой-то из цитат перепутаны местами причина и следствие. Как вы думаете, в какой? 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.
надо поменять причину и следствие? Но тогда мы получим что-то не совсем осмысленное.
IF object identity of two objects of the same type is the same, THEN every change to either object is also a change to the other object.
Для чего здесь уточнение same type? Что бы мы не взяли объекты с same identity но разного типа? Если забить на эту неувязку с same type, то в остальном — вполне осмысленная и верифицируемая фраза. Если бы она была в таком виде в википедии я бы не удивился.
S>>Затем что я могу привести пример двух различных объектов с same identity. Что я деалю не так? S>Вы не так понимаете смысл термина identity. Разве это не очевидно?
Я вижу что я понимаю смысл термина не так как остальные на этом форуме. Это для меня очевидно.
Здравствуйте, samius, Вы писали: S>Identity — это такая функция ID: obj->(?), переводящая объект или ссылку в неизвестно что, что можно сравнить. S>Нигде не написано что это неизвестно что (?) не может иметь связи с поведением.
Написано. Но вам это читать неинтересно. Вы предпочитаете читать между строк и мелким шрифтом, напрочь игнорируя всё остальное.
S>Вот я и предлагаю использовать область значений, завязанную на наблюдаемое поведение. Что не так?
Как что?
1. Ваше предложение не вполне соответствует определению, которое требует от идентичности независимости от состояния и поведения. В частности, такое определение требует наличия идентичности даже у объектов без поведения совсем.
2. Ваше предложение противоречит определению, которое требует от идентичности возможности различать разные объекты. Тем не менее, вы упорно приводите примеры, когда ваше определение идентичности приводит к неразличимости разных объектов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали: S>>Помните, пол года назад вы утверждали что у неизменяемых объектов нет идентичности? А я пытался докопаться, что отнимает у них идентичность? S> S>>>>В программе на C++ можно отправить сообщение объекту, обозначенному идентификатором o1 без ссылки. S>>>Нет. S>>MyObj obj; obj.Foo(); S>>Где здесь ссылка? S>obj. Вы же ещё помните, что ссылка — это не адрес?
Я еще помню что идентификатор это не ссылка. Правда это идентификатор не объекта, а переменной. Но все равно, я считаю что обошелся без ссылки.
S>>Оно как минимум выпадает из него (в вашей трактовке) в контексте value-объектов, т.к. допускает существование двух различных объектов same identity. А значит не может быть использовано для того что бы отличить один объект от всех остальных. S>Ещё раз напомню, что value-типы дотнета не попадают в классическое ООП.
Согласно чему?
S>>>Вы копаете не в ту сторону. По определению идентичности, она должна работать независимо от поведения. S>>В некоторых источниках сказано что изменение объекта не приводит к изменению его идентичности. Это тоже можно трактовать как независимость идентичности от состояния и поведения. S>Ну, и замечательно. В чём вопрос-то? В том, как правильно пользоваться формальной логикой? Поясню: если есть какое-то следствие из идентичности, справедливое также для какого-то другого отношения, это не означает, что это другое отношение тоже можно использовать для идентичности.
Не вижу другого отношения.
S>>Ваше понимание идентичности тоже какое-то не такое. Почему у иммутабельных объектов нет идентичности? Откуда это вытекает? Только не надо вспоминать семантику value-объектов В определении идентичности о ней нет упоминания. S>Хорошо, вы правы. У immutable-объектов есть идентичность, если это объекты в смысле ООП.
Отлично. Я тоже признаюсь. Я готов признать вашу с ganjustas-ом правоту относительно трактовки идентичности. Единственное что меня еще смущает — я допускаю другую трактовку. Можно списывать на мою упертость, но я все-таки считаю что определение не вполне однозначно. И некоторые моменты все-таки наводят на сомения.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали: S>>Identity — это такая функция ID: obj->(?), переводящая объект или ссылку в неизвестно что, что можно сравнить. S>>Нигде не написано что это неизвестно что (?) не может иметь связи с поведением. S>Написано. Но вам это читать неинтересно. Вы предпочитаете читать между строк и мелким шрифтом, напрочь игнорируя всё остальное.
Между строк читаю что ID не зависит от изменения состояний и поведения конкретного объекта. Но не вижу причин почему не отличать объекты по какой-то величине из области значений ID, которая имеет связь с поведением.
S>>Вот я и предлагаю использовать область значений, завязанную на наблюдаемое поведение. Что не так? S>Как что? S>1. Ваше предложение не вполне соответствует определению, которое требует от идентичности независимости от состояния и поведения. В частности, такое определение требует наличия идентичности даже у объектов без поведения совсем.
Без изменяемого поведения. Отсутствие изменяемого поведения — это тоже поведение. Не могу себе представить объект без поведения совсем. Ничего не делает — значит такое у него поведение.
S>2. Ваше предложение противоречит определению, которое требует от идентичности возможности различать разные объекты.
Оно позволяет различать объекты с разным поведением. S>Тем не менее, вы упорно приводите примеры, когда ваше определение идентичности приводит к неразличимости разных объектов.
Да, но разных объектов с неразличимым поведением.
Здравствуйте, samius, Вы писали:
S>Мы говорим про ООП а не про БД. Для ООП ссылка не нужна. Об этом нигде не написано. Требуется механизм посылки сообщения с точностью до identity. Это можно обеспечить идентификатором.
Если это можно обеспечить идентификатором, то идентификатор выполняет роль ссылки. По определению ссылки.
S>Это идентичность, основанная на отсутствии свойств объектов, отличающих их. Под свойствами я подразумеваю не поля объекта и не свойства аксессоры к полям. Физический адрес я тоже не отношу к свойствам объекта.
Подставив в твоё определение определение из википедии получаем:
Логическая идентичность — это идентичность, основанная на отсутствии "википедия-идентичности".
Здорово, правда?
S>Не прямые адреса, разве что.
Нет. Ссылки имеют другую алгебру, чем адреса.
Адреса можно сравнивать; можно вычитать. По адресу объекта можно определить, что он находится внутри другого объекта.
Со ссылкой ничего подобного сделать нельзя. Поэтому не надо, пожалуйста, называть ссылки адресами.
S>Следствие в википедии говорит об объектах одного типа. Откуда ты взял "для любого типа" — не знаю.
Если бы следствие в википедии являлось действительно следствием, то его можно было бы формально доказать, исходя из определения там же. Увы.
S>Выбери определение идентичности и докажи кодом идентичность объекта самому себе, не опираясь на ссылки, упоминания о которых, надеюсь в твоем определении не будет.
Смешные упражнения. Ок, пусть у нас будет ООП-система, в которой ссылки сравнивать нельзя — из неравенства ссылок не следует ничего интересного. Отлично, чтобы отличать объекты друг от друга, мы запихаем внутрь каждого экземпляра GUID.
0. Этот GUID будет волшебным образом генерироваться при всяком создании объекта, будь то "с нуля" или при клонировании объекта.
1. Этот ID будет недоступен коду самого объекта; его будет невозможно изменить в течение всего времени жизни.
2. Сделаем волшебную функцию ID(obj), которая будет залезать внутрь объекта и возвращать его GUID.
3. Объект никак не сможет повлиять на реализацию этой функции.
Введённая нами функция ID удовлетворяет определению идентичности: она одинаковая для одного и того же объекта; она разная для разных объектов в силу 0; она не зависит от состояния объекта в силу 1; она не зависит от поведения объекта в силу 3.
S>Я помню что ты считаешь ссылку на объект свойством объекта. Только в определении об этом почему-то не написано. Так что твое выражение отличающее ссылки не будет иметь прямого отношения к определению идентичности.
Не надо путать определение идентичности и реализацию идентичности.
Применимость ссылок для идентичности в дотнете нетрудно доказать в два хода.
S>Нет. Это значит что из равенства ссылок следует identity. То что верно обратное ты не показал. Извини, в определении идентичности ничего про ссылки нет, поэтому тебе придется формально доказывать что идентичные объекты имеют равные ссылки.
Да. Определение идентичности из ECMA — это memory location. Её применимость в качестве identity, если даже и не верить стандарту на слово, легко доказать.
Осталось сделать одно из двух:
1. найти место в ECMA, где сказано, что there cannot be two different references to the same memory location
2. найти место в ECMA, где сказано, что сравнение ссылок заведомо определяет, ссылаются ли они обе на одно и то же memory location.
На всякий случай поясню п.2: мы можем иметь ссылки, внутри устроенные как длинные указатели в DOS — пара (сегмент, смещение), где сегменты частично перекрываются. В такой схеме можно иметь две побитово различные ссылки на одно и то же место в памяти.
Вариант 1 явно запрещает использование таких схем; вариант 2 разрешает использовать такие схемы, если есть подходящая реализация оператора == для таких ссылок.
S>Незачем приводить язык без ссылок. Но если хочется — можно пофантазировать. Пусть будет C#--, который будет в точности C#, но без возможности сравнения ссылок. Обращаться по ссылке можно, сравнивать — нет.
Вполне возможный язык. Ну, для начала в таком C#-- не скомпилируется FCL.
Чтобы она скомпилировалась, придётся придумать способ обойти это ограничение, потому что на сравнении идентичности объектов основано довольно много кода. Если мы не придумаем способ сделать IsIdentic(ref1, ref2), то дотнет так и не заработает.
А если мы придумали способ, например ту самую волшебную функцию ID(obj), которая возвращает что-то сравнимое, не используя "биты" ссылки, то автоматически получаем реализацию оператора сравнения для ссылок:
S>Незачем. Тебе C# позволяет привести ссылку к инвариантному формату?
Конечно. Ссылка в C# уже имеет инвариантный формат.
S>Не рулит логика, когда неверен посыл. Докажи что разные объекты а и b будут иметь различные if(a) и id(b). Формально из определения, пожалуйста, а не руководствуясь домыслами о равенстве ссылок.
Зачем это доказывать? Это и есть определение идентичности.
S>ООП не требует возможности отличать объекты, ООП требует доставки сообщений объекту с некоторой identity.
Первым делом ООП требует возможности отличать. Это определение identity. Уже потом оно требует доставки сообщений.
S>добавим к C#-- то свойство, что ссылка включает в себя время ее получения. Вот такой я странный. G>>3)Что будет identity в таком случае? S>То же самое, см. формальное определение. G>>4)Как отличать объекты один от другого? S>Зачем? Механизм доставки сообщений по заданному identity работает. Большего не требуется. Я не собираюсь этот язык внедрять в производство или решать на нем какие-либо задачи.
Механизма доставки по identity нету. Есть механизм доставки по ссылке. При таком определении ссылки вам ещё придётся доказывать, что ссылка имеет отношение к identity
S>Я утверждаю что из неравенства ссылок может следовать same identity.
Это утверждение очевидно неверно. При неравных ссылках same identity может быть, но вот следовать из них оно никак не может.
S>Я давал. Еще раз. Физическая идентичность — идентичность основанная на равенстве ссылок/адресов/хэндлов/уникальных системных идентификаторов. Хочется назвать ее суррогатной идентичностью, т.к. ссылки и т.п. не имеют отношения к объекту, его состоянию и поведению. Логическая идентичность — идентичность, которая основывается на наблюдаемом поведении объекта. И да, я знаю что поведение и состояние не влияют на идентичность. Потому предлагается устанавливать идентичность по разнице в наблюдаемом поведении.
Такое определение идентичности не работает для изменяемых объектов. Потому что в течение жизни она у них будет изменяться.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали:
S>надо поменять причину и следствие? Но тогда мы получим что-то не совсем осмысленное. S>IF object identity of two objects of the same type is the same, THEN every change to either object is also a change to the other object.
Мы получим почти точную перефразировку фразы, которую вы привели из другого источника. S>Для чего здесь уточнение same type? Что бы мы не взяли объекты с same identity но разного типа? Если забить на эту неувязку с same type, то в остальном — вполне осмысленная и верифицируемая фраза. Если бы она была в таком виде в википедии я бы не удивился.
Если это следствие, то оно должно выводиться из определения. Кокретно это следствие никак не выводится.
S>Я вижу что я понимаю смысл термина не так как остальные на этом форуме. Это для меня очевидно.
И как все остальные в мире — тоже. Вы сами привели уже кучу ссылок. Везде получается так, что идентичность в ООП позволяет отличать любые объекты друг от друга.
Вне ООП можно определять идентичность по-другому. Но это будет уже не ООП.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали:
S>Я еще помню что идентификатор это не ссылка. Правда это идентификатор не объекта, а переменной. Но все равно, я считаю что обошелся без ссылки.
Ну и зря вы так считаете. А если я напишу MyObj &obj2 = obj, то ссылка появится?
Расскажите мне в деталях, чем obj2 семантически будет отличаться от obj.
S>Согласно чему?
Согласно определению ООП.
S>Не вижу другого отношения.
Ну как же, у вас всё время фигурирует какая-то "логическая идентичность", неуловимо отличающаяся от "физической идентичности", которой пользуются все остальные. Она, очевидно, вводит другое отношение между объектами, не такое, как у всех. Почему же вы его не видите?
S>Отлично. Я тоже признаюсь. Я готов признать вашу с ganjustas-ом правоту относительно трактовки идентичности. Единственное что меня еще смущает — я допускаю другую трактовку. Можно списывать на мою упертость, но я все-таки считаю что определение не вполне однозначно. И некоторые моменты все-таки наводят на сомения.
Определение в ООП вполне однозначно. То, что вы пытаетесь ввести в качестве логической идентичности — это эквивалентность в смысле дотнетного стандарта.
Для value-типов в дотнете она же принята за идентичность.
Именно о ней же ведёт речь тот единственный чувак, который упомянул сам термин logical, or internal identity.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали:
S>Между строк читаю что ID не зависит от изменения состояний и поведения конкретного объекта.
Это не между строк, это часть определения. S>Но не вижу причин почему не отличать объекты по какой-то величине из области значений ID, которая имеет связь с поведением.
Даже если отвлечься от противоречий с определением, у меня вызывает крайнее сомнение сама возможность формализации такого критерия.
Покажите мне схему реализации метода IsIdentic(o1, o2), которая гарантированно возвращает false для объектов с разным поведением, и true для объектов с одинаковым. Метод должен быть вычислимым, и не должен менять состояние объектов. Я не предполагаю конкретного языка программирования, но как вы себе это представляете?
S>Без изменяемого поведения. Отсутствие изменяемого поведения — это тоже поведение. Не могу себе представить объект без поведения совсем. Ничего не делает — значит такое у него поведение.
Чтобы вы начали себе представлять объект без поведения, желательно ввести формальное определение поведения.
Можно попробовать по аналогии — начать представлять себе объект без состояния; (а то ведь можно сказать что "это у него такое состояние), а потом уже можно и без поведения представить.
S>>2. Ваше предложение противоречит определению, которое требует от идентичности возможности различать разные объекты. S>Оно позволяет различать объекты с разным поведением.
Определение выдвигает более сильное требование — иметь возможность различать объекты независимо от поведения. А, значит, и объекты с одинаковым поведением.
S>>Тем не менее, вы упорно приводите примеры, когда ваше определение идентичности приводит к неразличимости разных объектов. S>Да, но разных объектов с неразличимым поведением.
Мало ли что у них ещё неразличимо. Они разные — этого достаточно для несоответствия определению.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>Определение в ООП вполне однозначно. То, что вы пытаетесь ввести в качестве логической идентичности — это эквивалентность в смысле дотнетного стандарта.
Что такое эквивалентность в смысле дотнетного стандарта? В ECMA-355 нет самостоятельного определения экивалентности, только упоминание ее в различных контекстах.
S>Для value-типов в дотнете она же принята за идентичность. S>Именно о ней же ведёт речь тот единственный чувак, который упомянул сам термин logical, or internal identity.
структурная эквивалентность в смысле побитового совпадения областей памяти? Я пытался ввести эквивалентность поведения, что очевидно не то же самое, что структурная эквивалентность.