Объектная идеология
От: MouseEntity Россия  
Дата: 27.11.05 21:36
Оценка:
Здравствуйте, Товарищи!

У вопрос по объектной идеологии
Я имею в виду "всё объект", "объекты обмениваются информацией только посылкой сообщений"
(ну и в соответствии с идеологией сообщение — тоже объект)

Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?
(ну или в более общей форме: как можно сравнить два объекта)
Re: Объектная идеология
От: c-smile Канада http://terrainformatica.com
Дата: 28.11.05 04:29
Оценка:
Здравствуйте, MouseEntity, Вы писали:

ME>Здравствуйте, Товарищи!


ME>У вопрос по объектной идеологии

ME>Я имею в виду "всё объект", "объекты обмениваются информацией только посылкой сообщений"
ME>(ну и в соответствии с идеологией сообщение — тоже объект)

ME>Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?

ME>(ну или в более общей форме: как можно сравнить два объекта)

Что есть "сравнить"?

Любая объектная система как минимум имеет identity operator:
  A === B 
  A is B

это атомарный оператор — не может быть перегружен.

equivalence (== или =) operator "изготавливается" на основе identity
и как правило допускает перегрузку.
Re: Объектная идеология
От: ArhAngelVezel Россия  
Дата: 28.11.05 05:52
Оценка: +1 -1
Здравствуйте, MouseEntity, Вы писали:

ME>У вопрос по объектной идеологии

ME>Я имею в виду "всё объект", "объекты обмениваются информацией только посылкой сообщений"
ME>(ну и в соответствии с идеологией сообщение — тоже объект)
ME>Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?
ME>(ну или в более общей форме: как можно сравнить два объекта)

В контексте настоящего ООП понятие "послать сообщению объекту" расценивается как "вызвать метод объекта". А как реализован вызов метода объекта на низком уровне (посылка первым параметром идентификатор метода, вызов функции с первым параметром this и т.д.) это зависит только от реализации конкретной платформы.
Re: Объектная идеология
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.11.05 09:35
Оценка:
Здравствуйте, MouseEntity, Вы писали:

ME>Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?

ME>(ну или в более общей форме: как можно сравнить два объекта)
Концепция identity является самой базовой, без нее ООП не может работать в принципе. Это и есть концепция различимости объектов, независимой от их реакции на сообщения.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Так... Кажется, сейчас начнётся.
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 28.11.05 11:36
Оценка:
Здравствуйте, MouseEntity, Вы писали:

ME>Здравствуйте, Товарищи!


ME>У вопрос по объектной идеологии

ME>Я имею в виду "всё объект", "объекты обмениваются информацией только посылкой сообщений"
ME>(ну и в соответствии с идеологией сообщение — тоже объект)

Объектом является всё.........................................кроме:
1. Явлений.
2. Информации (sic!).
3. Понятий (эйдосы, они же классы).
4. Методов и свойств объектов.
5. Алгоритмов.
6. .... и ещё до задницы всего интересного.

Кроме того, объектом не является такая вещь как волна. Вроде бы и похожа на объект, и считать их можно, стоя на берегу моря, но нет, волна — не объект.

ME>Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?

ME>(ну или в более общей форме: как можно сравнить два объекта)

Ну, это вообще не вопрос. Если равны OID, то это один и тот же объект. Не равны — извините.
Re[2]: Объектная идеология
От: MouseEntity Россия  
Дата: 28.11.05 14:03
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Концепция identity является самой базовой, без нее ООП не может работать в принципе. Это и есть концепция различимости объектов, независимой от их реакции на сообщения.


Так вот в таком случае нельзя написать проксю, не отличимую от самого объекта. Не слишком ли сильно это бьёт по идеологии?
(вообще не для всех объектов можно вводить эту концепцию, но тогда имхо идеология вообще становится уродливой...)
Re[2]: Так... Кажется, сейчас начнётся.
От: MouseEntity Россия  
Дата: 28.11.05 14:13
Оценка:
Здравствуйте, Voblin

Вообще я имел в виду идеологию "всё объект" и всё, что можно в её рамки вогнать.

