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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.016 c
3-43371
Денисыч
2004-02-15 01:06
2004.03.14
Какая технология доступа к данным лучше : BDE, ADO, dbExpress


3-43303
dendy
2004-02-12 00:12
2004.03.14
SQL запрос, заглавные и прописные


3-43257
Sam Stone
2004-02-13 09:41
2004.03.14
Типы данных


6-43741
Филипп
2004-01-08 12:13
2004.03.14
Скачивание файлов - Delphi6


6-43729
Pat
2003-12-30 03:04
2004.03.14
IP-телефония





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский