События главной формы

Категория: Учебники по Delphi » Быстрый старт в Delphi

Здесь мы рассмотрим описание большинства событий, которые может отлавли­вать главная форма приложения. Конечно же, вам доступно намного больше, и вы можете создать еще и свои обработчики, но здесь будут рассмотрены те, которые наиболее часто используются в Delphi. События можно увидеть на вкладке Events объектного инспектора (табл. 6.3).

 

Событийная модель Windows

Категория: Учебники по Delphi » Быстрый старт в Delphi

Событийная модель WindowsВся работа операционной системы Windows основана на понятии события. Что это значит? Давайте попробуем разобраться.

 

Внутри ядра Windows создается очередь событий. Когда какое-нибудь прило­жение или устройство изменило свое состояние и хочет сообщить об этом опера­ционной системе, то оно помещает в эту очередь соответствующее сообщение. ОС Windows обрабатывает его и, если необходимо, реагирует на изменения.

 

Давайте рассмотрим реальный пример события и реакцию на него. Допустим, что мы передвинули курсор мыши. Она генерирует событие и помещает его в оче­редь сообщений. Когда Windows доходит до обработки этого сообщения, то полу­чает новые координаты курсора мыши. Так как положение курсора изменилось, ОС должна перерисовать его в новой позиции на экране. Если какое-то окно тоже же­лает обработать это событие, то система помещает событие в очередь окна. После этого Windows переходит к обработке следующего сообщения.

 

Если в очереди нет сообщений, то Windows переходит в состояние ожидания. Но такое бывает очень редко. Даже когда вы не работаете за компьютером (он про­стаивает), в фоне работает очень много процессов, которые отнимают процессор­ное время и генерируют собственные события.

 

Когда вы нажимаете на кнопку мыши, генерируется событие, извещающее ОС, что кнопка нажата. Любое действие, которое несет в себе какие-либо изменения, может генерировать системное или оконное (относящееся к определенному окну) событие. Это очень эффективная и удобная модель, благодаря которой и реализу­ется многозадачность Windows.

Давайте взглянем на простую очередь (табл. 6.2 не является очередью ОС Windows, это просто пример).

 

Работа с компонентами в Delphi

Категория: Учебники по Delphi » Быстрый старт в Delphi

Мы уже создали первую и самую простую программу, а также разобрались, из чего она состоит. Помимо этого, мы рассмотрели достаточно теории и готовы ис­пользовать эти знания на практике.

 

Первое, с чем мы начнем знакомиться, — это компоненты языка, и писать при­меры с их использованием. Вот это как раз то, с чего начинаются некоторые само­учители или книги по Delphi.

 

Изучение компонентов будет постепенным. Сначала мы попробуем эти компо­ненты в действии и познакомимся с их основными возможностями. Это необходи­мо, чтобы дальнейшая теория подкреплялась практическими примерами, а книга читалась легче и проще. Начиная с этого момента теория будет более запоминаю­щаяся, и все будет лучше усваиваться. Когда будет набран достаточный запас зна­ний, тогда мы заглянем внутрь компонентов и увидим, что находится у них внутри.

 

Инкапсуляция в Delphi

Категория: Учебники по Delphi » Быстрый старт в Delphi

Очень красивое слово — инкапсуляция. Честно сказать, я не очень люблю кра­сивые слова, по которым сложно понять, что именно они означают. И несмотря на то что на первых порах вы не очень много внимания будете уделять структуре и качеству объектов, я постараюсь убедить вас в том, что эта тема очень важна.

 

Инкапсуляция — это свойство, благодаря которому разработчику, использую­щему определенный строительный блок (код), не нужно знать, как он на самом де­ле реализован и работает для корректного использования этого строительного бло­ка. Что это значит? Когда вы садитесь за руль автомобиля, вы знаете, как устроен его двигатель или коробка передач? Лично я понятия не имею. Нет, я в курсе, что двигатель ворочает коробку передач, а та передает свои усилия на колеса, и этого мне вполне достаточно, чтобы повернуть ключ, воткнуть первую передачу и начать движение.

 

Программисту, использующему ваш класс, не обязательно знать, как он реали­зует необходимые возможности. Я бы сказал больше, ему абсолютно не нужно да­же знать ничего лишнего. Разрабатывая класс, вы должны проектировать его таким образом, чтобы все методы и свойства, выполняющие основную работу, были за­крыты.

Разрабатывая классы, вы можете объявлять его методы и свойства с различными правами доступа. Забегая вперед, скажу, что их немного: public, private, protected и published. Что имеется в виду под доступом? Открытые методы и классы видны другим классам.

 

Если я пишу программу и хочу добавить возможность шифрования, то я создаю экземпляр класса шифрования и смогу получить доступ только к ее открытым ме­тодам и свойствам. Мне абсолютно не важно, как класс шифрует, какой там алго­ритм и т. д. Для меня важно, чтобы он делал это качественно и надежно. Еще мне важно иметь возможность указать ключ и текст, с помощью которых будет проис­ходить шифрование, и возможность получить результат. Именно эти три возмож­ности обязательно должны быть открыты, а все остальное должно быть сокрыто от моих глаз и воздействия, чтобы я не смог испортить работу класса.

 

Сразу же дам совет — никогда не делайте открытыми переменные класса. Они должны быть закрыты, а если нужно иметь возможность воздействия на перемен­ные, то для этого лучше использовать методы или свойства (property). То есть для чтения и для изменения переменной должны использоваться только методы, без возможности прямого воздействия.

Мы уже научились программировать теоретически и можем словами описать всю логику программы и даже такую на первый взгляд довольно сложную вещь, как логику объектов. Теперь предстоит перейти к практике и увидеть все это на реальных программах.

 

 

Полиморфизм в Delphi

Категория: Учебники по Delphi » Быстрый старт в Delphi

Есть еще одна возможность, которая очень удобна в ООП, — полиморфизм. Что это такое? Представим, что у гаража дверь открывается вверх, а у дома должна от­крываться в сторону. Дом происходит от гаража, поэтому у него дверь будет от­крываться тоже вверх. Как же тогда быть? Вы просто должны изменить (перепи­сать) у дома процедуру, отвечающую за открытие двери. Тогда дом получит все свойства гаража, но при открывании двери подставит свою процедуру. Что-то по­добное и есть полиморфизм. Другими словами, это когда объекты разных иерархий по-разному реагируют на одно и то же событие.

 

Для того чтобы можно было изменить процедуру, отвечающую за открывание двери, она должна быть объявлена у гаража как "виртуальная" (virtual). Вирту­альная процедура говорит о том, что в порожденном объекте она может быть за­менена.

 

Есть еще одно слово, которое может указать на необходимость полиморфиз­ма, — dynamic. В принципе, результат будет идентичен использованию virtual, разница только в том, что virtual оптимизирован для повышения скорости про­граммы, a dynamic будет выполняться медленнее, но зато код результата будет меньше. Borland рекомендует использовать virtual, что мы и будем делать.