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

Вниз

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

 
Никто   (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] .. обычный вызов подпрограммы !



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

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

Наверх





Память: 0.68 MB
Время: 0.021 c
8-43704
Lizard
2003-11-14 01:43
2004.03.14
Помогите зеленому.


3-43290
comwad
2004-02-11 15:38
2004.03.14
Проблема с DBGrid


7-43921
guru-ru
2003-12-13 09:17
2004.03.14
Проблемы с COM


1-43473
iudjen
2004-02-29 17:48
2004.03.14
random


1-43527
satron
2004-02-28 13:33
2004.03.14
ToolButton....





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