Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Oberon
Перезагрузить страницу Компилятор автоматически не проверит правильность программы
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Компилятор автоматически не проверит правильность программы - 01.11.2005, 19:04

Недостатки.
1) Компилятор автоматически не проверит правильность программы. Например, если по невнимательности внутри QueryDelegate поменять местами NewFooDelegate(this) <--> NewBarDelegate(this), то программа скомпилируется, но во время работы будет сюрприз. Аналогично, компилятором не контролируется логическая связь между делегатом и его ролью.
2) Много нужно писать...

С уважением,
Сергей Губанов
Ответить с цитированием
  (#2 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Re: Паттерн Object-Role-Delegate - 02.11.2005, 12:15

После раздумий пришел к следующему выводу. Вынесенный здесь на обсуждение паттерн Object-Role-Delegate (ORD), является частным случаем более общей (канонической) схемы ООП: объекты обменивающиеся сообщениями, по сравнению с которой ORD выглядит значительно сложнее, не привнося при этом ничего принципиально нового. Как в случае с обменом сообщений, так и в случае с ORD компилятор статически корректность программы проверить не сможет (используется, так сказать, "динамическая типизация"). Раз так, то можно расценивать многословность ORD лишь как попытку создать иллюзию большей строгости, но без поддержки интерфейсов самим компилятором строгость так и остается иллюзией - корректность программы подтверждается только во время ее выполнения, но не компиляции. Итак, ORD сложнее канонической схемы ООП, но не дает преимуществ; значит его использовать не нужно.

Далее приводится пример решения задачи предложенной в предыдущем сообщении, но с помощью обычной канонической схемы ООП.
Код:
DEFINITION Canonical;

  TYPE
    Object = POINTER TO ABSTRACT RECORD 
      (this: Object) Handle (VAR msg: Message), NEW, EMPTY
    END;

    Message = ABSTRACT RECORD END;

END Canonical.
Код:
DEFINITION CanonicalStores;

  IMPORT Canonical;

  TYPE
    Externalize = RECORD (Canonical.Message)
      writer-: Writer;
      ...
    END;

    Internalize = RECORD (Canonical.Message)
      reader-: Reader;
      ...
    END;

    Reader = RECORD
      ...
      (VAR this: Reader) ReadObject (OUT obj: Canonical.Object), NEW;
      ...
    END;

    Writer = RECORD
      ...
      (VAR this: Writer) WriteObject (obj: Canonical.Object), NEW;
      ...
    END;

END CanonicalStores.
Объект желающий пользоваться услугами сохранения реализованными в модуле CanonicalStores должен уметь обрабатывать сообщения CanonicalStores.Externalize и CanonicalStores.Internalize. Если он при этом еще хочет пользоваться услугами сохранения реализованными в другом модуле MyStores, то он должен уметь обрабатывать сообщения определённые в модуле MyStores. Всё предельно просто и понятно. Есть только один недостаток - динамическая типизация. Ведь на стадии компиляции компилятору не известно заложил ли программист в какой-то данный объект Canonical.Object способность обрабатывать сообщения CanonicalStores.Externalize и CanonicalStores.Internalize или не заложил - это выяснится только во время выполнения программы.
Ответить с цитированием
  (#3 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Re: Паттерн Object-Role-Delegate - 02.11.2005, 13:15

Дальнейшее развитие этих мыслей там:
Рубрикатор
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
правильность расположения вентилятор Lavash Охлаждение и разгон 2 17.10.2011 15:31
Как проверить правильность алгоритма Pekus Вопросы начинающих программистов 0 19.05.2011 11:23
Проверьте пожалуйста правильность работы программы katish12 Delphi 4 08.04.2011 17:16
Автоматически прекрашают работать некотрыйе программы. Sage Любые вопросы от новичков 3 19.01.2011 02:00
Как проверить написанный код на его правильность mico C++ Builder 6 17.01.2011 07:53
Список проверте на правильность написание ILeto WinAPI 1 27.03.2009 17:00
Можно ли проверить указатель на правильность Odin_KG Visual C++ 4 07.06.2008 19:10
При попытке запуска программы компилятор выдает ошибку: error C2664 Setter Visual C++ 2 30.01.2008 15:58
Как проверить правильность e-mail Тюб PHP 1 03.04.2005 10:50
правильность ввода Bonnie PHP 4 17.06.2004 17:42
Есть ли Си-компилятор под Windows, который компилит программы под Unix perlmaster С/С++ 1 01.06.2004 07:33



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов