14.7 Выводы

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

В этой главе мы рассмотрели объектно-ориентированный проект для простого калькулятора с графическим интерфейсом пользователя. Метод проектирования CRC, подытоженный в конце раздела 14.3, привёл к некоторым классам, которые оказалось возможным снова использовать неизменёнными в каждом из этих трёх решений.

Первое решение проверяет работу калькулятора без графического интерфейса. Здесь, инкапсуляция как класс позволяет легко провести тест. После того, как класс калькулятора заработал, мы можем сконцентрироваться только на налагаемых на нас графическими библиотеками особенностях.

Оба пакета, curses и X11 требуют, чтобы мы разработали какие-либо обёрточные классы для объединения внешней библиотеки с нашей иерархией классов. Пример с curses демонстрирует, что без передачи сообщений мы должны идти на компромисс: обёртки, которые скорее всего допускают повторное использование в следующем проекте, не слишком хорошо функционируют в сочетании с существующей иерархией классов, ориентированной на приложение; обёртки, которые хорошо подходят для нашей задачи, слишком много о ней знают, чтобы допустить повторное использование при работе с curses.

Решение для X11 показывает удобство передачи сообщений. Обёртки почти полностью скрывают внутренности X11 и пакета виджетов. Проблемно-ориентированные классы, подобные XButton, комбинируют необходимую функциональность обёрток с классом Ic, разработанным для нашего калькулятора. Передача сообщения позволяет классам, подобным XButton, функционировать так, как будто они потомки Ic. В этом примере переадресация сообщений позволяет объектам действовать так, как будто они принадлежат двум классам одновременно, но нет издержек и сложности множественного наследования, которое поддерживается в C++.

Передачу сообщений довольно просто реализовать. Всё, что надо сделать, это изменить генерацию селекторов в соответствующем отчёте ooc для перенаправления непонятых селекторных вызовов новому динамически компонуемому методу forward(), который классы, подобные XButton, перезаписывают, чтобы получать и, возможно, перенаправлять переданные сообщения.

 

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