Текущий архив: 2004.03.14;
Скачать: CL | DM;
Вниз
Как создать событие на изменение своей переменной Найти похожие ветки
← →
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
Завязываем дискуссию...
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2004.03.14;
Скачать: CL | DM;
Память: 0.61 MB
Время: 0.016 c