Re[36]: ООП головного мозга
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.10.11 12:03
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>Да, вещь. На самом деле почти любой orm делает паттерн repository ненужным.


Это ничего, что сегодня так называемые "ORM" без реализации Репозитория никому не нужны и их днём с огнём не сыскать?
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[37]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 12:11
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

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


G>>Да, вещь. На самом деле почти любой orm делает паттерн repository ненужным.


ANS>Это ничего, что сегодня так называемые "ORM" без реализации Репозитория никому не нужны и их днём с огнём не сыскать?


Я не про это, я как раз про обратный эффект что несмотря на то что repository, query object, unit of work, data mapper, identity map и многие другие паттерны уже встроены в orm, люди продолжают писать свои приложения реализуя паттерны самостоятельно, которые внутри делегируют все тому же orm.
При этом называют это правильной архитектурой.

Все это потому что фаулер и компания привели довольно мало технических доводов про использование тех или иных паттернов, зато очень много маркетологического буллшита.
Re[85]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.11 12:28
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


G>>>>>Формально идентичность это id(object), id(a)==id(b) тогда и только тогда когда a и b совпадают. При этом функция id не опирается на состояние и поведение объекта.


S>>>>Не "не опирается", а не зависит от них (independent).

G>>>Это тоже самое.
S>>нет
G>С точки зрения математики — да. Функция не зависит от некоторых параметров, это значит что при вычислении функции они не используются, значит что не опирается на них.
С точки зрения математики функция это правило однозначного отображения области определения в область значений. Независимость функции от чего либо не означает неучастие этого чего-либо в неких вычислениях (что такое вычисление в отношении математической функции?), а означает отсутствие влияния этого чего-либо на результат. Я могу задать функцию, которая будет учитывать фазу луны, но если результат функции будет тем же для любой фазы луны — это значит что функция не будет зависеть от фазы луны.
G>Мы же не в лингвистическом клубе, а на техническом форуме.
Не я привел термин "опираться".

S>>Написать не возьмусь. Я допускаю существование функции, о которой говорю. Соответственно, допуская это, я никому не обязан ее предоставить. Если ты утверждаешь что ее не может существовать, то что бы убедить в этом кого-нибудь, тебе следует показать это формально, а не требовать с меня реализацию на C#.

G>Именно обязан. В математике нет "презумпции невиновности", есть аксиомы, остальное надо доказывать.
Функция Дирихле существует? Напиши, пожалуйста ее на С#, что бы работала для иррациональных чисел тоже. Или на чем угодно другом, но что бы работала... Может хотя бы доказательство ее существования предъявишь?
Что бы не разводить на пустом месте болтовню: существование функций (т.е. правил отображения) можно оспорить лишь определением функции. Например, если правило неоднозначно — его нельзя принять за функцию. Иначе, функция существует как только сформулировали правило. Оспаривают и доказывают утверждения о свойствах этих правил/функций.
Как только я сформулирую правило (я его еще не сформулировал) — ты можешь оспаривать тот факт что это правило сответствует определению функции, удовлетворяет понятию идентичности в ООП. Но вот оспаривать существование такого правила — с этим обращайся к филологам.

G>Аксиомы две: 1) у каждого объекта есть identity, которая не зависит от состояния и поведения 2)для одинаковых (same) объектов identity совпадает, для разных — нет

2) это ты придумал. identity — это то что отличает объекты от остальных. Именно identity говорит где одинаковые объекты, а где разные. Иначе тебе придется показать мне определение одинаковых объектов в OOP. Только не надо про memory location

G>Ты доказать существование такой функции id, которая не является object.ReferenceEquals в C# не можешь. Значит нет такой функции.

Значит функции Дирихле тоже нет
G>Значит object.ReferenceEquals является функцией сравнения identity, значит ссылка и есть identity.
это написано в определении identity ECMA. А отношение этого всего к OOP Identity лишь то, что identity на memory location ему удовлетворяет, но не исчерпывает его. Подтверждение этому — пример identity на GUID-ах, которое приводил Синклер. Если ты не считаешь что такой identity на GUID-ах может быть принят за OOP identity, то с этим не ко мне
А я у Синклера попрошу прощения за такую стрелку.
Re[86]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 12:51
Оценка:
Здравствуйте, samius, Вы писали:

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


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


G>>>>>>Формально идентичность это id(object), id(a)==id(b) тогда и только тогда когда a и b совпадают. При этом функция id не опирается на состояние и поведение объекта.


S>>>>>Не "не опирается", а не зависит от них (independent).

G>>>>Это тоже самое.
S>>>нет
G>>С точки зрения математики — да. Функция не зависит от некоторых параметров, это значит что при вычислении функции они не используются, значит что не опирается на них.
S>С точки зрения математики функция это правило однозначного отображения области определения в область значений. Независимость функции от чего либо не означает неучастие этого чего-либо в неких вычислениях (что такое вычисление в отношении математической функции?), а означает отсутствие влияния этого чего-либо на результат. Я могу задать функцию, которая будет учитывать фазу луны, но если результат функции будет тем же для любой фазы луны — это значит что функция не будет зависеть от фазы луны.
Тривиальные вычисления, которые всегда дают одинаковый результат на любых входных данных, можно исключить из рассмотретрения, заменив их константами.
Проделав это простое преобразование у тебя функция не опирается на фазы луны.

S>>>Написать не возьмусь. Я допускаю существование функции, о которой говорю. Соответственно, допуская это, я никому не обязан ее предоставить. Если ты утверждаешь что ее не может существовать, то что бы убедить в этом кого-нибудь, тебе следует показать это формально, а не требовать с меня реализацию на C#.

G>>Именно обязан. В математике нет "презумпции невиновности", есть аксиомы, остальное надо доказывать.
S>Функция Дирихле существует?
Да.

S>Напиши, пожалуйста ее на С#, что бы работала для иррациональных чисел тоже. Или на чем угодно другом, но что бы работала... Может хотя бы доказательство ее существования предъявишь?

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

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

Ты еще должен доказать что оно аксиомам не противоречит как минимум. Тебе это пока не удалось сделать.

G>>Аксиомы две: 1) у каждого объекта есть identity, которая не зависит от состояния и поведения 2)для одинаковых (same) объектов identity совпадает, для разных — нет


S>2) это ты придумал. identity — это то что отличает объекты от остальных. Именно identity говорит где одинаковые объекты, а где разные. Иначе тебе придется показать мне определение одинаковых объектов в OOP.

Ты говоришь что я что-то придумал, а потом повторяешь то же самое что я сказал другими словами. Формализуй выделенное выше, получится ровно то же самое.




G>>Ты доказать существование такой функции id, которая не является object.ReferenceEquals в C# не можешь. Значит нет такой функции.

S>Значит функции Дирихле тоже нет
Она есть, но на компьютере её выразить нельзя так как иррациональных числе нет.
То есть функция дирихле всегда будет возвращать 1.

G>>Значит object.ReferenceEquals является функцией сравнения identity, значит ссылка и есть identity.

S>это написано в определении identity ECMA. А отношение этого всего к OOP Identity лишь то, что identity на memory location ему удовлетворяет, но не исчерпывает его. Подтверждение этому — пример identity на GUID-ах, которое приводил Синклер. Если ты не считаешь что такой identity на GUID-ах может быть принят за OOP identity, то с этим не ко мне
А я не говорил про memory location. Более того, неоднократно тебе пояснял что ссылка в разных системах может быть разная.
Это ты понимаешь ссылку узко, как memory location.
Re[87]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.11 13:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


S>>С точки зрения математики функция это правило однозначного отображения области определения в область значений. Независимость функции от чего либо не означает неучастие этого чего-либо в неких вычислениях (что такое вычисление в отношении математической функции?), а означает отсутствие влияния этого чего-либо на результат. Я могу задать функцию, которая будет учитывать фазу луны, но если результат функции будет тем же для любой фазы луны — это значит что функция не будет зависеть от фазы луны.

G>Тривиальные вычисления, которые всегда дают одинаковый результат на любых входных данных, можно исключить из рассмотретрения, заменив их константами.
G>Проделав это простое преобразование у тебя функция не опирается на фазы луны.
Это будет другая функция. Равная, но другая, потому как будет задана другим правилом.

G>>>Именно обязан. В математике нет "презумпции невиновности", есть аксиомы, остальное надо доказывать.

S>>Функция Дирихле существует?
G>Да.
И что, тебе не надо доказывать ее существование кодом на C#? Почему к моей функции у тебя другое отношение?

S>>Напиши, пожалуйста ее на С#, что бы работала для иррациональных чисел тоже. Или на чем угодно другом, но что бы работала... Может хотя бы доказательство ее существования предъявишь?

G>Не получится, в компьютере нет иррациональных чисел.
G>То есть функция дирихле всегда будет возвращать 1.
Жаль

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

G>Ты еще должен доказать что оно аксиомам не противоречит как минимум. Тебе это пока не удалось сделать.
G>>>Аксиомы две: 1) у каждого объекта есть identity, которая не зависит от состояния и поведения 2)для одинаковых (same) объектов identity совпадает, для разных — нет
Это не аксиомы, это определение идентичности OOP. Я докажу что она не противоречит. Только ты их неверно понимаешь. Оба пункта.

S>>2) это ты придумал. identity — это то что отличает объекты от остальных. Именно identity говорит где одинаковые объекты, а где разные. Иначе тебе придется показать мне определение одинаковых объектов в OOP.

G>Ты говоришь что я что-то придумал, а потом повторяешь то же самое что я сказал другими словами. Формализуй выделенное выше, получится ровно то же самое.
Для меня не то же самое. Покажи определение одинаковых объектов, а то твоя версия пункта 2 опирается на него..

G>>>Ты доказать существование такой функции id, которая не является object.ReferenceEquals в C# не можешь. Значит нет такой функции.

S>>Значит функции Дирихле тоже нет
G>Она есть, но на компьютере её выразить нельзя так как иррациональных числе нет.
G>То есть функция дирихле всегда будет возвращать 1.
Окей, т.е. на С# она невыразима? Почему ты требуешь от меня выразить другую функцию, существование которой оспариваешь?

G>>>Значит object.ReferenceEquals является функцией сравнения identity, значит ссылка и есть identity.

S>>это написано в определении identity ECMA. А отношение этого всего к OOP Identity лишь то, что identity на memory location ему удовлетворяет, но не исчерпывает его. Подтверждение этому — пример identity на GUID-ах, которое приводил Синклер. Если ты не считаешь что такой identity на GUID-ах может быть принят за OOP identity, то с этим не ко мне
G>А я не говорил про memory location. Более того, неоднократно тебе пояснял что ссылка в разных системах может быть разная.
G>Это ты понимаешь ссылку узко, как memory location.
ссылка в дотнете есть ECMA identity по определению ECMA-335. Это верно?
Определение identity в ECMA-335 не является переформулировкой identity OOP. Это не одно и то же. Согласен?
Identity в ECMA-335 — это двоичное отношение, основанное на memory location. Так?
Теперь все выглядит так, будто ты утверждаешь, что identity в ECMA-335 это единственный способ удовлетворения OOP identity. Нет ведь? Не единственный?
Может существуют другие? Да, Синклер привел identity на GUID-ах. Плюнем на то что область значений GUID-а конечна, здесь неважно. Допустим что счетна.
Ну а если существуют другие, то возможно и мой identity подойдет. Я еще формально не пытался его определить, а ты уже требуешь от меня функцию на C#.
Re[88]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 13:57
Оценка:
Здравствуйте, samius, Вы писали:

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


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


S>>>С точки зрения математики функция это правило однозначного отображения области определения в область значений. Независимость функции от чего либо не означает неучастие этого чего-либо в неких вычислениях (что такое вычисление в отношении математической функции?), а означает отсутствие влияния этого чего-либо на результат. Я могу задать функцию, которая будет учитывать фазу луны, но если результат функции будет тем же для любой фазы луны — это значит что функция не будет зависеть от фазы луны.

G>>Тривиальные вычисления, которые всегда дают одинаковый результат на любых входных данных, можно исключить из рассмотретрения, заменив их константами.
G>>Проделав это простое преобразование у тебя функция не опирается на фазы луны.
S>Это будет другая функция. Равная, но другая, потому как будет задана другим правилом.
Тем не менее её можно использовать в рассуждениях вместо оригинальной.
А вообще, что ты хочешь доказать?

G>>>>Именно обязан. В математике нет "презумпции невиновности", есть аксиомы, остальное надо доказывать.

S>>>Функция Дирихле существует?
G>>Да.
S>И что, тебе не надо доказывать ее существование кодом на C#? Почему к моей функции у тебя другое отношение?
Я же говорю, я могу написать функцию дирихле на C# или любом другом языке, но она всегда будет возвращать 1, так как нет в компьютере иррациональных чисел. Поэтому полезность её равна нулю.
Ты же не можешь написать на C# функцию id(object), которая id(a)==id(b) только когда a и b — один объект, при этом функция не должна зависеть от состояния и поведения и при этом она не будет совпадать с object.ReferenceEquals.

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

G>>Ты еще должен доказать что оно аксиомам не противоречит как минимум. Тебе это пока не удалось сделать.
G>>>>Аксиомы две: 1) у каждого объекта есть identity, которая не зависит от состояния и поведения 2)для одинаковых (same) объектов identity совпадает, для разных — нет
S>Это не аксиомы, это определение идентичности OOP.
В нашем случае аксимоы, так как они даны и их не нужно доказывать.

S>Я докажу что она не противоречит. Только ты их неверно понимаешь. Оба пункта.


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


S>>>2) это ты придумал. identity — это то что отличает объекты от остальных. Именно identity говорит где одинаковые объекты, а где разные. Иначе тебе придется показать мне определение одинаковых объектов в OOP.

G>>Ты говоришь что я что-то придумал, а потом повторяешь то же самое что я сказал другими словами. Формализуй выделенное выше, получится ровно то же самое.
S>Для меня не то же самое. Покажи определение одинаковых объектов, а то твоя версия пункта 2 опирается на него..
Одинаковый — один и тот же, я даже специально same написал по английски в скобках чтобы ты понимал о чем речь.

G>>>>Ты доказать существование такой функции id, которая не является object.ReferenceEquals в C# не можешь. Значит нет такой функции.

S>>>Значит функции Дирихле тоже нет
G>>Она есть, но на компьютере её выразить нельзя так как иррациональных числе нет.
G>>То есть функция дирихле всегда будет возвращать 1.
S>Окей, т.е. на С# она невыразима?
Выразима, но толку мало. В C# есть тип вещественных чисел, они по своей природе рациональны, так как имеют конечную запись в битовом представлении, которая отображается на рациональные числа. Типа иррациональных чисел нет и прцессор не умеет с ними работать Их можно ввести искусственно и просто спрашивать у числа является ли оно рациональным. Но не все вычисления однозначно дают рациональные\иррациональные числа в результате, в этом и проблема.


S>Почему ты требуешь от меня выразить другую функцию, существование которой оспариваешь?

То что ты пытаешься сделать — даже записать не получится.

G>>А я не говорил про memory location. Более того, неоднократно тебе пояснял что ссылка в разных системах может быть разная.

G>>Это ты понимаешь ссылку узко, как memory location.
S>ссылка в дотнете есть ECMA identity по определению ECMA-335. Это верно?
Да

S>Определение identity в ECMA-335 не является переформулировкой identity OOP. Это не одно и то же. Согласен?

Согласен, оно является реализацией.

S>Identity в ECMA-335 — это двоичное отношение, основанное на memory location. Так?

Да, см (1) ниже

8.2.5.1 Identity

The identity operator is defined by the CTS as follows.
• If the values have different exact types, then they are not identical.
• Otherwise, if their exact type is a value type, then they are identical if and only if the bit
sequences of the values are the same, bit by bit.
Otherwise, if their exact type is a reference type, then they are identical if and only if the
locations of the values are the same.
(1)

Identity is implemented on System.Object via the ReferenceEquals method. (2)


S>Теперь все выглядит так, будто ты утверждаешь, что identity в ECMA-335 это единственный способ удовлетворения OOP identity.

Я так не утверждаю, более того, я говорил что в других системах есть и другие способы.
Ты же утвреждал
Автор: samius
Дата: 05.10.11
что в C# возможно identity без совпадения ссылок, хотя стандарт говорит обратное (см (2) выше).


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

Re[38]: ООП головного мозга
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.10.11 13:57
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я не про это, я как раз про обратный эффект что несмотря на то что repository, query object, unit of work, data mapper, identity map и многие другие паттерны уже встроены в orm, люди продолжают писать свои приложения реализуя паттерны самостоятельно, которые внутри делегируют все тому же orm.

G>При этом называют это правильной архитектурой.

Сомневаюсь в массовости этого явления. Это ж идиотизм. Но даже если такое явление и есть, то при чем тут Фаулер?

G>Все это потому что фаулер и компания привели довольно мало технических доводов про использование тех или иных паттернов, зато очень много маркетологического буллшита.


Ну, не знаю не знаю. Мне кажется раз в любом фреймворке это есть значит правильную штуку описали.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[39]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 14:03
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

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


G>>Я не про это, я как раз про обратный эффект что несмотря на то что repository, query object, unit of work, data mapper, identity map и многие другие паттерны уже встроены в orm, люди продолжают писать свои приложения реализуя паттерны самостоятельно, которые внутри делегируют все тому же orm.

G>>При этом называют это правильной архитектурой.

ANS>Сомневаюсь в массовости этого явления. Это ж идиотизм.

Погугли "repository pattern" и ты удивишься как много рекомендаций по его реализации, и как мало рекомендаций не делать этого.

ANS>Но даже если такое явление и есть, то при чем тут Фаулер?

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

G>>Все это потому что фаулер и компания привели довольно мало технических доводов про использование тех или иных паттернов, зато очень много маркетологического буллшита.

ANS>Ну, не знаю не знаю. Мне кажется раз в любом фреймворке это есть значит правильную штуку описали.
На тот момент правильную. Но скорее не описали, а "продали". Причем так продали, что народ до сих пор "хавает", хоть и давится.

Ведь никто из "фаулер и ко" не написал: "не делайте repository, он уже есть". За такие утверждения начинают гнать ссаными тряпками.

Причем им это выгодно. Они таким образом продолжают повышать свой статус, продавать за реальные деньги тренинги по DDD, это же золотая жила из недалеких программистов.
Re[89]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.11 14:27
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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


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

G>>>Проделав это простое преобразование у тебя функция не опирается на фазы луны.
S>>Это будет другая функция. Равная, но другая, потому как будет задана другим правилом.
G>Тем не менее её можно использовать в рассуждениях вместо оригинальной.
G>А вообще, что ты хочешь доказать?
Я хочу тебе доказать что опираться и зависеть — это не одно и то же. Тем более, я смутно понимаю, что такое опираться в отношении функций.

S>>И что, тебе не надо доказывать ее существование кодом на C#? Почему к моей функции у тебя другое отношение?

G>Я же говорю, я могу написать функцию дирихле на C# или любом другом языке, но она всегда будет возвращать 1, так как нет в компьютере иррациональных чисел. Поэтому полезность её равна нулю.
Это будет не функция Дирихле, потому как ты не сможешь никого убедить что она вернет 0 для иррациональных чисел. Даже форма ее записи будет отличаться от функции Дирихле.

G>Ты же не можешь написать на C# функцию id(object), которая id(a)==id(b) только когда a и b — один объект, при этом функция не должна зависеть от состояния и поведения и при этом она не будет совпадать с object.ReferenceEquals.

Моя функция id не будет иметь отношения к ReferenceEquals и она не обязана будет возвращать те же результаты. Она будет удовлетворять определению identity OOP, а не ECMA-335.

G>>>>>Аксиомы две: 1) у каждого объекта есть identity, которая не зависит от состояния и поведения 2)для одинаковых (same) объектов identity совпадает, для разных — нет

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

S>>Для меня не то же самое. Покажи определение одинаковых объектов, а то твоя версия пункта 2 опирается на него..

G>Одинаковый — один и тот же, я даже специально same написал по английски в скобках чтобы ты понимал о чем речь.
Same объекты это те, для которы ID(obj) совпадает. У тебя это понятие относительно ООП по-другому выглядит?
Ты же мне говоришь что ID опирается на понятие разных объектов. Да, я про identity OOP, но не ECMA-335 identity.

G>>>Она есть, но на компьютере её выразить нельзя так как иррациональных числе нет.

G>>>То есть функция дирихле всегда будет возвращать 1.
S>>Окей, т.е. на С# она невыразима?
G>Выразима, но толку мало.
Невыразима на компьютере, но выразима на C#

S>>Почему ты требуешь от меня выразить другую функцию, существование которой оспариваешь?

G>То что ты пытаешься сделать — даже записать не получится.
Как и Дирихле на C#.

S>>ссылка в дотнете есть ECMA identity по определению ECMA-335. Это верно?

G>Да


S>>Определение identity в ECMA-335 не является переформулировкой identity OOP. Это не одно и то же. Согласен?

G>Согласен, оно является реализацией.


S>>Identity в ECMA-335 — это двоичное отношение, основанное на memory location. Так?

G>Да, см (1) ниже


G>

G>8.2.5.1 Identity

G>...
G>• Otherwise, if their exact type is a reference type, then they are identical if and only if the
G>locations of the values are the same.
(1)

G>Identity is implemented on System.Object via the ReferenceEquals method. (2)

Интересно, что нет функции id, но определено отношение на ReferenceEquals. Может быть и мне не нужно будет создавать функцию my_id, а достаточно будет определить отношение MyIdentityEquals? Думаю, да.

G>Я так не утверждаю, более того, я говорил что в других системах есть и другие способы.

G>Ты же утвреждал
Автор: samius
Дата: 05.10.11
что в C# возможно identity без совпадения ссылок, хотя стандарт говорит обратное (см (2) выше).

Окей. Но это ведь ECMA, а не OOP. Я утверждал что существует другое identity, которое не совпадает с identity на memory location. Потому я не собираюсь доказывать какое-либо отношение того identity к ReferenceEquals.

G>

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

Все верно. Я говорил об идентичности OOP. Но ты об идентичности ECMA-335.
Re[40]: ООП головного мозга
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.10.11 14:31
Оценка:
Здравствуйте, gandjustas, Вы писали:

ANS>>Сомневаюсь в массовости этого явления. Это ж идиотизм.

G>Погугли "repository pattern" и ты удивишься как много рекомендаций по его реализации, и как мало рекомендаций не делать этого.

Что не так с паттерном репозиторий ? Дай пример или ссылку.
Re[86]: ООП головного мозга
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.10.11 14:54
Оценка:
Здравствуйте, samius, Вы писали:

S>Функция Дирихле существует? Напиши, пожалуйста ее на С#, что бы работала для иррациональных чисел тоже.


И давно C# научили работать с иррациональными числами ?
Re[87]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.11 15:12
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


S>>Функция Дирихле существует? Напиши, пожалуйста ее на С#, что бы работала для иррациональных чисел тоже.


I>И давно C# научили работать с иррациональными числами ?

Как давно на C# запретили писать следующее:
var sqrt2 = new Sqrt(2);
Assert(sqrt2 * sqrt2 == 2);

???
Re[40]: ООП головного мозга
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.10.11 15:38
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>При том что "фаулер и ко" продолжают сейчас популяризировать те идеи, которые были актуальны 10-15 лет назад.


Зашел к Фаулеру на сайт. В самом верху ссылка на http://martinfowler.com/dsl.html А в низу есть:

Popular Articles
* New Methodology
* Dependency Injection
* Mocks aren’t Stubs
* Is Design Dead?
* Continuous Integratio


имхо, зря ты на него бочку катиш
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[83]: ООП головного мозга
От: artelk  
Дата: 07.10.11 16:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


A>>Приведи пример задачи, которую, оставаясь в рамках ООП парадигмы, нельзя решить без операции сравнения ссылок.

G>Collection.Remove(object), если не переопределять equals, то она вычисляется как сравнение ссылок.

artelk> Приведи пример задачи, которую нельзя решить без использования object.ReferenceEquals.
gandjustas> Хорошо, задача: нужно реализовать object.ReferenceEquals с текущим его поведением.


Когда может такое случиться, что мы не сможем предоставить коллекции свой equals (вычисляемый как функция состояния объекта) не выходя за рамки ООП парадигмы?

A>>Берем http://exposedobject.codeplex.com/

A>>Код:
A>>
A>>dynamic a = new A {X = 42};
A>>dynamic d = ExposedObject.From(a);
A>>Console.WriteLine(d.X);//42
A>>Console.WriteLine(object.ReferenceEquals(a, d));//false!!!
A>>

G>Ты привел пример разных объектов.

A>>Идентичность в .NET — более узкое понятие, чем в ООП.

A>>Или ты будешь утверждать, что a и d не идентичны?
G>Конечно не идентичны, они даже не эквивалентны. У них даже типы разные.

Ок, берем код ExposedObject, меняем там BindingFlags.NonPublic на BindingFlags.FlattenHierarchy, переопределяем методы из Equals, GetHashCode, ToString и создаем GetType. Делегируем все в агрегируемый объект.
class A
{
    public int X { get; set; }

    public override string ToString()
    {
        return string.Format("X = {0}", X);
    }

    public override bool Equals(object obj)
    {
        var o = obj as A;
        return o != null && o.X == X;
    }
}

var a = new A {X = 42};
dynamic o = a;
dynamic ex = ExposedObject.From(o);

Console.WriteLine(ex.X);//42
Console.WriteLine(ex.GetType().GetProperty("X").GetValue(a, null));//42

Console.WriteLine(ex);//X = 42
Console.WriteLine((A)ex);//X = 42

Console.WriteLine(ex.Equals(o));//true
Console.WriteLine(ex.GetType() == a.GetType());//true
Console.WriteLine(ex.GetType() == typeof(A));//true
Console.WriteLine(ex.GetHashCode() == a.GetHashCode());//true

Console.WriteLine(object.ReferenceEquals(a, ex));//false!!!

Что не работает:
Console.WriteLine(o is A);//true
Console.WriteLine(o as A != null);//true

Console.WriteLine(ex is A);//false
Console.WriteLine(ex as A != null);//false

Опкод isinst придумали задолго до динамиков, поэтому они в этом месте не доделанные.
Да и наличие даункаста не является необходимым условием для ООП.

G>Тебе нужен пример где два объекта идентичны, то есть это один объект по сути. Но ссылки на него не равны.

Ссылки ссылаются на идентичные объекты, если они взаимозаменыемы с сохранением поведения программы.
Если в коде программы используется object.ReferenceEquals, то, очевидно, такой пример привести нельзя. По определению.
Ок, другой пример:
class Something
{
  private readonly ID id;
  
  public Something()
  {
    id = ID.GetUniqueId();
    //INSERT INTO table (ID, State) VALUES ($id, 0)
  }

  private Something(ID id)
  {
    this.id = id;
  }
  
  public static IEnumerable<Something> GetAll()
  { 
     foreach(id in //SELECT ID FROM table)
       yield return new Something(id)
  }

  public int State
  {
    get { //SELECT State FROM table WHERE ID = $id }
    set { //UPDATE table SET State=$value WHERE ID = $id }
  }
}

Разжевать?
Re[81]: ООП головного мозга
От: artelk  
Дата: 07.10.11 16:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну да, покажи пример идентичности без равенства ссылок.

internal interface IA
{
    int F();
}

class A : IA
{
    int IA.F()
    {
        return 1;
    }

    public int F()
    {
        return 2;
    }
}

A a1 = new A();
IA a2 = a1;

Console.WriteLine(object.ReferenceEquals(a1, a2));//true
Console.WriteLine(a1.F());
Console.WriteLine(a2.F());

Таки нашел
Re[31]: ООП головного мозга
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.10.11 17:04
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Извини, я до этого места статью был не дочитал Я остановился на втором абзаце. И сходу вопрос, почему "Transaction Script" это "чисто процедурное овно"?

А ты нажми на ссылку "Transaction Script", которую он приводит.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[90]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 17:57
Оценка:
Здравствуйте, samius, Вы писали:

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


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


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

G>>>>Проделав это простое преобразование у тебя функция не опирается на фазы луны.
S>>>Это будет другая функция. Равная, но другая, потому как будет задана другим правилом.
G>>Тем не менее её можно использовать в рассуждениях вместо оригинальной.
G>>А вообще, что ты хочешь доказать?
S>Я хочу тебе доказать что опираться и зависеть — это не одно и то же. Тем более, я смутно понимаю, что такое опираться в отношении функций.
То есть ты что-то хочешь доказать когда этого не понимаешь?

G>>Ты же не можешь написать на C# функцию id(object), которая id(a)==id(b) только когда a и b — один объект, при этом функция не должна зависеть от состояния и поведения и при этом она не будет совпадать с object.ReferenceEquals.

S>Моя функция id не будет иметь отношения к ReferenceEquals и она не обязана будет возвращать те же результаты. Она будет удовлетворять определению identity OOP, а не ECMA-335.
Ок, напиши её.

G>>>>>>Аксиомы две: 1) у каждого объекта есть identity, которая не зависит от состояния и поведения 2)для одинаковых (same) объектов identity совпадает, для разных — нет

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

S>>>Для меня не то же самое. Покажи определение одинаковых объектов, а то твоя версия пункта 2 опирается на него..

G>>Одинаковый — один и тот же, я даже специально same написал по английски в скобках чтобы ты понимал о чем речь.
S>Same объекты это те, для которы ID(obj) совпадает. У тебя это понятие относительно ООП по-другому выглядит?
Я тебе тоже самое писал. Читай внимательно 2), выше выделил жирным

S>Ты же мне говоришь что ID опирается на понятие разных объектов.


http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?OID/index.htm

object identity — identity is that property of an object that distinguishes each object from all others

identity позволяет отличать объекты друг от друга.


S>>>Почему ты требуешь от меня выразить другую функцию, существование которой оспариваешь?

G>>То что ты пытаешься сделать — даже записать не получится.
S>Как и Дирихле на C#.
Ей вполне получится записать если сделать искусственный тип, свойством которого будет рациональность. Но это свойство не будет корректно обрабатываться при вычислениях. Поэтому толку от функции мало.

S>Окей. Но это ведь ECMA, а не OOP. Я утверждал что существует другое identity, которое не совпадает с identity на memory location. Потому я не собираюсь доказывать какое-либо отношение того identity к ReferenceEquals.

ты утверждал это конкретно в контексте C#. но так и не смог показать функцию.
Потом расширил границы, выдумывая системы где ООП реализованно без сравнения ссылок, но id в такой системе не смог.

G>>

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

S>Все верно. Я говорил об идентичности OOP. Но ты об идентичности ECMA-335.
Мы ведь за C# говорили. В ECMA явно прописано что является identity, ты этому противоречить пытаешься.
Re[41]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 18:01
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


ANS>>>Сомневаюсь в массовости этого явления. Это ж идиотизм.

G>>Погугли "repository pattern" и ты удивишься как много рекомендаций по его реализации, и как мало рекомендаций не делать этого.

I>Что не так с паттерном репозиторий ? Дай пример или ссылку.


В соседней теме
Автор:
Дата: 29.09.11
: http://www.youtube.com/watch?v=PqaOxRbQmAQ&amp;feature=player_detailpage#t=1224s

Вкратце: он по большей части не нужен.
Re[84]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 18:09
Оценка:
Здравствуйте, artelk, Вы писали:

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


A>Когда может такое случиться, что мы не сможем предоставить коллекции свой equals (вычисляемый как функция состояния объекта) не выходя за рамки ООП парадигмы?


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

A>>>Берем http://exposedobject.codeplex.com/

A>>>Код:
A>>>
A>>>dynamic a = new A {X = 42};
A>>>dynamic d = ExposedObject.From(a);
A>>>Console.WriteLine(d.X);//42
A>>>Console.WriteLine(object.ReferenceEquals(a, d));//false!!!
A>>>

G>>Ты привел пример разных объектов.

A>>>Идентичность в .NET — более узкое понятие, чем в ООП.

A>>>Или ты будешь утверждать, что a и d не идентичны?
G>>Конечно не идентичны, они даже не эквивалентны. У них даже типы разные.

A>Ок, берем код ExposedObject, меняем там BindingFlags.NonPublic на BindingFlags.FlattenHierarchy, переопределяем методы из Equals, GetHashCode, ToString и создаем GetType. Делегируем все в агрегируемый объект.

A>
A>Console.WriteLine(ex.Equals(o));//true
A>Console.WriteLine(object.ReferenceEquals(a, ex));//false!!!
A>


Ты привел пример эквивалентных, но не идентичных объектов.
Мог бы не напрягаться, а взять две строки.


G>>Тебе нужен пример где два объекта идентичны, то есть это один объект по сути. Но ссылки на него не равны.

A>Ссылки ссылаются на идентичные объекты, если они взаимозаменыемы с сохранением поведения программы.
Бред. Смотри определения:
http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?OID/index.htm

Читай ECMA-335

8.2.5.1 Identity

The identity operator is defined by the CTS as follows.
• If the values have different exact types, then they are not identical.
• Otherwise, if their exact type is a value type, then they are identical if and only if the bit
sequences of the values are the same, bit by bit.
• Otherwise, if their exact type is a reference type, then they are identical if and only if the
locations of the values are the same.

Identity is implemented on System.Object via the ReferenceEquals method.


То что ты приводишь называется эквивалентностью

8.2.5.2 Equality

For value types, the equality operator is part of the definition of the exact type. Definitions of equality should
obey the following rules:
• Equality should be an equivalence operator, as defined above.
• Identity should imply equality, as stated earlier.
• If either (or both) operand is a boxed value, equality should be computed by
o first unboxing any boxed operand(s), and then
o applying the usual rules for equality on the resulting values.

Equality is implemented on System.Object via the Equals method.


A>Ок, другой пример:

A>
A>class Something
A>{
A>  private readonly ID id;
  
A>  public Something()
A>  {
A>    id = ID.GetUniqueId();
A>    //INSERT INTO table (ID, State) VALUES ($id, 0)
A>  }

A>  private Something(ID id)
A>  {
A>    this.id = id;
A>  }
  
A>  public static IEnumerable<Something> GetAll()
A>  { 
A>     foreach(id in //SELECT ID FROM table)
A>       yield return new Something(id)
A>  }

A>  public int State
A>  {
A>    get { //SELECT State FROM table WHERE ID = $id }
A>    set { //UPDATE table SET State=$value WHERE ID = $id }
A>  }
A>}
A>

A>Разжевать?
Это ты чего понаписал? И зачем?
Re[82]: ООП головного мозга
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.11 18:12
Оценка:
Здравствуйте, artelk, Вы писали:

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


G>>Ну да, покажи пример идентичности без равенства ссылок.

A>
A>internal interface IA
A>{
A>    int F();
A>}

A>class A : IA
A>{
A>    int IA.F()
A>    {
A>        return 1;
A>    }

A>    public int F()
A>    {
A>        return 2;
A>    }
A>}

A>A a1 = new A();
A>IA a2 = a1;

A>Console.WriteLine(object.ReferenceEquals(a1, a2));//true
A>Console.WriteLine(a1.F());
A>Console.WriteLine(a2.F());
A>

A>Таки нашел
Что нашел? что разные методы вызываются?

Это ссылки на один объект, а ты пытаешться искать разницу в поведении. Причем даже не объектов, а компилятора.

Читай определения: http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?OID/index.htm

object identity — a characteristic of an object that provides a means to uniquely denote or refer to the object independent of its state or behavior


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