Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

Как создать событие на изменение своей переменной   Найти похожие ветки 

 
MasterKolyan   (2004-02-27 14:19) [0]

<Уважаемые мастера Delphi: я думаю вы сталкивались с такой проблемой, или хотели когда-то открыть новую возможность своей проги>
<предисловие>
Как обрабатывать события (стандартные (у компонентов)) или Wind-ы - это понятно, а вот
<вопрос>
как обработать своё какое нибудь нестандартное (левое) событие, да так чтоб ещё и скорость не уступала стандартным - неясна....


 
Fay   (2004-02-27 14:20) [1]

хрень какая-то...


 
Anatoly Podgoretsky   (2004-02-27 14:22) [2]

Ни как


 
Алхимик   (2004-02-27 14:24) [3]

Копай в сторону TEvent.


 
Юрий Зотов   (2004-02-27 14:30) [4]

> MasterKolyan (27.02.04 14:19)

Если Вы хотите услышать конкретный ответ - задайте конкретный вопрос.


 
Никто   (2004-02-27 14:37) [5]

1. По идеологии ООП "вызов метода" аналогичен "посылке сообщения".
2. "Событие на изменение переменной" - это из области свойств:
property MyVariable: integer read m_iMyVariable write SetMyVariable;
в таком случае SetMyVariable - метод, вызываемый при (попытке) изменения переменной (см. п. 1).


 
Eagle-XK   (2004-02-27 14:41) [6]

Приведи пример программы и укажи, что конкретно ты хочешь! (тут же бывают и кадры, которые не знают, как обработать простой Эдит :-) )
Тем более, что переменную можешь изменить только ТЫ или внешняя программа (вроде АртМаны, Сосульки и т.д.). Тогда совет - проверяй ее почаще!


 
MasterKolyan   (2004-02-27 14:41) [7]

а как тогда события на Delphi-нские компоненты реализовываются: Window-возовские события чтоли используют


 
Digitman   (2004-02-27 14:42) [8]


> Никто (27.02.04 14:37) [5]
> 1. По идеологии ООП "вызов метода" аналогичен "посылке сообщения".


что за ерунда ?

вызов метода ООП-объекта - это вызов метода ООП-объекта
посылка Win-сообщения - это посылка Win-сообщения

никакой "аналогии" нет даже в первом приближении


 
MasterKolyan   (2004-02-27 14:44) [9]

свои события можно обрабатывать Timer-ом или application.idle-ом но мне кажется что они будут тормозить процесс....


 
Digitman   (2004-02-27 14:46) [10]


> MasterKolyan (27.02.04 14:44) [9]


ты путаешь понятия "возбуждение события" и "обработка события"


 
Digitman   (2004-02-27 14:49) [11]


> MasterKolyan (27.02.04 14:44) [9]
> свои события можно обрабатывать Timer-ом


какие же они "свои" ? объект-таймер возбуждает собственное событие - OnTimer(), равно как и объект-аппликация возбуждает собственное событие - OnIdle() ..

ты же волен только обрабатывать или не обрабатывать (игнорировать) эти события, назначив или не назначив им соотв.методы-обработчики


 
MasterKolyan   (2004-02-27 14:49) [12]

а как же они тогда возбуждаются?


 
MasterKolyan   (2004-02-27 14:54) [13]

Digitman © (27.02.04 14:49) [11]
ты же волен только обрабатывать или не обрабатывать (игнорировать) эти события, назначив или не назначив им соотв.методы-обработчики

так что же это получается программист должен ограничивать возможности своей проги в силу недостатка каких-то там событий, и не может даже добавить к стандартным какое-то своё чтобы снять ограничение....странно....


 
Digitman   (2004-02-27 14:55) [14]


> MasterKolyan (27.02.04 14:49) [12]
> а как же они тогда возбуждаются?


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

например, в модуле stdctrls.pas найди реализацию метода

procedure TTimer. Timer;
begin
if Assigned(FOnTimer) then FOnTimer(Self); //здесь и вызывается твой собственный обработчик, если он тобой назначен
end;

а вот оконная процедура, в которой приложения реагирует на системные события таймера и при наличии таковых возбуждает собственно прикладное событие этого таймера :

procedure TTimer.WndProc(var Msg: TMessage);
begin
with Msg do
if Msg = WM_TIMER then
try
Timer; //вот оно - возбуждение события !!
except
Application.HandleException(Self);
end
else
Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;


 
Digitman   (2004-02-27 14:58) [15]


> MasterKolyan (27.02.04 14:54) [13]
> так что же это получается программист должен ограничивать
> возможности своей проги в силу недостатка каких-то там событий,
> и не может даже добавить к стандартным какое-то своё чтобы
> снять ограничение....странно....


ну почему же ? никаких ограничений на это счет нет !

ты вправе создать собственный компонент, например, на базе уже существующего (т.е. создать собственный класс-наследник некоего существующего класса, например, TTimer), и определить/реализовать в нем собственный механизм возбуждения нужных тебе событий, которыми будет управлять экземпляр твоего класса


 
Никто   (2004-02-27 14:58) [16]

2 Digitman
Читайте внимательнее: не "Win-сообщение", а "сообщение". Это разные вещи. Вызов метода - единственный способ общения с экемпляром класса. Вызывая метод, мы посылаем экземпляру класса сообщение. (Читайте об идеологии ООП). Win-сообщения - суррогат, призванный внести единообразие в различные способы вызовов методов (stdcall, pascal, ...).


 
Digitman   (2004-02-27 15:02) [17]


> Вызывая метод, мы посылаем экземпляру класса сообщение


вызывая метод, мы всего лишь вызываем метод) ... не более и не менее того ... никакими "сообщениями" в этот момент (т.е. в момент вызова метода) даже не пахнет - просто выполняется маш.инструкция call, передающая управление указанно подпрограмме


 
Eagle-XK   (2004-02-27 15:03) [18]

2 MasterKolyan

Да моджно создать свое событие и обрабатывать его, тут никаких проблемм!


 
Defunct   (2004-02-27 15:05) [19]

MasterKolyan (27.02.04 14:49) [12]

Для того чтобы понять откуда берутся события, читаем классику про систему прерываний. И потом интерпретируем на многозадачную ОС.

Возбуждаются события 3-мя путями:
- аппаратно (юзер нажал на какую-то кнопку, такт системного таймера и т.п.)
- программно (программа "А", послала сообщение программе "Б")
- в результате какой-то ошибки (команда деление на 0).

Все эти события принимают вид сообщения виндовс, которое мы можем прочитать в полях Message. В программе есть цикл выборки сообщений видовс и далее обработка всех событий характерных для данной программы.


 
Digitman   (2004-02-27 15:06) [20]


> Win-сообщения - суррогат, призванный внести единообразие
> в различные способы вызовов методов (stdcall, pascal, ...).


как раз не суррогат, а идеол.концепция функционирования Win32-систем

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


 
Никто   (2004-02-27 15:07) [21]

2 Digitman
>>вызывая метод, мы всего лишь вызываем метод
Не путайте процедурное программирование с ООП. Вызов метода в ООП - запрос к объекту, сообщение. И никак не иначе.


 
MasterKolyan   (2004-02-27 15:09) [22]

Digitman © (27.02.04 14:55) [14]
procedure TTimer.WndProc(var Msg: TMessage);
begin
with Msg do
if Msg = WM_TIMER then
try
Timer; //возбуждение события
except
Application.HandleException(Self);
end
else
Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);//а эта строка вообще непонятно зачем(ну это не важно)
end;

а msg тогда чо не событие разве(между прочим таймер - это стандартное событие, а как возбуждать событие на изменение байта памяти всё еще непонятно....


 
Тимохов   (2004-02-27 15:11) [23]


> а как возбуждать событие на изменение
> байта памяти всё еще непонятно...

Никак без дополнительных примочек.


 
Никто   (2004-02-27 15:11) [24]

2 Digitman
Специально нашел: http://pmi.ulstu.ru/new_project/objects/lections.htm
Обратите внимание на п. 2. Это не про Win-сообщения. Это про то, что процедурные программисты привыкли называть вызов процедуры или функции.


 
Digitman   (2004-02-27 15:11) [25]


> Никто (27.02.04 15:07) [21]

а о каких методах в процед.прогр-нии вообще может идти речь ? Нет там никаких методов) .. Термин "метод класса" или "метод объекта" применим лишь в ООП


> Вызов метода в ООП - запрос к объекту, сообщение


Вызов метода в ООП - всего лишь вызов тем или иным способом подпрограммы, реализующей этот метод.


 
Никто   (2004-02-27 15:15) [26]

2 Digitman
Я вроде о вызове методов в процедурном программировании и не говорил. Я только лишь просил "не путать".


 
Digitman   (2004-02-27 15:15) [27]


> Никто (27.02.04 15:11) [24]



> про то, что процедурные программисты привыкли называть вызов
> процедуры или функции.


ну а какая разница-то ? в ПП - вызов процедуры или ф-ции, в ООП - вызов процедурного или функционального метода) ... Те же яйца, но вид сбоку) ... как был вызов подпрограммы, так он им и остался, только что название изменилось


 
Defunct   (2004-02-27 15:16) [28]

MasterKolyan (27.02.04 14:54) [13]
> так что же это получается программист должен ограничивать возможности своей проги в силу недостатка каких-то там событий, и не может даже добавить к стандартным какое-то своё чтобы снять ограничение....странно....

Все события обрабатываются диспетчером событий ОС, а в нашу программу попадают в виде сообщения. Программа с объектом Application автоматически принимает каждое событие и заносит его идентификатор в переменную Message. Далее мы вольны сами решить стоит нам обработать это событие или нет.


 
Defunct   (2004-02-27 15:22) [29]

Никто (27.02.04 15:07) [21]
2 Digitman
>>вызывая метод, мы всего лишь вызываем метод
>Не путайте процедурное программирование с ООП. Вызов метода в ООП - запрос к объекту, сообщение. И никак не иначе.


Это какая-то чипуха. На ассеблере что вызов процедуры, что вызов метода выпоняется командой Call. Вызов метода не имеет никакого отношения к сообщениям ОС.


 
Digitman   (2004-02-27 15:23) [30]


> Никто (27.02.04 15:15) [26]
> 2 Digitman
> Я вроде о вызове методов в процедурном программировании
> и не говорил. Я только лишь просил "не путать".


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

а вот причинно-следственная связь ДО сего момента выглядит строго определенно : возбуждение объектом события с возможным последующем вызовом метода-обработчика есть следствие приема/обработки сообщения (или реакция на некий системный callback-вызов) и никак не наоборот


 
Никто   (2004-02-27 15:24) [31]

Да, вот только вызвать private метод не получится, хоть он и "то же яйцо". Передача сообщений - это вызов только public методов и только внешними объектами. Для самого объекта это уже не собщение - это именно вызов собственного метода. И для этого объекта не важно, какой этот метод: public или private; важно, что это его собственный метод. Вызов метода одного объекта другим (внешним) объектом - посылка сообщения. Так уж оно в ООП называется. Термин такой. Не более и не менее.

P.S. Кому не нравится - может заменить слово "объект" на "экземпляр класса".


 
MasterKolyan   (2004-02-27 15:26) [32]

Defunct © (27.02.04 15:16) [28]
значит всё-таки нельзя создать обработчик события на изменение ячейки памяти без использования других сообщений(их обработчиков)...


 
Никто   (2004-02-27 15:26) [33]

Борьба терминологий...


 
Тимохов   (2004-02-27 15:29) [34]


> MasterKolyan (27.02.04 15:26) [32]

Это вам уже было сказано в [2]


 
Anatoly Podgoretsky   (2004-02-27 15:29) [35]

А зачем нам путать, тут и место та для путаницы нет

Никто (27.02.04 14:58) [16]
2 Digitman
Читайте внимательнее: не "Win-сообщение", а "сообщение". Это разные вещи. Вызов метода - единственный способ общения с экемпляром класса. Вызывая метод, мы посылаем экземпляру класса сообщение. (Читайте об идеологии ООП). Win-сообщения - суррогат, призванный внести единообразие в различные способы вызовов методов (stdcall, pascal, ...).


 
Digitman   (2004-02-27 15:32) [36]


> Defunct © (27.02.04 15:22) [29]


