Re[9]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.10.07 09:52
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>И можно узнать, кто этот теоретик, которого ты цитируешь?
Эти требования восходят к Алану Кею, хотя я уже не помню, где именно они сформулированы таким образом.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Что такое объект?
От: Kisloid Мухосранск  
Дата: 10.10.07 10:35
Оценка:
Здравствуйте, Sinclair, Вы писали:

А>>И можно узнать, кто этот теоретик, которого ты цитируешь?


Он не совсем теоретик, см. ниже.

S>Эти требования восходят к Алану Кею, хотя я уже не помню, где именно они сформулированы таким образом.


Вот более общее определение данное Аланом Кейем:

Еще задолго до появления Smalltalk Алан Кей сформулировал три фундаментальных принципа объектно-ориентированного программирования:
* Объект — базовая единица объектно-ориентированной системы.
* Объекты могут обладать состоянием.
* Посылка сообщения — единственный способ обмена информацией между объектами.


Взято здесь
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re: Что такое объект?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.10.07 10:55
Оценка: :)
Здравствуйте, Щербатов Евгений, Вы писали:

ЩЕ>Здравствуйте.


ЩЕ>Не совсем уверен, что вопрос по адресу, но тем не менее..


ЩЕ>У нас в коллективе есть два мнения по поводу того, что такое объект.


Это примерно такой же спор, чем, например, является переменная типа "struct zuka" — структура или экземпляр структуры? А если у нас Паскаль и там ключевое слово не struct, а record? Я бы сказал, что struct — это тип данных, а record — экземпляр.

Но между двумя Вашими вариантами я бы выбрал первое. Потому что встречается значительно чаще и имеет больше распространения (тем более если Вы начали эту тему в треде по дотнету). Класс — это тип, объект — это экземпляр. Такая трактовка больше подходит к основному современному пласту языков вроде C++/C#/Java и даже Python.

Но в языках, где можно от каждого объекта породить другой объект как от "прототипа", скорее надо пользоваться вторым вариантом (но там нелепо говорить про "экземпляр объекта").

В общем, я однозначно за первый вариант.

ЩЕ>1) объект — это экземпляр класса.
The God is real, unless declared integer.
Re[11]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.10.07 11:01
Оценка: 9 (2) +1
Здравствуйте, Kisloid, Вы писали:
K>

K>Еще задолго до появления Smalltalk Алан Кей сформулировал три фундаментальных принципа объектно-ориентированного программирования:
K> * Объект — базовая единица объектно-ориентированной системы.
K> * Объекты могут обладать состоянием.
K> * Посылка сообщения — единственный способ обмена информацией между объектами.

K>Взято здесь
Совершенно верно. Дальнейшая формализация этих определений с неизбежностью приведет к приведенным мной утверждениям.
В частности, идентифицируемость является необходимым условием для осуществления посылки сообщения, т.к. у сообщения должен быть адресат.
Таким образом, Кеевское ООП сразу же вводит три базовых понятия:
1. Объект
2. Ссылка не объект (адрес объекта; идентификатор объекта). Стоит отметить, что речь идет о математической ссылке, а не о 32bit pointer или еще какой-то детали реализации. "Математическая ссылка" в ООП позволяет две операции:
— посылка сообщения объекту, на который ссылается ссылка
— сравнение с другой ссылкой (поддержка идентифицируемости)
В зависимости от потребностей, можно разрешать либо запрещать ссылки "в никуда", т.е. null pointers.
3. Сообщение. В принципе, можно считать, что сообщения тоже являются объектами, но Кей предпочел отдельное обозначение.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.10.07 11:12
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

У тебя что-то не то с логикой. Из того что надо слать сообщения, вовсе не следует, что я должен иметь возможность сравнивать на равенство две ссылки. Достаточно чтобы эти ссылки были. Чтобы послать сообщение объекту по ссылке на объект, вовсе не объязательно иметь возмодность сравнивать две сслыки на равенство.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[13]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.10.07 11:35
Оценка: +1
Здравствуйте, adontz, Вы писали:
A>У тебя что-то не то с логикой. Из того что надо слать сообщения, вовсе не следует, что я должен иметь возможность сравнивать на равенство две ссылки. Достаточно чтобы эти ссылки были. Чтобы послать сообщение объекту по ссылке на объект, вовсе не объязательно иметь возмодность сравнивать две сслыки на равенство.
Рома, представь, что у нас есть два объекта в одинаковом состоянии. (на всякий случай поясняю: одинаковость состояния означает, что на одинаковые сообщения эти объекты реагируют одинаково). Тем не менее, мы можем послать сообщение только одному объекту из этих двоих. Это и есть идентифицируемость — свойство отличать один объект от другого.
С точки зрения математики, это означает, что мы можем сравнить ссылки на равенство, отправив модифицирующее сообщение по ссылке номер1. Затем мы можем отправить тестовое сообщение по ссылке №2, и проверить, в каком состоянии находится объект по этой ссылке. Если состояние изменилось, то ссылки указывали на один и тот же объект. Иначе — нет.

Тем не менее, для дополнительного удобства вводят метод неразрушающего сравнения ссылок, предполагая, что он дает такой же эффект, как последовательность "потрогать-сравнить-вернуть".
Отличие этих двух подходов проявляется только в случае вырожденных объектов, для которых нет сообщений, при получении которых состояние меняется. Если ссылки обладают самостоятельной сравниваемостью, отличить два таких объекта в одном состоянии можно, а иначе — нельзя.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Что такое объект?
От: Кодт Россия  
Дата: 11.10.07 16:58
Оценка:
Здравствуйте, adontz, Вы писали:

_FR>>А кто сказал, что идентичность определяется реализацией метода Equals()? Так определяется равенство объектов. "Объект" к адресу в памяти даже отношения не имеет: это… [может, неверно назову] логическое понятие.


A>Ну да, то есть если исключить операцию Object.ReferenceEquals две одинаковые строки в разных объектах нельзя будет различить. Это-то меня и напрягает.


Дело в том, что есть свойство идентичности, предоставляемое системой (языком, фреймворком, и т.д.), а есть — востребованное, используемое и воплощённое приложением.

Иммутабельные строки в некоторых средах обладают "природной" идентичностью — адресами в памяти, но логически неразличимы. Кстати, они не обладают и другим свойством — состоянием. Новое состояние — это новая константа.
Кстати, это постоянный источник граблей для сишных программистов: попытка сравнить строковые литералы с помощью ==, а не strcmp.

С другой стороны, бывают ситуации, когда природная идентичность отсутствует. Например, множество разных дескрипторов одного и того же файла или синхрообъекта. Или физическая страница, многажды отображённая в виртуальное пространство. В этом случае прикладная идентичность — это узнавание по косвенным признакам. (Получить имя файла по дескриптору).
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.