Что такое объект?
От: Щербатов Евгений  
Дата: 09.10.07 02:22
Оценка: 1 (1)
Здравствуйте.

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

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

1) объект — это экземпляр класса.

2) объект — это термин из ООП, обозначающий некоторую абстрактную сущность. В конкретных языках программирования, поддерживающих парадигму ООП, объект может быть представлен такими конструкциями языка, как class, struct и т.д. При этом есть такое понятие как экземпляр объекта. Это тоже самое, что и, например, экземпляр класса.

Подскажите пожалуйста, как правильно?

Спасибо.

10.10.07 14:05: Перенесено модератором из '.NET' — AndrewVK
Re: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 09.10.07 02:38
Оценка:
Здравствуйте, Щербатов Евгений, Вы писали:

Сильно зависит от контекста, то есть языка программирования. Скажем, в строго типизированном языке объект действительно стоит рассматривать как экземпляр класса. А вот в каком-нибудь скрипте объект — это просто совокупность некоторых данных и методов их обработки безо всякой жёсткой привязки с конкретным типам. В строго типизированных языках объект, вообще говоря, тоже совокупность некоторых данных и методов их обработки, но там не бывает уникальных по структуре объектов, можно создавать только объекты со структурой соответствующей некоторому шаблону — классу. С другой стороны подобное обобщение "объект — совокупность некоторых данных и методов их обработки" в контексте строго типизированных языков не даёт никаких видимых преимуществ, зато сильно всё усложняет. Вводить подобное обощение в контексте строго типизированных языков больше похоже на выпендрёж, чем на поиски правды.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 02:50
Оценка: 49 (9) +6 -2 :)
Здравствуйте, Щербатов Евгений, Вы писали:

ЩЕ>1) объект — это экземпляр класса.


ЩЕ>2) объект — это термин из ООП, обозначающий некоторую абстрактную сущность. В конкретных языках программирования, поддерживающих парадигму ООП, объект может быть представлен такими конструкциями языка, как class, struct и т.д. При этом есть такое понятие как экземпляр объекта. Это тоже самое, что и, например, экземпляр класса.


ЩЕ>Подскажите пожалуйста, как правильно?

Оба мнения неправильны.
1. Объект вовсе не обязан быть экземпляром какого-то класса. Классы, вообще говоря, вторичны по отношению к объектам.
2. Конструкциями class, struct и т.д. представляются классы, а не объекты. Понятия "экземпляр объекта" не существует.

Объект — это некоторая абстрактная сущность, которая обладает
1. Идентифицируемостью. Т.е. всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии. Также и наоборот — можно понять, что две ссылки указывают на один и тот же объект. Идентифицируемость сохраняется в течение всего времени жизни объекта, так что, к примеру, если две ссылки когда-то указывали на разные объекты, то (без присваивания) они останутся различными.
2. Поведением. Поведением объекта называется его реакция на внешние сообщения. В современных традиционных языках программирования посылка сообщения объекту реализована как вызов метода.
3. Состоянием. Состояние детерминистического объекта полностью определяется историей сообщений, посланных ему в течение жизни. Наличие состояния позволяет одному и тому же объекту по-разному реагировать на одни и те же сообщения. Обычно подразумевается, что снаружи объекта прямого доступа к состоянию нет, и судить о состоянии можно только при помощи посылки сообщений и проверки реакции на них.

Всё. Ничего больше, вообще говоря, не надо.

Классы в ООП вводятся как множества объектов, обладающих сходным поведением.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 09.10.07 03:14
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Объект — это некоторая абстрактная сущность, которая обладает

S>1. Идентифицируемостью.

Разве это объязательное условие?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 03:41
Оценка: +1 -2
Здравствуйте, adontz, Вы писали:
A>Разве это объязательное условие?
Да.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Что такое объект?
От: Щербатов Евгений  
Дата: 09.10.07 07:37
Оценка:
Здравствуйте, adontz, Вы писали:

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


Тут речь вовсе не о выпендреже. Этот вопрос поднялся в связи с вычиткой документации, которую делают наши технические писатели. Конкретно сейчас создаются документы, описывающие концепции многих подсистем и там нужно использовать правильную терминологию, причем везде единую. Вот поэтому и интересуюсь — хотелось бы писать технически грамотные документы.
Re[4]: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 09.10.07 09:51
Оценка:
Здравствуйте, Sinclair, Вы писали:

A>>Разве это объязательное условие?

S>Да.

Тогда получается System.String не объект, так как не соответствует "всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии.", если конечно не рассматривать как состояние адрес в памяти.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 10:12
Оценка:
Здравствуйте, adontz, Вы писали:
A>Тогда получается System.String не объект, так как не соответствует "всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии.",
Moжно. См. Тж. ReferenceEquals().
A> если конечно не рассматривать как состояние адрес в памяти.
Ты что-то с чем-то путаешь.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 09.10.07 10:35
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

A>>Тогда получается System.String не объект, так как не соответствует "всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии.",
S>Moжно. См. Тж. ReferenceEquals().

Ну а не было бы этого метода, тогда что? Я не придираюсь, просто пытаюсь понять.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Что такое объект?
От: ryf  
Дата: 09.10.07 10:35
Оценка:
Здравствуйте, Щербатов Евгений, Вы писали:
...
ЩЕ>Спасибо.

Можно еще так: объект определяет область допустимых значений и набор допустимых операций, на самом деле это вообще неточное определение понятия "тип данных", но в общем случае объект и есть абстрактный тип данных.
Re[5]: Что такое объект?
От: _FRED_ Черногория
Дата: 09.10.07 10:37
Оценка:
Здравствуйте, adontz, Вы писали:

A>>>Разве это объязательное условие?

S>>Да.

A>Тогда получается System.String не объект, так как не соответствует "всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии.", если конечно не рассматривать как состояние адрес в памяти.


А кто сказал, что идентичность определяется реализацией метода Equals()? Так определяется равенство объектов. "Объект" к адресу в памяти даже отношения не имеет: это… [может, неверно назову] логическое понятие.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 09.10.07 10:44
Оценка:
Здравствуйте, _FRED_, Вы писали:

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


A>>>>Разве это объязательное условие?

S>>>Да.

A>>Тогда получается System.String не объект, так как не соответствует "всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии.", если конечно не рассматривать как состояние адрес в памяти.


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


Ну да, то есть если исключить операцию Object.ReferenceEquals две одинаковые строки в разных объектах нельзя будет различить. Это-то меня и напрягает.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[7]: Что такое объект?
От: _FRED_ Черногория
Дата: 09.10.07 10:49
Оценка:
Здравствуйте, adontz, Вы писали:

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


+1

A>Это-то меня и напрягает.


Да ладно… языкам, как и платформам, программирования всё ещё довольно далеко до того, что бы естественно описывать реальный мир
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Re[7]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 10:58
Оценка:
Здравствуйте, adontz, Вы писали:
A>Ну а не было бы этого метода, тогда что? Я не придираюсь, просто пытаюсь понять.
Был бы. Достаточно сделать апкаст к обжекту и провести сравнение.

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

Если у вас есть возможность провести хак — добро пожаловать за пределы математически строгого ООП. Ничего в этом катастрофического нет.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 10:58
Оценка:
Здравствуйте, ryf, Вы писали:
ryf>Можно еще так: объект определяет область допустимых значений и набор допустимых операций, на самом деле это вообще неточное определение понятия "тип данных", но в общем случае объект и есть абстрактный тип данных.
Не совсем. Объекты и ATD — совершенно ортогональные вещи.
В частности, объект совершенно не обязан определять область "допустимых значений", а ATD не обязан обладать идентифицируемостью.
Как правило, наоборот — два экземпляра ATD считаются неразличимыми, если у них одинаковое состояние. Операции над ATD, как правило, не изменяют состояние существующего экземпляра, а возвращают "новый".
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 11:15
Оценка:
Здравствуйте, adontz, Вы писали:
A>Тогда получается System.String не объект, так как не соответствует "всегда можно отличить два разных объекта друг от друга, даже если они находятся в одинаковом состоянии.", если конечно не рассматривать как состояние адрес в памяти.

Вообще, у System.String намеренно реализована т.н. value-type семантика. Т.е приложены все усилия, чтобы
а) две строки в одинаковом состоянии были неразличимы
б) состояние строки не менялось в течение всей ее жизни
в) вместо изменения состояния посылкой сообщений, реализован набор примитивов по порождению новой строки из существующей.

Это ничему не противоречит, т.к. по замыслу создателей строка и не должна вести себя как объект.
Классически-ООПшное поведение строки мешает разработчикам.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Что такое объект?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 09.10.07 11:39
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Это ничему не противоречит, т.к. по замыслу создателей строка и не должна вести себя как объект.

S>Классически-ООПшное поведение строки мешает разработчикам.

Меня озадачило. что пункты 2 и 3 твоего определения попахивают академическими знаниями и сгодились бы для книжки по теории ООП, а пункт 1 чисто практический и у тебя начинаются хаки, value-type семантика и т.д.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Что такое объект?
От: ryf  
Дата: 09.10.07 13:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

ryf>>Можно еще так: объект определяет область допустимых значений и набор допустимых операций, на самом деле это вообще неточное определение понятия "тип данных", но в общем случае объект и есть абстрактный тип данных.
S>Не совсем. Объекты и ATD — совершенно ортогональные вещи.
S>...
согласен АТД — это просто сам класс в данном случае.
Re[7]: Что такое объект?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.10.07 04:45
Оценка:
Здравствуйте, adontz, Вы писали:
A>Меня озадачило. что пункты 2 и 3 твоего определения попахивают академическими знаниями и сгодились бы для книжки по теории ООП, а пункт 1 чисто практический и у тебя начинаются хаки, value-type семантика и т.д.
Пункт один — вполне себе теоретический. Теория не указывает никаких конкретных названий методов. Просто, как факт, принимается то, что ссылки на различные объекты различны. В реальной жизни эта теория проявляется различными практическими способами. К которым ты и не замедлил перейти.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Что такое объект?
От: Аноним  
Дата: 10.10.07 09:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

[]

И можно узнать, кто этот теоретик, которого ты цитируешь?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.