14.8 Упражнения

Предыдущая  Содержание  Следующая V*D*V

Очевидно, обёртывание curses в подходящую иерархию классов является интересным упражнением для поклонников текстового терминала. Аналогично, наш эксперимент с калькулятором на X11 может быть проделан заново с OSF/Motif или другим пакетом.

Использование акселераторов, возможно, не самый естественный способ связать нажатия клавиш с вводом данных в наш калькулятор. Можно было бы, вероятно, сначала подумать о функциях действия. Однако, оказывается, что хотя функция действия знает, для чего применяется данный виджет, у неё нет разумного способа добраться из виджета до нашей обёртки. Либо кто-то перекомпилирует пакет для X с дополнительным указателем на пользовательские данные в записи экземпляра Object, либо мы должны создать подклассы некоторых виджетов пакета, чтобы предоставить именно такой указатель. Имея указатель, однако, мы можем создать мощную технологию на основе функций действия и нашего gate().

Идея gate() и wire() была более или менее заимствована из NeXTSTEP. Однако, в NeXTSTEP у класса может быть более одного выхода, то есть могут быть определены указатель на другой объект и, во время соединения обоих, фактический выход и метод, который будет использоваться на приёмном конце.

Сравнивая разделы 5.5 и 11.4 можно увидеть, что Var действительно должны наследоваться от Node и Symbol. Используя forward() мы могли бы избежать Val и его подклассов.

 

Предыдущая  Содержание  Следующая