Как и следовало ожидать, одна за другой посыпались ошибки. Пришлось срочно осваивать систему Zope.
Николас Петрили — редактор LinuxWorld и InfoWorld. Он также работает в Linux Standard Base. Электронную почту ему можно направлять по адресу nicholas_petreley@ infoworld.com |
А это в свою очередь побудило меня взяться за овладение навыками программирования в среде K Desktop Environment (KDE) — одной из многочисленных графических оболочек для операционной системы Linux и других разновидностей Unix.
Пакет KDE построен на основе инструментария Qt, представляющего собой многоплатформенную объектную библиотеку. Используя функции Qt, можно написать приложение и, должным образом скомпилировав его, выполнять в среде Linux, BSD или Windows. Кстати, имеется возможность запускать программное обеспечение Qt, а также другие приложения KDE, не загружая предварительно саму среду KDE.
Библиотека Qt предлагает оригинальный метод связывания действий с визуальными объектами, получивший название метода «сигналов и гнезд» (signals and slots). Программные средства Qt заставляют разработчика мыслить в терминах объектного, а не процедурного программирования. Потратив некоторое время на изучение Qt, начинаешь понимать преимущества объектно-ориентированного подхода.
Разница заключается в следующем. Представьте себе, что проигрыватель компакт-дисков можно проектировать двумя способами. В первом случае он представляет собой устройство, состоящее из множества комплектующих. Берем печатную плату, размещаем здесь резистор, там конденсатор и, если повезет, получаем работающий механизм. Данный подход соответствует процедурному программированию. А теперь допустим, что у нас имеется десяток уже готовых модулей. Мы просто соединяем их друг с другом, добиваясь в итоге того же результата, но только гораздо быстрее. Такая технология соответствует объектно-ориентированному подходу.
Однако большинство программистов, даже начав работать с объектно-ориентированным языком, очень быстро возвращаются к использованию методов процедурного программирования. Это похоже на то, что вы непонятно зачем выбрасываете все готовые модули, за исключением одного, после чего, добавив к оставшемуся еще сотню элементов, в конце концов все же получаете работающий проигрыватель компакт-дисков.
Одна из наиболее общих ошибок разработчиков заключается в том, что они стремятся ограничиться созданием нескольких крупных объектов и пытаются описать их поведение в одном большом цикле. Этот цикл ждет возникновения того или иного события, после чего определяет, какой метод надо вызвать.
Последовательность действий в данном случае выглядит примерно следующим образом: «Ага, пользователь нажал кнопку! А какую именно? Может быть, это кнопка Play? А может, кнопка Stop? Да, это так! Проверим, играет ли диск. Если да, остановим проигрыватель. Еще раз пройдем через цикл. Стоп, произошло событие, связанное с диском! Может быть, это предупреждение о том, что диск не установлен? Нет. А может, уведомление о прекращении вращения диска? Да! Теперь на устройстве загорается красный индикатор».
Работая с Qt, вам не придется писать циклы обработки событий; достаточно связать между собой объекты. Создаем кнопку Stop. После этого описываем механизм реакции на нажатие этой кнопки в соответствующем методе. Связываем событие нажатия кнопки Stop с методом stop, дописывая одну строку кода. С этого момента при каждом нажатии кнопки Stop запускается метод stop, останавливающий диск. Теперь создаем объект красного индикатора и метод его включения, после чего связываем кнопку Stop с индикатором. При нажатии кнопки Stop диск прекращает играть, а на панели управления загорается красный свет.
Но ведь в действительности проигрыватель компакт-дисков работает несколько иным образом, не так ли? Красный индикатор должен сигнализировать об остановке диска независимо от причин, вызвавших эту остановку. Хорошо, нет вопросов. Модифицируем программу, изменив последовательность соединений сигналов и гнезд. Чтобы привести все в надлежащий вид, связываем красный индикатор со строкой состояния проигрывателя компакт-дисков. Теперь красный индикатор загорится вне зависимости от того, по какой причине остановлен диск.
В статье я несколькими штрихами попытался показать мощь технологии сигналов и гнезд и программного обеспечения Qt в целом. Тем, кто хочет более подробно ознакомиться с ним, я настоятельно рекомендую изучить учебник по Qt.
После того как вы окунетесь в море возможностей Qt, до перехода к программированию в среде KDE останется всего один шаг.
Тем, кто хочет побыстрее преодолеть это расстояние, советую обратить внимание на программу KDevelop, которую можно найти на странице www.kdevelop.org. По этому адресу расположены бесплатные средства интеграции Qt и KDE, а также документация по Qt и упомянутый выше учебник.