> Это какая-то чипуха. На ассеблере что вызов процедуры, что
> вызов метода выпоняется командой Call. Вызов метода не имеет
> никакого отношения к сообщениям ОС.


а я разве говорил иначе ?!
и при чем здесь ассемблер как языковая среда ? call-инструкция - это далеко не ассемблер)

ну а уж коль ты о "ч ипухе", то как раз ты несешь несуразицу


> Программа с объектом Application автоматически принимает
> каждое событие и заносит его идентификатор в переменную
> Message


никакие "события" объект Application не принимает, он циклически ожидает и диспетчеризует Win- сообщения, параметры которых на момент диспетчеризации хранит во врем.структуре TMessage

а вот уже диспетчеризованные таким образом Win-сообщения могут обрабатываться той или иной оконной ф-цией, которая вполне может быть реализована в контексте того или иного VCL-объекта, который в свою очередь (как реакцией на обработку этого Win-сообщения) может возбуждать те или иные события VCL-объекта


 
Digitman   (2004-02-27 15:34) [37]


> Никто (27.02.04 15:24) [31]


о боже) ... припрел еще сюда и область видимости идентификатора в составе класса)) ... это-то здесь причем ?!


 
Defunct   (2004-02-27 15:36) [38]

MasterKolyan (27.02.04 15:26) [32]
> значит всё-таки нельзя создать обработчик события на изменение ячейки памяти без использования других сообщений(их обработчиков)...

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


 
Никто   (2004-02-27 15:37) [39]

>>ты упомянул о каких-то там "сообщениях"
я упомянул, что в случае
property MyVariable: integer read m_iMyVariable write SetMyVariable;
SetMyVariable - метод, вызываемый при (попытке) изменения переменной (см. п. 1).
И еще сказал, что вызов метода называется посылкой сообщения.
В данном случае при попытке изменить MyVariable посылается сообщение SetMyVariable (с параметром, например, a_iNewValue), в обработчике которого можно обработать событие: изменение переменной.
Или я неясно сформулировал?


 
MasterKolyan   (2004-02-27 15:39) [40]

Digitman © (27.02.04 15:32) [36]
никакие "события" объект Application не принимает, он циклически ожидает и диспетчеризует Win-сообщения, параметры которых на момент диспетчеризации хранит во врем.структуре TMessage
//
хм. а может этот Application и чего-нибудь моё может продиспетчеризовать....


 
Erik   (2004-02-27 15:40) [41]

MasterKolyan
Изложи свою проблему в общем виде(зачем это надо), мы поможем. :) Это просто пример от руки:
My = class
private
fVarA: Integer;
procedure SetVarA(Value: Integer);
public
fNotify: TNotifyEvent;
property VarA: Integer read fVarA write SetVarA;
end;

procedure My.SetVarA(Value: Integer);
begin
fVarA := Value;
if Assigned(fNotify) then
fNotify(TObject(@Value)); //Обратно привести незабудь! А то получиш Exception!
end;


 
Digitman   (2004-02-27 15:40) [42]


> MasterKolyan (27.02.04 15:26) [32]
> Defunct © (27.02.04 15:16) [28]
> значит всё-таки нельзя создать обработчик события на изменение
> ячейки памяти без использования других сообщений(их обработчиков)...


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


 
Defunct   (2004-02-27 15:41) [43]

Defunct © (27.02.04 15:36) [38]
Чуть неверно выразился.

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


 
Юрий Зотов   (2004-02-27 15:42) [44]

> Никто

Зря спорите. Вы неправы.

Вызов метода - это вызов метода. Ни с какими сообщениями не связан. Производится точно так же, как и вызов обычной процедуры. Транслируется в тот же самый CALL.


 
Никто   (2004-02-27 15:44) [45]

2 Digitman
Вы спорите ради того, чтобы спорить. Вы (вроде бы)воспринимаете мои аргументы, но все равно продолжаете спорить. С Вами просто неинтересно.


 
Defunct   (2004-02-27 15:48) [46]

Digitman © (27.02.04 15:32) [36]
> а я разве говорил иначе ?!

Ну, а я что говорю?

Никто (27.02.04 15:07) [21]
2 Digitman
>>вызывая метод, мы всего лишь вызываем метод
>Не путайте процедурное программирование с ООП. Вызов метода в ООП - запрос к объекту, сообщение. И никак не иначе.


Придрался к выделенному жирным


 
MasterKolyan   (2004-02-27 15:48) [47]

Defunct © (27.02.04 15:41) [43]
Читайте документацию про трассировку и отладочные режимы x86.
"А где возьмешь.."


 
Digitman   (2004-02-27 15:49) [48]


> Никто (27.02.04 15:37) [39]
> сказал, что вызов метода называется посылкой сообщения.
> В данном случае при попытке изменить MyVariable посылается
> сообщение SetMyVariable (с параметром, например, a_iNewValue),
> в обработчике которого можно обработать событие: изменение
> переменной.


вызов метода никогда не назывался и не называется посылкой сообщения, вызов метода - это вызов метода !! Это просто вызов подпрограммы !!

никакое сообщение SetMyVariable никуда не посылается, просто вызывается некий метод SetMyVariable !! Мало ли что в теле этого метода делается !! При чем здесь сообщение-то ? Вот ты уперся в свои сообщения)) ... Это просто синхронный вызов некоей подпрограммы в контексте одного и того же кодового потока !


 
Никто   (2004-02-27 15:49) [49]

2 Юрий Зотов
И все же в терминах ООП это именно так называется.


 
Тимохов   (2004-02-27 15:49) [50]

Вопрос терминологии и придирки к словам.
Имхо всем понятно о чем речь.


 
Defunct   (2004-02-27 15:52) [51]

Digitman © (27.02.04 15:32) [36]

может тебя там смутила строка

Никто (27.02.04 15:07) [21]
2 Digitman
>>вызывая метод, мы всего лишь вызываем метод
>Не путайте процедурное программирование с ООП. Вызов метода в ООП - запрос к объекту, сообщение. И никак не иначе.


Так это я просто скопировал [21]

> ну а уж коль ты о "чипухе", то как раз ты несешь несуразицу

несуразицы я никакой не несу.

Вот подтверждение моих слов:

Юрий Зотов © (27.02.04 15:42) [44]
> Производится точно так же, как и вызов обычной процедуры. Транслируется в тот же самый CALL.


 
Digitman   (2004-02-27 15:52) [52]


> Никто (27.02.04 15:44) [45]


> Defunct © (27.02.04 15:48) [46]


терминология едина и устойчива, никакой двусмысленности нет и быть не может

событие - это событие, а сообщение - это сообщение

из-за нечеткого понимания сходств и различий того, что подразумевается в том или ином случае под этими терминами и происходят вот такие баталии)


 
Тимохов   (2004-02-27 15:53) [53]


> Никто (27.02.04 15:49) [49]

Еще сюда можно uml присовокупить :))))


> Digitman © (27.02.04 15:49) [48]


Имхо зря вы придираетесь к словам о сообщениях.
Полагаю, что никто имел в виду, что такое сообщение можно послать. Сомневаюсь, что кто-нить считающий, что при вызове метода происходит вызов вин-сообщения, решился бы принять участие в обсуждении.


 
Polevi   (2004-02-27 15:53) [54]

>Никто (27.02.04 15:37) [39]
кому посылается то ? где цикл выборки ?


 
Erik   (2004-02-27 15:56) [55]

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


 
Никто   (2004-02-27 15:58) [56]

еще раз: http://pmi.ulstu.ru/new_project/objects/lections.htm

2 Polevi
"при котором один объект посылает запрос другому объекту"

P.S. Мне уже порядком надоела эта пустая дискуссия. Все уже все поняли. Да только непонятно что друг другу доказываем.


 
Polevi   (2004-02-27 16:00) [57]

ты в меншинстве, смирись :)


 
PVOzerski   (2004-02-27 16:00) [58]

А заменить переменную на property нельзя? Тогда не очень много кода переписывать придется... Хотя, конечно, можно пусить 2-й поток с циклом, из которого проверять значение переменной и при его изменениии "дергать" обработчик события...


 
Digitman   (2004-02-27 16:01) [59]


> Никто (27.02.04 15:44) [45]
> Вы спорите ради того, чтобы спорить. Вы (вроде бы)воспринимаете
> мои аргументы, но все равно продолжаете спорить.



>С Вами просто неинтересно.


Ну, веселить тебя, положим, у меня тоже нет великого желания)

Глянул я в тот гениальный по краткости манускрипт, на который ты сослался и, как и ожидал, не нашел в нем ни единого упоминания о каких-то там сообщениях

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

Если ты об этой фразе, то запрос - понятие весьма абстрактное и растяжимое. Конкретно в данном случае этот самый запрос есть просто вызов метода, тот самый пресловутый CALL


 
Defunct   (2004-02-27 16:01) [60]

MasterKolyan (27.02.04 15:48) [47]
здесь:
www.intel.com

не хочется на англ. ищите через Rambler или Yandex. статей с примерами по этому вопросу много.


 
Polevi   (2004-02-27 16:05) [61]

ааа я понял где цикл выборки !!! он в процессоре !!! цикл выборки команд !!!
:-))


 
Никто   (2004-02-27 16:07) [62]

2 Digitman
Уважаемый. Это не манускрипт. Это аксиомы ООП. Не нравится краткость, тогда: http://grizlyk.chat.ru/badd/4.htm#t0411


 
VLAD-MAL   (2004-02-27 16:09) [63]

Ух, какой флейм из-за фигни... И главное, каждый себя правым считает. Жаль, нет времени - зарплату привезли...


 
Юрий Зотов   (2004-02-27 16:11) [64]

> Никто (27.02.04 15:49) [49]

> И все же в терминах ООП это именно так называется.

Ну, положим, про термины ООП я тоже кое-что знаю. Поэтому попросил бы ссылку в студию.

Только, пожалуйста, серьезную и авторитетную. А не ту страничку в стиле "Vasja Pupkin Homepage", на которую Вы уже ссылались. Потому что я таких страничек тоже могу штук 100 написать, вот верите? И даже без перлов типа "Каждый объект имеет независимую память, которая состоит из его объектов родителей".


 
Никто   (2004-02-27 16:13) [65]

Попытаюсь еще раз...

type
TParentObject = class
public
procedure DoIt; virtual;
end;

TChildObject = class
public
procedure DoIt; override;
end;

var
ParentObj: TParentObj;

begin
ParentObj := TChildObj.Create;
ParentObj.DoIt;
...

DoIt - это сообщение или метод? Если Вы скажете, что метод, то чей метод? В данном контексте это - сообщение. Потому что это - не метод, так как (в общем случае) даже на этапе компоновки Вы можете не знать, чей именно метод будет вызван: TParentObj или TChildObj...


 
Никто   (2004-02-27 16:16) [66]

Прошу прощения:
TChildObject = class(TParentObj)


 
Digitman   (2004-02-27 16:16) [67]


> Никто (27.02.04 16:07) [62]


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


 
Никто   (2004-02-27 16:18) [68]

кхм.. прошу прощения, Obj - Object... и наоборот...


 
Никто   (2004-02-27 16:21) [69]

2 Digitman
Честное слово, трактовки этой даже не читал... просто нашел в rambler"е первую попавшуюся более-менее серьезную книгу про ООП. В других, как ни странно, то же самое... "Сговорились они, что ли?" (С)


 
Polevi   (2004-02-27 16:21) [70]

да, отстал я от жизни..


 
Polevi   (2004-02-27 16:23) [71]

я вот помню лет так 10 назад читал такую книжечку желтенькую.. си++ для чайников назвылась :)) не было там про сообщения ничего, видимо к тому времени не придумали еще :)


 
Defunct   (2004-02-27 16:24) [72]

Никто (27.02.04 16:07) [62]
Так это какой-то левый источник. Уверен Digitman и сам такое написать может, только в более правильной форме.

VLAD-MAL (27.02.04 16:09) [63]
Ничего ж себе фигня..
А вы попробуйте отследить изменение области памяти не прибегая к опросу этой переменной.


 
Юрий Зотов   (2004-02-27 16:25) [73]

> Никто (27.02.04 16:13) [65]

> DoIt - это сообщение или метод?

Это виртуальный метод.

> Если Вы скажете, что метод, то чей метод?

Это метод TParentObject и всех его потомков.

> В данном контексте это - сообщение.

Если бы в Borland умели читать по-русски, они бы очень сильно удивились.

> Потому что это - не метод, так как (в общем случае) даже на
> этапе компоновки Вы можете не знать, чей именно метод будет
> вызван: TParentObj или TChildObj...

В самом деле? Тогда скажите - что содержится в первых четырех байтах экземпляра объекта и для чего оно там нужно?

=======================

Знаете, а почему бы не почитать НОРМАЛЬНУЮ литературу? Вместо Vasja Pupkin Homepage?


 
Digitman   (2004-02-27 16:26) [74]


> Никто (27.02.04 16:13) [65]


DoIt - это метод ) ... хоть раком хоть боком на него гляди
и компановка со всякими там этапами никак не заставит метод стать НЕметодом))))


 
nikkie   (2004-02-27 16:27) [75]

по-моему [5] был достаточно логичный ответ.

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

Объектно-ориентированное программирование (ООП) часто называют новой парадигмой программирования. Вот как выглядят основные принципы ООП в изложении Алана Кэя, одного из авторов объектно-ориентированной системы Смолток:

1. Все является объектом.

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

...


 
Verg   (2004-02-27 16:28) [76]


> DoIt - это сообщение или метод? Если Вы скажете, что метод,
> то чей метод?


Конечно же method, а не message, хотя тоже на букву "m" :))


 
nikkie   (2004-02-27 16:30) [77]

>Polevi
>да, отстал я от жизни..
видимо так
>я вот помню лет так 10 назад ...
надо было лет 30 назад :))

еще раз, если непонятно - о Windows messages никто (Никто) не говорит. речь об идеологии ООП. что мешает уважаемым людям воспринимать общение между объектами как посылку сообщений - не очень понятно.


 
Digitman   (2004-02-27 16:32) [78]


> nikkie © (27.02.04 16:27) [75]


все бы ничего, если бы мы здесь не говорили о Win32 ..
и когда некий автор ответного поста говорит о "сообщениях" некоему автору, явно плохо ориентирующемуся в терминологии, этому автору следовало бы сразу же расставить все точки над i , мол, под "сообщением" я понимаю трактовку Васьки Пупкина с такого-то Хомпейджа))


 
Polevi   (2004-02-27 16:34) [79]

>nikkie © (27.02.04 16:30) [77]
если вы бы читали "эту желтенькую книжечук" вы бы знали что в ней ни слова не было про операционную систему windows, в то время win95 еще не было, 93 год
она как раз целиком была посящена языку c++ и реализации ООП в нем


 
Никто   (2004-02-27 16:36) [80]

2 nikkie
Спасибо... :)

2 Verg
неуместно...

2 All
Завязываем дискуссию...


 
Digitman   (2004-02-27 16:36) [81]


> Verg © (27.02.04 16:28) [76]


и ведь истинно метод !! и по барабану чей и как компонуется - вот что важно-то) ... мы тут - о текущем код.потоке .. никакой асинхронности !


 
Polevi   (2004-02-27 16:38) [82]

>Digitman © (27.02.04 16:36) [81]
щас про SendMessage напмнят :-)


 
Fay   (2004-02-27 16:38) [83]

Можно не смотреть с календарь. И так видно - пятница. 8)


 
nikkie   (2004-02-27 16:39) [84]

>Digitman
>все бы ничего, если бы мы здесь не говорили о Win32 ..

не знаю почему, но действительно не которые пытаются свести понимание "сообщения" к win32 исключительно. хотя, имхо, в первых двух постах Никто очень четко написано:
[5]: 1. По идеологии ООП "вызов метода" аналогичен "посылке сообщения".
[16]: Читайте внимательнее: не "Win-сообщение", а "сообщение". Это разные вещи.

>[79] Polevi
даже не знаю что ответить... с++ - это единственный, первый или главный ООП язык?

http://ei.cs.vt.edu/~history/GASCH.KAY.HTML
Smalltalk was designed to mimic Kay"s biological model of individual entities, or "cells," communicating with each other via messages. Eventually his Smalltalk language would father the genre of Objected Oriented Programming languages.


 
Digitman   (2004-02-27 16:39) [85]


> Никто (27.02.04 16:36) [80]
> Завязываем дискуссию...


личико-то открой, Гюльчатай) ... зарегистрируйся уж, сподобься)

негоже вести столь серьезные баталии анонимно !


 
Verg   (2004-02-27 16:39) [86]


> Никто (27.02.04 16:36)
> 2 Verg
> неуместно...


Сам такой .. :))


 
Digitman   (2004-02-27 16:41) [87]


> Polevi © (27.02.04 16:38) [82]
> щас про SendMessage напмнят :-)


а мы им - в лоб цитатой соответствующе из msdn !)))


 
Никто   (2004-02-27 16:41) [88]

2 Polevi
Windows идеологически не является ОО системой. Если говорить про ОО, то уже тогда COM. Но тут сам черт ногу сломает. И при этом SomeCOM.DoIt - это уже сообщение, потому что я бы не стал с уверенностью заверять, что при этом используется обыкновенный call.


 
Polevi   (2004-02-27 16:41) [89]

>nikkie © (27.02.04 16:39) [84]
ну не нравится мне "сообщение" в данном контексте, а вам ?


 
Polevi   (2004-02-27 16:43) [90]

не народ, я согласен с Digitman, у меня термин "сообщение" ассоциируется с асинхронным вызовом.. вот такие дела


 
Digitman   (2004-02-27 16:45) [91]


> Никто (27.02.04 16:41) [88]
> Windows идеологически не является ОО системой


Антарктиду ты открыл)

ну в таком случае при пользовании "откровениями" Васьки Пупкина мог бы и сразу пояснить , что в твоей интерпретации по сабжу вопроса ты подразумеваешь под "сообщениями"


> я бы не стал с уверенностью заверять, что при этом используется
> обыкновенный call


при твоем же примере декларации метода ты сильно рискуешь облажаться


 
Verg   (2004-02-27 16:54) [92]

Меня другое интересует - как в этой идеологии называется то, что мы привыкли называть
1. Сообщениями
2. Очередью этого, что мы называем сообщениями (и зачем ставить в очередь DoIt?)

Во-от, а вообще-то в теме стоит событие (event). Еще одна тема для терминологического спора. Есть еще fiber-thread-stream и т.п.

Ну а так-то, хоть как называй сущность, главное общаться на одном языке, чтобы понимать друг друга, не так ли?


 
VLAD-MAL   (2004-02-27 16:59) [93]

Defunct © (27.02.04 16:24) [72]

Ничего ж себе фигня..
А вы попробуйте отследить изменение области памяти не прибегая к опросу этой переменной.


За родную Катманду можно дать и по лицу!

Это ж Object Pascal! Юзайте проперти и Ваши волосы будут мягкие и шелковистые!

("Этож Кэмел! Его курить нужно!")


 
Digitman   (2004-02-27 17:00) [94]


> Verg © (27.02.04 16:54) [92]


очевидно, в идеологии Васьки Пупкина "очередью сообщений" (а почему бы ей не быть, очереди-то ? коль скоро о сообщениях говорим ?) будет называться последовательность записанных Васькой строк :

SomeObject.DoIt(Param1);
SomeObject.DoIt(Param2);
..
SomeObject.DoIt(ParamN);

дурь же полная ?! сообщения есть, а очереди нет)))


 
Никто   (2004-02-27 17:04) [95]

2 Verg
1. Сообщение - запрос к экземпляру класса на выполнение какого либо действия.

type
TMyObj = class
procedure DoIt;
end;

var
MyObj: TMyObj;

procedure JustDoIt;
begin
end;

MyObj.DoIt; - это сообщение
JustDoIt; - это метод

2. Про очередь и речи не было.
3. См. [5] п.2.


 
Verg   (2004-02-27 17:08) [96]


> [94] Digitman © (27.02.04 17:00)


Synchronize(DoIt) ?

:)))))


 
Digitman   (2004-02-27 17:09) [97]


> Никто (27.02.04 17:04) [95]



> JustDoIt; - это метод


с чего бы это "метод"-то ?!

обычная процедура !


 
Никто   (2004-02-27 17:13) [98]

Что-то мне не помнится, чтобы ООП оперировала понятием "очередь сообщений". Или TWinControl - тоже базовый элемент теории ООП? Или все же (даже) иерархия VCL начинается с TObject, у которого это понятие отсутствует напрочь? Давайте не отходить от темы.


 
WebErr   (2004-02-27 17:13) [99]

Родные, а чем же Вам событие WM_USER + MyMessageNumber не нравится?!! Возбуждайте его, да обрабатывайте. Можно вообще вместо переменной "семафор" завести. Можно сделать всё, что угодно, вплоть до обработки event"a Edit1Change, взяв вместо переменной свойство Edit1.Text. Я в самом деле не понимаю из-за чего весь сыр-бор. Реализаций куча, наклонись да возьми. (Только следи, чтоб сзади никто не стоял!) А вообще статическая переменная при изменении не вызывает никакого сообщения в Wind"e, но думаю, что это можно выловить используя, например namespace, если он в Паскале есть.


 
Digitman   (2004-02-27 17:14) [100]


> Никто (27.02.04 17:04) [95]


нет, ну понятно - сейчас последует "задним числом" уточнение, что "метод" JustDoIt явл-ся методом "объекта" SomeUnit .. что на самом деле никоим образом не сопрягается с ООП)


 
Verg   (2004-02-27 17:16) [101]


> [95] Никто (27.02.04 17:04)


Как тебе будет угодно.
Можешь процедуры методами называть, сообщения запросами.

Это значаит просто, что ты говоришь на другом языке.
На моем языке

MyObj.DoIt; - применение метода TMyObj.DoIt к экземпляру MyObj этого класса
JustDoIt; - это вызов процедуры


 
han_malign   (2004-02-27 17:17) [102]

> Никто
Lingvo:
message
1) информация, выдаваемая системой пользователю
2) логический блок передачи информации в сети
3) в Smalltalk вызов метода (осуществляется как передача сообщения)
4) сообщение (в Windows)

- на сайте www. smalltalkmaster.ru, если бы такой существовал, никто бы с вами не спорил.
Но экстраполировать эту заморочку производства Алана Кэя и Васи Пупкина на весь ООП вы не имеете права. Если бы это было написана у Вирта, другое дело.

З.Ы. В UML есть термин "создание прецедента", но это уже имеет малое отношение к ООП.

> я бы не стал с уверенностью заверять, что при этом используется обыкновенный call
- имеет быть место, для dynamic(message) методов, для которых, сначала происходит поиск указателя на метод в DMT по целочисленному идентификатору(Dispatch), а потом уже Call - но никаких сообщений, а тем более очереди сообщений, здесь нет.


 
Никто   (2004-02-27 17:17) [103]

2 Digitman
>> обычная процедура
согласен, поторопился

TMyObj = class
private
procedure JustDoIt;
public
procedure DoIt;
end;


 
Digitman   (2004-02-27 17:18) [104]


> Никто (27.02.04 17:04) [95]


прелюбопытно, в соответствии с декларацией [95] и ООП-теорией от Васьки Пупкина, если я пишу SomeUnit.JustDoIt, то кому я сим образом посылаю сообщение ? Ну или - если угодно - запрос ?


 
Defunct   (2004-02-27 17:19) [105]

VLAD-MAL (27.02.04 16:59) [93]
> Это ж Object Pascal! Юзайте проперти и Ваши волосы будут мягкие и шелковистые!

Угу ;>
Юзаем, когда известен тип переменой.

А когда есть только адрес памяти? ;>
Мало ли что там автор делает, может он код в стеке формирует и потом выполняет, и не хочет чтобы код случайно затерся.


 
Digitman   (2004-02-27 17:22) [106]


> Никто (27.02.04 17:17) [103]
> согласен, поторопился


ну и что ? метод он и остался методом ! и совершенно неважно что ты изменил в примере область видимости ид-ра метода ! Ну не пропустит компилятор такое обращение за пределами тек.модуля ... ну и что ? на то и спецификаторы области видимости идентификаторов !


 
MasterKolyan   (2004-02-27 17:27) [107]

WebErr © (27.02.04 17:13) [99]
а поподробнее можно, или в виде кода хотябы представить...


 
Silver_   (2004-02-27 17:29) [108]


> Fay © (27.02.04 14:20) [1]
> хрень какая-то...

Во-во

interface
type
...
public/publiched
...
procedure VarA_Изменилась(СтароеЗначение, НовоеЗначение: MyType);
...
end;
...
procedure Сообщи_Об_Изменениях(СтароеЗначение, НовоеЗначение: MyType);
...

VarA := Фиг_знает_чего;

//переменная изменилась вот и возбуждай свое событие
//или процедуру/функцию вызывай, в чем проблема то
if Assigned(VarA_Изменилась) then VarA_Изменилась(СтароеЗначение, НовоеЗначение);
//типа так, или
Сообщи_Об_Изменениях(СтароеЗначение, НовоеЗначение);
...

Может че напортачил но ход мыслей думаю ясен

А вобще вопрос какой-то смутный
Как создать событие на изменение своей переменной

> как обработать своё какое нибудь нестандартное (левое) событие,
> да так чтоб ещё и скорость не уступала стандартным - неясна....


Чье (событие принадлежит кому?)


 
Digitman   (2004-02-27 17:30) [109]


> Никто (27.02.04 17:17) [103]


значится так : видя достаточно серьезную кашу в голове автора по сим вопросам, ты совершенно напрасно оперируешь абстагированными от обсуждаемой ОС-платформы понятиями, что приводит к еще большей путанице и заблуждениям начинающих ! Читающих эту ветку и ни черта в результате не понимающих, где есть "сообщение", а где есть "сообщение" !

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


 
Никто   (2004-02-27 17:32) [110]

Да в том то и дело, что для самого объекта это - методы; а для внешнего объекта это (только из секции public) - сообщения, которые можно отослать этому объекту. Иначе говоря: объект не будет откликаться на сообщения, которые у него не описаны (в секции public). А то, что список доступных сообщений определяется еще компилятором - так это только плюс для программиста.


 
Юрий Зотов   (2004-02-27 17:36) [111]

Все же в упор не понимаю, зачем называть велосипед трактором, если у него уже есть всем привычное и всем понятное название?


 
MasterKolyan   (2004-02-27 17:38) [112]

Silver_ © (27.02.04 17:29) [108]
...так! интересно! а как работает функция assigned()


 
Defunct   (2004-02-27 17:39) [113]

Никто (27.02.04 17:13) [98]

Почитайте двухтомник Turbo Pascal 7.0
Там четко определены понятия:
- метод
- приватный метод
- защищенный метод
- вызов метода
- процедурный тип

Вот про сообщения там ничего не сказано в контексте ООП. А то, что в SmallTalk ошибочно применили термин via messages вместо via params так и флаг им в руки как первооткрывателям.


 
Verg   (2004-02-27 17:39) [114]


> [110] Никто (27.02.04 17:32)


TScrollBox = class(TScrollingWinControl)
private
FBorderStyle: TBorderStyle;
procedure SetBorderStyle(Value: TBorderStyle);
procedure WMNCHitTest(var Message: TMessage); message WM_NCHITTEST;
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
........
......


Ну ка поясни на конкретном примере - на какие сообщения будет откликаться данный объект, на какие не будет. Где тут методы, где сообщения и вообще...


 
Digitman   (2004-02-27 17:39) [115]


> Да в том то и дело, что для самого объекта это - методы;
> а для внешнего объекта это (только из секции public) - сообщения,
> которые можно отослать этому объекту. Иначе говоря: объект
> не будет откликаться на сообщения, которые у него не описаны
> (в секции public).


и для самого объекта это методы, и для любого другого - тоже методы ! просто методы целевого объекта ... или еще говорят - методы управления целевым объектом, декларированные им же (целевым объектом) для публичного использования .. и ничто иное...

и не только из секции public, но и published, если "любой другой" объект декларирован/реализован в "любом другом" модуле

надеюсь, последнее есть просто упущение


 
Defunct   (2004-02-27 17:40) [116]

MasterKolyan (27.02.04 17:38) [112]

Assigned( X ) эквивалентно: X <> Nil


 
han_malign   (2004-02-27 17:41) [117]

> объект не будет откликаться на сообщения, которые у него не описаны (в секции public)
- а ну ка, приведите пример работающего кода, в котором объекту "отсылается сообщение", "которое у него не описано(в секции public)" - и он на него не откликается....


 
Никто   (2004-02-27 17:42) [118]

2 Digitman
>> "вызов метода объекта" и "посылка сообщения объекту"

type
TMyObj = class(TObject)
public
procedure DoIt(var Msg: TMessage); message WM_MYMESSAGE;
end;

var
MyObj: TMyObj;

Пошлите ему сообщение. Только MyObj.Dispatch(Msg) не использовать. Потому что это, как Вы говорите, вызов метода.

Или MyObj - не объект? Ему нельзя послать сообщение?

Я говорю, что можно: MyObj.DoIt(Msg);

Что скажите Вы?


 
Digitman   (2004-02-27 17:42) [119]


> MasterKolyan (27.02.04 17:38) [112]
> ...так! интересно! а как работает функция assigned()


оч просто

возвращает TRUE, если фактический ее параметр (любого указательного типа) не равер nil, в противном случае возвращает FALSE


 
Digitman   (2004-02-27 17:48) [120]


> Только MyObj.Dispatch(Msg) не использовать


это почему же не использовать, если как раз для того и предназначен Dispatch() и механизм трансляции подобных дин.вызовов ?

В результате работы Dispatch() и будет вызван метод DoIt банальным call dword ptr [reg32] .. обычный вызов подпрограммы !


 
Никто   (2004-02-27 17:48) [121]

Еще раз для всех (вновь пришедших) желающих принять участие в дискуссии: речь идет не о Win-сообщениях, а о сообщениях в контексте ООП.


 
Silver_   (2004-02-27 17:49) [122]


> MasterKolyan (27.02.04 17:38) [112]

В чем дело то. Вроде усе нормально. Да и потом

> Может че напортачил но ход мыслей думаю ясен

главное подчеркнуто


 
Defunct   (2004-02-27 17:50) [123]

Никто (27.02.04 17:32) [110]
> Иначе говоря: объект не будет откликаться на сообщения, которые у него не описаны (в секции public).


Ого, хорошее высказывание..

Проверьте в одом модуле:

Obj1 = Object
Prirvate
Procedure DoIt;
End;

Obj2 = Object
Private
Procedure DoThat;
End;

...
Implementation

Var O1 : Obj1;
O2 : Obj2;

Porcedure Obj1.DoIt;
Begin
End;

Procedure Obj2.DoThat;
Begin
O1.DoIt;
End;


Begin
O2.DoThat;
End.


 
Digitman   (2004-02-27 17:50) [124]


> Никто (27.02.04 17:42) [118]


опять же ты напрасно здесь пытаешься противопоставить заведомо различные вещи) ... дин.метод - это дин.метод, стат.метод - это стат.метод


 
Digitman   (2004-02-27 17:55) [125]


> Никто (27.02.04 17:42) [118]


в терминологии и концепции ООП нет ни слова ни о каких спецификаторах метода message MESSAGE_CODE

это же специальный спецификатор (мало ли таких еще в каждом отдельно взятом языке ООП-программирования !), который предписывает компилятору совершенно иное, специальное поведение при генерации кода метода и регистрации его в тех или иных ран-тайм-таблицах !


 
Никто   (2004-02-27 17:58) [126]

2 Digitman
Потому что вот этим: MyObj.Dispatch(Msg) вы отсылаете объекту ссобщение (с точки зрения ООП) обработать ваши личные (на пару с Борландом и Майкрософтом) данные (а имеено Msg), преобразовав их перед этим дополнительно и решив "куда же их еще переслать?". Причем, метод этой дополнительной обработки (диспетчеризации) никоим образом не определяется в ООП (кстати, метод Dispatch - разработка Borland"a, а Microsoft тут является только лишь законодателем формата Msg). То же самое (с некоторыми допущениями) Вам сделает обыкновенная оконная функция, в которой ООП и не пахнет.


 
Mikhial   (2004-02-27 17:58) [127]


> Digitman © (27.02.04 17:55) [125]

Да бростье - бесполезно :)


 
WebErr   (2004-02-27 18:00) [128]


> WebErr © (27.02.04 17:13) [99]
> а поподробнее можно, или в виде кода хотябы представить...


const
WM_SOMEMESSAGE = WM_USER + 1;
...
TSomeClass = class(...)
...
procedure CatchMsg(var Msg: TMessage); message WM_SOMEMESSAGE;
...
end;
...
procedure CatchMsg(var Msg: TMessage);
begin
// делай тут что хочешь
end;

А вот как и что будет посылать это сообщение, в этом вся и загвоздка! Можно сделать вообще просто, используя VCL, вместо твоей переменной изменять какой-нибудь компонент, а потом ловить возникающее событие - тут уж никакого API не надо! :)))) Но если хочешь API, то изменяй что-то, что вызывает событие, так как сама по себе переменная - это область памяти, т. е. системе пофигу что там лежит - там роется пользователь-программер (извените за каламбур, но область эта называется пользовательской :).


 
Mikhail   (2004-02-27 18:00) [129]

Ну нравится человеку на другом языке говорить ...


 
Mikhail   (2004-02-27 18:01) [130]

Ну нравится человеку на другом языке говорить ...


 
Digitman   (2004-02-27 18:05) [131]


> Никто (27.02.04 17:58) [126]


> Потому что вот этим: MyObj.Dispatch(Msg) вы отсылаете объекту
> ссобщение


никаких сообщений я объекту тем самым не отсылаю)

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

ладно, устал я вже)

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


 
Никто   (2004-02-27 18:06) [132]

2 Digitman

С чего все началось:

Никто (27.02.04 14:37) [5]
1. По идеологии ООП "вызов метода" аналогичен "посылке сообщения".


Ни о каких Борландах, Майкрософтах, окнах и прочих особенностях Windows ни слова не было сказано. Только про идеологию ООП.

Но видимо, это было масло в огонь. Потому что читать ответы Вы, видимо не научились.

"что за ерунда ?" - ваш ответ. Будьте добры, поясните, что ерундового в основах ООП? Лишь то, что Вы про них не читали, а знаете только из практического опыта? Но это еще не повод заводить научные диспуты.

P.S. Кстати, я там же написал:
2. "Событие на изменение переменной" - это из области свойств:
property MyVariable: integer read m_iMyVariable write SetMyVariable;
в таком случае SetMyVariable - метод, вызываемый при (попытке) изменения переменной (см. п. 1).


 
Никто   (2004-02-27 18:18) [133]

Блин... а работы то навалили! Пошел я отседава...


 
Verg   (2004-02-27 18:22) [134]

Слушай, а при чем тут Win-не-Win?

Если абстрактно,
Я сообщениями называю возможно отложенный вызов метода объекта(ов) удовлетворяющего(их) неким условиям, заложенным в самом сообщении или какой-либо процедуры с содержимым этого сообщения в качестве его(ее)параметра. Отсюда следует, что процедуры или методы объектов, вызов которых будет осуществлен для обработки сообщения, должны имет одинаковый, заранее оговоренный прототип. Сообщения могут быть установлены в очередь(и) по принципу FIFO- "первый вошел, первый вышел" (очередность).

Т.е. главный свойства - унификация, адресность, оложенность/очередность.

Вызов произвольного метода же ничем таким ограничен быть не может и принципально ничем не отличается от вызова некоей процедуры с сыллкой на экземпляр объекта в качестве неявного (но фактического) параметра.

Реализация механизмов сообщений известна еще задолго до появления компиляторов c языков ООП. (Я думаю, примерно, когда почту придумали).

Поэтому термин сообщение (message) нельзя вот так, с легкой руки, подарить ООП для обозначения вызова метода.



Страницы: 1 2 3 4 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.83 MB
Время: 0.015 c
1-43665
YurikGl
2004-03-01 19:42
2004.03.14
Вопрос по Excell


1-43546
Тимохов
2004-01-23 13:14
2004.03.14
Я, похоже, первый!!! Вопрос про округление.


1-43607
Kyrt
2004-03-03 02:41
2004.03.14
DLL


1-43557
AlexanderVasjuk
2004-03-03 18:02
2004.03.14
Предложите компонент а ля Панель Outlook


6-43720
Giga-Byte
2004-01-07 00:22
2004.03.14
проверка существования mail пользователя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский