Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.64 MB
Время: 0.044 c
1-43514
satron
2004-02-28 20:56
2004.03.14
Как


1-43603
mkf
2004-03-02 16:51
2004.03.14
menu as XP


1-43679
3asys
2004-03-01 18:00
2004.03.14
Реализация Object TreeView


14-43767
wara
2004-02-04 12:00
2004.03.14
Загниваение Delphi?


3-43271
Hollywood
2004-02-12 18:37
2004.03.14
сохранение ftFloat в поле Float MSSQL