V>Объектом является всё.........................................кроме:

<...>
V>2. Информации (sic!).
Ну нельзя строить идеологию на пустом месте, надо же на чём-то основываться...
Re[2]: Так... Кажется, сейчас начнётся.
От: GlebZ Россия  
Дата: 28.11.05 14:30
Оценка:
Здравствуйте, Voblin, Вы писали:

V>Объектом является всё.........................................кроме:

Нет. Все гораздо проще. Объектом в программировании называется сущность которая уникально идентифицируется, обладает поведением, обладает состоянием.
Уникально идентифицируется — можно узнать является ли он одной и той-же сущностью.
Поведение — обладание объекта некоторым типом которое определяет поведение сущности.
Состояние — данные.

V>Ну, это вообще не вопрос. Если равны OID, то это один и тот же объект. Не равны — извините.

Честно говоря OID — это некоторый суррогат для идентификации. В большинстве случаев, в языках программирования идентификатором выступает адрес памяти. OID-же более строгая вещь чем адрес в памяти.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Так... Кажется, сейчас начнётся.
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 28.11.05 14:38
Оценка:
Здравствуйте, Voblin, Вы писали:

V>Объектом является всё.........................................кроме:


Объектом является всё, в рамках некой объектой системы. Соответсвенно, вне рамок системы нет никаких програмных объектов. Вообще.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[3]: Так... Кажется, сейчас начнётся.
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 28.11.05 18:04
Оценка:
Здравствуйте, MouseEntity, Вы писали:

V>>Объектом является всё.........................................кроме:

ME><...>
V>>2. Информации (sic!).
ME>Ну нельзя строить идеологию на пустом месте, надо же на чём-то основываться...
Информация — это сообщение. Соответственно, некие операции над ней выполняются на стороне отправителя и на стороне получателя. Сама информация никакой инкапсуляцией обладать не может.
Re: Объектная идеология
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 28.11.05 19:08
Оценка:
Здравствуйте, Товарищ, Вы писали:

ME>Здравствуйте, Товарищи!


ME>Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?

ME>(ну или в более общей форме: как можно сравнить два объекта)

Объекту посылается имя сообщения и список аргуметов.
Чтоб отправителю знать, кому посылать сообщение, объекта должен обладать identity (самое естественное — адрес в памяти).
-- Андрей
Re[2]: Так... Кажется, сейчас начнётся.
От: Gaperton http://gaperton.livejournal.com
Дата: 28.11.05 19:45
Оценка: +1 :))
Здравствуйте, Voblin, Вы писали:

V>Кроме того, объектом не является такая вещь как волна. Вроде бы и похожа на объект, и считать их можно, стоя на берегу моря, но нет, волна — не объект.


class Wave
{
   double phi, Amp, T;
//...

public:
   double GetVaweValueAtPoint( double x ) { return Amp * cos( phi + x / T * pi ); }
   int CountInRange( double a, double b ) { return ( b - a )/T; }
}




Re[4]: Так... Кажется, сейчас начнётся.
От: MouseEntity Россия  
Дата: 28.11.05 22:32
Оценка:
Здравствуйте, Voblin, Вы писали:

V>Информация — это сообщение. Соответственно, некие операции над ней выполняются на стороне отправителя и на стороне получателя. Сама информация никакой инкапсуляцией обладать не может.


Это уже философский вопрос.

Я вообще рассматривал чистую идеологию:
Если в её рамках смотреть на информацию как на сообщение, то она как раз объект.

Если же рассматривать фразу "объекты обмениваются информацией только посылкой сообщений", то получается "объекты обмениваются сообщениями только посылкой сообщений" (всё логично). Но тут имхо информация имеет более фундаметальный смысл, выходящий за рамки идеологии и затрагивающий события внутри объекта (типа событие в одном объекте может быть следствием события в другом объекте только если они обменивались информацией в промежутке времени между событиями)
Re[5]: Так... Кажется, сейчас начнётся.
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 28.11.05 23:05
Оценка:
Здравствуйте, MouseEntity, Вы писали:

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


V>>Информация — это сообщение. Соответственно, некие операции над ней выполняются на стороне отправителя и на стороне получателя. Сама информация никакой инкапсуляцией обладать не может.


ME>Это уже философский вопрос.


ME>Я вообще рассматривал чистую идеологию:

ME>Если в её рамках смотреть на информацию как на сообщение, то она как раз объект.

ME>Если же рассматривать фразу "объекты обмениваются информацией только посылкой сообщений", то получается "объекты обмениваются сообщениями только посылкой сообщений" (всё логично). Но тут имхо информация имеет более фундаметальный смысл, выходящий за рамки идеологии и затрагивающий события внутри объекта (типа событие в одном объекте может быть следствием события в другом объекте только если они обменивались информацией в промежутке времени между событиями)


По моему мнению, чистый ООП не имел целью ответить на вопрос "что является объектом?".
Акцент ООП — на посылке сообщения.

А уж решать что является и не является объектом нужно в зависимости от предметной области,
в которой происходит проектирование.
-- Андрей
Re[3]: Объектная идеология
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.11.05 03:46
Оценка:
Здравствуйте, MouseEntity, Вы писали:
ME>Так вот в таком случае нельзя написать проксю, не отличимую от самого объекта. Не слишком ли сильно это бьёт по идеологии?
Нет, не слишком. Потому, что идеология относительно редко требует точного равенства.
Обычно просто вводят понятие эквивалентности, которое решает эту проблему (если она есть).
ME>(вообще не для всех объектов можно вводить эту концепцию, но тогда имхо идеология вообще становится уродливой...)
Нет, так нельзя. Отсутствие идентити означает невозможность точно адресовать сообщение. ООП построено как раз на точной адресации.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Объектная идеология
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 29.11.05 04:42
Оценка:
Здравствуйте, MouseEntity, Вы писали:

ME>У вопрос по объектной идеологии

ME>Я имею в виду "всё объект", "объекты обмениваются информацией только посылкой сообщений"
ME>(ну и в соответствии с идеологией сообщение — тоже объект)

ME>Так вот: как в таком случае объект узнаёт, какое сообщение ему пришло?


Для этого сначала определяют способы опознавания сообщений. Даже если сообщение будет иметь формат:

struct message
{
  const char *message_type;
    const char *narrative;
    const char *parameters;
};


то где-то в цикле обработки этого сообщения будет стоять что-тов роде такого:

if (!strcmp(msg->message_type, "type1")) { ... }
else if (!strcmp(msg->message_type, "type2")) { ... }


и т.п.

ME>(ну или в более общей форме: как можно сравнить два объекта)


Правильный ответ — никак, если не определены способы их сравнения. Потому что правильное использование объектной идеологии подразумевает, что ты не будешь сравнивать объекты несравнимых типов. Ну не сравниваешь же ты bool и float, к примеру (ша! я сказал bool и float, а не bool с результатом (fabs(float_value) < epsilon))!

Для всех прочих случае так или иначе определяют однозачные и непротиворечивые способы сравнения. По адресу, по OID, по GUID, по xxxID — не суть, это уже implementation details.




И выбрось ты из головы эту идиотскую ОО-апологетику: "неизветсно что, неизвестно откуда, неизвестно как, но, блин, работает!". Запомни, а лучше запиши — всегда известно что, известно как, известно откуда и куда. В противном случае — не нужно. Мутации возможны только в очень ограниченных пределах. Если что-то не известно на этапе компиляции, то предусматриваются способы распознавания в рантайме.
<<RSDN@Home 1.1.4 stable SR1 rev. 568>>
Music: Ricchi a Poveri — Come Vorrei

Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Так... Кажется, сейчас начнётся.
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 29.11.05 06:40
Оценка:
Здравствуйте, Gaperton, Вы писали:
G>class Wave
G>{
G>   double phi, Amp, T;
G>//...

G>public:
G>   double GetVaweValueAtPoint( double x ) { return Amp * cos( phi + x / T * pi ); }
G>   int CountInRange( double a, double b ) { return ( b - a )/T; }
G>}
G>

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

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

В случае с лужей даже нельзя чётко ответить на вопрос о том, есть ли "горб волны" в некоем интервале. Наличие локальных максимумов (нулевая первая производная и отрицательная вторая) — не интересно, так как совсем мелкая рябь нас не интересует, а задать чёткий критерий того, что нужно уже определённо считать волной, мы не можем. С точки зрения физики и математики по луже распространяется любое возмущение.
Re[5]: Так... Кажется, сейчас начнётся.
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 29.11.05 06:55
Оценка:
Здравствуйте, MouseEntity, Вы писали:

ME>Я вообще рассматривал чистую идеологию:

ME>Если в её рамках смотреть на информацию как на сообщение, то она как раз объект.

Позволю себе обширную цитату отсюда:

Информация (от лат. informatio — разъяснение, изложение)

  • Некоторая совокупность сведений, знаний, которые актуализируемы (получаемы, передаваемы, преобразуемы, сжимаемы и/или регистрируемы) с помощью некоторых знаков (символьного, образного, жестового, звукового, сенсомоторного типа).
  • Сведения об окружающем мире и протекающих в нём процессах, воспринимаемые человеком или специальным устройством и передаваемые другим людям устным, письменным или другим способом. См. также передача информации, общение, семиотика, теория информации.
  • Сообщения, осведомляющие о положении дел, о состоянии чего-нибудь, обмен сведениями. См. также научно-техническая информация, газетная информация, средства массовой информации.
  • В математике, системном анализе — любая сущность, которая вызывает изменения в некоторой информационно-логической (инфологической — состоящей из сообщений, данных, знаний. абстракций и т. д.) модели, представляющей систему;
  • В теории управления, кибернетике — сообщения, полученные системой от внешнего мира в процессе адаптивного управления, приспособления;
  • В термодинамике — отрицание энтропии, отражение меры хаоса в системе;
  • В теории информации — связи и отношения, устраняющие неопределённость в системе;
  • В теории вероятностей — вероятность выбора в системе;
  • В физиологии, биокибернетике — отражение и передача разнообразия в системе;
  • Генетическая информация как совокупность наследственных признаков, передаваемых от клетки к клетке, от организма к организму.
  • В философии — отражение материи, атрибут сознания, “интеллектуальности” системы.

  • А теперь давайте вспомним свойства объекта:
  • Идентичность. Сами по себе сведения никакими дополнительными OID не обладают. Песенка "House of the Rising Sun", которая сейчас играет в моих наушниках, сама по себе никакого OID не имеет. И вот это выделенное курсивом слово не имеет OID. Запомните, товарищи: в общем случае информация идентифицируется по своему содержимому. Уникальный идентификатор может временно присваиваться информационным посылкам чисто для удобства манипулирования.
  • Наличие внутреннего состояния. Ну, хоть с этим всё в порядке...
  • Способность принимать сообщения. Убейте меня об стену, но принимать сообщение способны многочисленные и весьма разнородные получатели сообщений, а само сообщение принимать сообщения не может!!!!!!
  • Re[6]: Так... Кажется, сейчас начнётся.
    От: Voblin Россия http://maslyaew.narod.ru/
    Дата: 29.11.05 06:56
    Оценка:
    Здравствуйте, Андрей Коростелев, Вы писали:

    АК>По моему мнению, чистый ООП не имел целью ответить на вопрос "что является объектом?".

    АК>Акцент ООП — на посылке сообщения.
    Это как если бы тригонометрия не содержала определения синуса
    Re[6]: Так... Кажется, сейчас начнётся.
    От: GlebZ Россия  
    Дата: 29.11.05 10:17
    Оценка:
    Здравствуйте, Voblin, Вы писали:

    V>
  • Способность принимать сообщения. Убейте меня об стену, но принимать сообщение способны многочисленные и весьма разнородные получатели сообщений, а само сообщение принимать сообщения не может!!!!!!
    Ну это смотря куда сообщение. Ежели в Тамбовскую, или Курскую губернию, то не сможет. А вот если в языке поддерживающем функции высшего порядка, то почему бы и нет.

    С уважением, Gleb.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
  • Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.