Теория / Конспект Лекций
.pdfРАЗДЕЛ 2. Объектно - ориентированное программирование Тема 2.1. Основные понятия визуального программирования
2.1.1. Структурная единица визуального программирования - компонент
Объектно-ориентированное программирование (ООП) представляет собой дальнейшее развитие идей структурного программирования, основной целью которого является создание программ простой структуры. Это достигается за счет разбиения программы на максимально обособленные части – декомпозиции.
ООП это такой подход к написанию программ, который основывается на объектах, а не на функциях и процедурах. При представлении реального объекта с помощью программного необходимо выделить в первом его существенные особенности. Их список зависит от цели моделирования. Выделение существенных с точки зрения рассмотрения свойств называется абстрагированием. Таким образом, программный объект — это абстракция. Детали реализации объекта, то есть внутренние структуры данных и алгоритмы их обработки, скрыты от пользователя и недоступны для непреднамеренных изменений.
Визуальное программирование — способ создания программы для ЭВМ путём манипулирования графическими объектами.
Технология визуального программирования позволяет строить интерфейс будущей программы из специальных компонентов, реализующих нужные свойства. Количество таких компонентов достаточно велико. Каждый компонент содержит готовый программный код и все необходимые для работы данные, что избавляет программиста от создания того, что уже создано ранее. Подобный подход во много раз сокращает время написания программы. Кроме того, быстрота создания программного кода достигается за счёт того, что значительная часть текста формируется автоматически.
Компонент - визуальный объект, скрывающий программный код для реализации определённой задачи.
Понятие формы
Языки визуального программирования делятся на несколько типов, одним из которых являются языки, в интегрированной среде разработки которых на этапе проектирования интерфейса применяются формы, с возможностью настройки их свойств. Примеры: Delphi, C++ Builder, Microsoft Visual Studio, Visual Basic, Lazarus.
Среда визуального программирования позволяет увидеть объекты на экране на этапе проектирования приложения, дает возможность настроить объекты, изменяя их расположение, размеры и другие свойства. Форма является контейнером объектов, в то же время форма также является объектом. При размещении объекта на форме основные параметры объекта
31
сохраняются в исполняемом программном коде. При этом объектами также являются программные блоки или фрагменты программного кода, из которых «собирается» проектируемое приложение.
Форма (Form) –это объект, представляющий собой окно, на котором размещаются элементы управления. Форм в приложении может быть несколько — по требуемому числу открываемых при выполнении диалога окон, их можно добавлять и удалять.
Основные элементы среды разработчика
Lazarus это богатая возможностями среда разработки для создания самостоятельных графических и консольных приложений. В настоящее время она работает на Linux, FreeBSD и Windows и предоставляет настраиваемый редактор кода и визуальную среду создания форм вместе с менеджером пакетов, отладчиком и графическим интерфейсом, полностью интегрированным с компилятором FreePascal.
Среда Lazarus состоит из нескольких окон. Месторасположение любого окна можно изменить на экране независимо от других.
Рисунок 7 – Окна среды Lazarus
На рисунке 7 отображены основные окна: главное окно программы, Object Inspector (Инспектор объектов), Source Editor (Редактор исходного кода), Form1 (Окно формы) и Messages (Сообщения).
32
Главное окно системы Lazarus обычно расположено в верхней части экрана. Как и в других программах, главное окно состоит из нескольких частей: строки заголовка, строки меню и панели инструментов
В строке заголовка главного окна указано название открытого в данный момент проекта: project1. (Рисунок 8). Под строкой заголовка находится строка меню – один из наиболее важных элементов каждой программы или системы. Здесь можно найти основные команды системы. Ниже строки меню расположена панель инструментов с наиболее часто используемыми кнопками команд. Для того чтобы узнать название кнопки, достаточно навести на нее указатель мыши. В главном окне есть панель инструментов, которая отличается от тех, что были известны вам ранее. Эта панель называется палитрой компонентов. Здесь находятся компоненты, которые будут необходимы во время программирования. Если навести указатель мыши на кнопку компонента, отобразится его название.
Рисунок 8 – Главное окно Lazarus
В левой части экрана находится очень важное окно Object Inspector (Инспектор объектов). По ходу программирования это окно используется особенно часто. Объекты программы настраиваются именно здесь. Выбрав любой объект, здесь можно просмотреть и изменить его свойства.
Форма – это бланк будущей программы. Каждая программа имеет, по крайней мере, одно окно и, следовательно, не менее одной формы. Поэтому во время работы с программой вы всегда видите на экране окно формы. Макет первого окна называется Form1. Если в программе будет два окна, то второму макету будет дано название Form2 и т.д. Изначально окно формы пустое. При создании программы, на форму размещают необходимые элементы управления. Сетка из точек в окне формы позволяет размещать объекты правильно и аккуратно. Во время работы программы сетки не видно.
Окно Редактор исходного кода содержит программный код программы, и само окно очень похоже на обычный текстовый редактор. Для удобства при редактировании текста программы строки пронумерованы, предусмотрено выделение цветами:
все служебные слова выделяются жирным шрифтом;
знаки препинания становятся красными;
строки с ошибками выделяются коричневым цветом;
33
комментарии могут заключаться в фигурные скобки {} и выделяются синим.
Большую часть кода программы система Lazarus автоматически формирует сама, так как самые простые программы современных графических операционных систем состоят из нескольких тысяч операторов языка программирования. Если надо добавить какой-то оператор в свою программу, это можно сделать именно в этом окне.
Окно сообщений содержит информацию о результатах компиляции проекта. Здесь можно получить список ошибок в коде приложения, а также список предупреждений и подсказок компилятора.
2.1.2. Обзор визуальных компонентов
Структурной единицей визуального программирования является компонента. Компонента представляет собой разновидность объекта, который можно перенести (агрегировать) в приложение из специальной Палитры компонент (Рисунок 9).
Компоненты бывают визуальными и не визуальными. Первые предназначены для организации интерфейса с пользователем. Это различные кнопки, списки, статический и редактируемый текст, изображения и многое другое. Эти компоненты отображаются при выполнении разрабатываемого приложения. Не визуальные компоненты отвечают за доступ к системным ресурсам: драйверам баз данных, таймерам и т.д. Во время разработки они отображаются своей пиктограммой, но при выполнении приложения, как правило, невидимы. Компонента может принадлежать либо другой компоненте, либо форме.
Рисунок 9 – Палитра компонент
Компоненты на панели объединяются в группы по функциональному признаку. Количество групп и компонент в каждой из них зависит от версии среды программирования и настроек пользователя. По названию страницы можно понять, какие компоненты находятся в той или иной вкладке палитры.
34
Таблица 2. Группы компонент на палитре.
Группа |
Содержание |
Standard |
Стандартные интерфейсные элементы |
Additional |
Дополнительныt компоненты |
Common Controls |
Обычные элементы управления |
Dialogs |
Стандартные диалоговые окна |
Data Controls |
Компоненты для управления данными |
Misc |
Разное |
Data Access |
Компоненты доступа к базе данных |
System |
Системные компоненты |
Syn Edit |
Редакторы кода с визуальной поддержкой синтаксиса |
RTTI |
Элементы для доступа к данным |
IPro |
Элементы для системы IPro |
SQLdb |
Элементы для SQL запросов к базам данным |
После создания проекта по умолчанию открывается список группы Standard, содержащий основные интерфейсные элементы, без которых не обходится практически ни одна программа (Таблица 3).
Просмотреть другие группы можно, раскрывая их щелчком по соответствующей вкладке.
Таблица 3. Компоненты группы Standard
|
Компонент |
Описание |
|
TMainMenu |
Главное меню программы |
|
|
|
|
TPopupMenu |
Локальное меню |
|
|
|
|
TButton |
Командная кнопка |
|
|
|
|
TLabel |
Метка. Для размещения однострочных |
|
надписей |
|
|
|
|
|
TEdit |
Однострочный текстовый редактор |
|
|
|
|
TMemo |
Многострочный текстовый редактор |
|
|
|
|
TToggleBox |
Зависимый переключатель |
|
|
|
|
TCheckBox |
Независимый переключатель |
|
|
|
|
TRadioButton |
Радиокнопка |
|
|
|
|
TListBox |
Список выбора |
|
|
|
|
TComboBox |
Раскрывающийся список выбора |
|
|
|
|
TScrollBar |
Линейка скроллинга (прокрутки) |
|
|
|
|
|
35 |
|
TGroupBox |
Группа элементов |
|
|
|
|
TRadioGroup |
Группа радиокнопок |
|
|
|
|
TCheckGroup |
Группа независимых переключателей |
|
|
|
|
TPanel |
Панель для объединения нескольких |
|
компонентов |
|
|
|
|
|
TActionList |
Список действий |
|
|
|
Основные приёмы работы с компонентами
Задача программиста – используя панель компонентов, заполнить форму различными интерфейсными элементами, создавая тем самым внешний вид своей программы.
Для того чтобы расположить компонент на форме необходимо в Палитре Компонент выбрать страницу, где он находится, выбрать мышью компонент и указать на форме место размещения. Отрисованный компонент будет выделен. В инспекторе объектов отобразятся его свойства.
Компоненты на форме можно объединять в группы выделив мышью в рамку. Перемещение выделенной компоненты в пределах формы осуществляется мышью, а для точного позиционирования используется комбинация клавиш управления курсором и клавиши <Ctrl>. Изменить положение также можно заданием соответствующих координат в инспекторе объектов. Мышью удобно изменять размер компонент, точное изменение производиться комбинацией клавиш управления курсором и клавиши <Shift>.
Над компонентами и их группами возможны операции удаления, вырезания, копирования в буфер обмена и вставки из буфера обмена.
Тема 2.2. Свойства и события
2.2.1. Понятие свойства компоненты. Простые, перечислимые и вложенные типы
Компонента имеет набор свойств, которые можно изменять, не изменяя исходный код программы.
Свойства определяют внешний вид, положение и поведение компонента. Перечень всех свойств, доступных для текущего компонента на этапе проектирования содержится в окне Инспектора объектов.
В момент создания компонента Lazarus автоматически присваивает всем его свойствам некоторые начальные значения (значения по умолчанию).
Одними и теми же свойствами могут обладать разные компоненты (Таблица 4).
36
Среди всех свойств компонентов особенно выделяется свойство Name – внутреннее имя компонента. Это свойство имеет каждый компонент (в том числе и форма). Обычно Lazarus автоматически формирует это свойство, добавляя к имени типа компонента его порядковый номер в пределах типа, это имя можно изменить. Однако следует иметь в виду, что для имени компонента можно использовать только латинские символы, цифры и некоторые специальные символы (например, символ подчеркивания). Символы кириллицы и пробелы использовать нельзя. Это связано с тем, что имя компонента, указанное в свойстве Name используется для ссылок на компонент в программном коде (например, для доступа к его свойствам). В этой связи с именем каждого компонента надо определиться на ранней стадии разработки проекта, еще до написания программного кода, чтобы не пришлось корректировать код при изменении имен компонент. Это касается и форм.
Таблица 4. Основные свойства компонент.
Свойство |
Назначение |
Height |
Высота компонента в пикселях |
Width |
Ширина компонента в пикселях |
Left |
Положение левой кромки компонента относительно формы |
Top |
Положение верхней кромки компонента относительно формы |
Align |
Положение компонента относительно формы: alTop (сверху), |
|
alBotton (снизу), alLeft (слева), alRight (справа), alNone |
|
(определяется свойствами Left и Top) |
Ctl3D |
Если True, то компонент имеет объемный вид, иначе – |
|
плоский |
Color |
Цвет фона компонента |
Font |
Внешний вид (размер, цвет и т.д.) шрифта для надписей |
Caption |
Надпись на кнопке, текст метки, заголовок окна для формы |
Техт |
Содержимое поля для текстового окна, которое будет видно |
|
при загрузке формы |
Visible |
Если это свойство имеет значение True, то компонент будет |
|
видимым на форме, а если – False, то он будет невидимым |
Enabled |
Eсли это свойство имеет значение False, то компонент |
|
недоступен, т.е. щелчок мыши по этому элементу не даст |
|
эффекта, при этом текст, размещенный на нем, будет серым. |
|
Если это свойство имеет значение True, то компонент можно |
|
будет использовать в процессе работы программы |
AutoSize |
Если это свойство имеет значение True, то размеры оконного |
|
компонента будут автоматически меняться при изменении |
|
размера шрифта, или добавления в него не оконных |
|
компонентов |
|
37 |
ShowHint Если свойство ShowHint имеет значение True, то всплывает подсказка – текст, содержащийся в свойстве Hint
Focused Если это свойство имеет значение True , то данный компонент получил фокус (только один компонент на форме может получить фокус)
Items Список элементов
Свойства - это переменные, которые влияют на состояние объекта. Существует несколько типов свойств, в зависимости от их
“природы”, т.е. внутреннего устройства:
Простые свойства - это те, значения которых являются числами или строками. Например, свойства Left и Top принимают целые значения, определяющие положение левого верхнего угла компонента или формы. Свойства Caption и Name представляют собой строки и определяют заголовок и имя компонента или формы.
Перечислимые свойства - это те, которые могут принимать значения из предопределенного набора (списка). Простейший пример - это свойство типа Boolean, которое может принимать значения True или False.
Вложенные свойства (составные), как следует из названия, состоят из нескольких значений (или объектов). Object Inspector изображает знак “+” слева от названия таких свойств. Имеется два вида таких свойств: множества и комбинированные значения. Object Inspector
изображает множества в квадратных скобках. Если множество пусто, оно отображается как []. Установки для вложенных свойств вида “множество” обычно имеют значения типа Boolean. Наиболее распространенным примером такого свойства является свойство Style с вложенным множеством булевых значений. Комбинированные значения отображаются
вИнспекторе Объектов как коллекция некоторых величин, каждый со своим типом данных. Некоторые свойства, например, Font, для изменения своих значений имеют возможность вызвать диалоговое окно. Для этого достаточно щелкнуть маленькую кнопку с тремя точками в правой части строки Инспектора Объектов, показывающей данное свойство.
Значения свойств могут изменяться как на этапе проектирования, так и на этапе выполнения проекта (т. е. программно).
В режиме проектирования манипулирование свойствами осуществляется в окне Формы (Forms Designer) или на страничке «Свойства» Инспектора Объектов. Например, для того чтобы изменить свойства Height (высоту) и Width (ширину) кнопки, достаточно «зацепить» мышкой за любой ее угол и раздвинуть до нужного представления. Того же результата можно добиться, просто подставив новые значения свойств Height и Width в окне Object Inspector.
Все изменения значений свойств компонент в режиме выполнения должны осуществляться путем прямой записи строк кода на языке Паскаль. Например:
38
Botton1.Width := 35;
В режиме выполнения пользователь (программист) имеет возможность не только манипулировать всеми свойствами, отображаемыми в Инспекторе Объектов, но и управлять более обширным их списком.
2.2.2. Понятие события. Реакция компонент на события и способы их обработки.
Объекты из библиотеки визуальных компонент, как и объекты реального мира, имеют свой набор свойств и свое поведение - набор откликов на события, происходящие с ними. Событие (Event) - это то, что происходит во время работы программы. В Lazarus каждому событию присвоено имя (Таблица 5).
Таблица 5. Основные события в Lazarus.
Событие |
Действие |
OnСlick |
одинарный клик мышью на объекте |
OnCreate |
возникает при создании объекта |
OnPaint |
при появлении окна на экране, прорисовка |
OnDblClick |
двойной клик мышью на объекте |
OnMouseDown |
нажатие кнопки мыши на объекте |
OnMouseUp |
отпускание кнопки мыши на объекте |
OnMouseMove |
движение курсора мыши по объекту |
OnEnter |
объект становится выбранным (курсор внутри объекта) |
OnExit |
объект перестает быть выбранным |
OnKeyDown |
нажатие любой клавиши на клавиатуре |
OnKeyUp |
отпускание любой клавиши на клавиатуре |
OnKeyPress |
нажатие клавиши на клавиатуре |
OnChange |
изменение целевых свойств объекта, например текста |
Свойства объекта определяют его внешний вид (размер, шрифт, цвет и т.д.), а совокупность событий определяют поведенческую сторону объекта. Обработчиком события является процедура, которая выполняет те или иные действия в ответ на наступление события. Т.е. с помощью этой процедуры (обработчика события) реализуется реакция объекта на событие, например на щелчок мыши.
Поведение объекта определяется тем, какие обработчики и для каких событий он имеет.
Таким образом, задача программиста сводится к тому, чтобы определить необходимые свойства объектов в его приложении и написать обработчики тех событий, на которые должен реагировать тот или иной объект приложения.
39
Инспектор объектов позволяет определить обработчики событий, на которые должна реагировать форма или ее компоненты. Во вкладке События в левой колонке приведен список всех событий для данного объекта. Не обязательно разрабатывать обработчики для всех событий. Если для некоторого события отсутствует его обработчик, то приложение просто не будет реагировать на это событие.
В частности, только созданный компонент еще не имеет ни одного обработчика событий. Поэтому он не реагирует ни на какие действия пользователя (события).
Правила написания методов-обработчиков событий для каждого объекта отдельно.
Методы компонентов – это заранее написанные подпрограммы, обращение к которым (вызов) позволяет воздействовать на компонент, например, изменить некоторые его свойства. Методы вызываются из программных кодов.
Чтобы создать обработчик события onClick для кнопки достаточно дважды щелкнуть по самой кнопке. Двойной щелчок по визуальному компоненту, помещенному на форму, создает обработчик для наиболее характерного события, связанного с данным элементом управления.
В результате вы получите заготовку для обработчика события onClick этой кнопки:
procedure TForm1.Button1Click(Sender: TObject); begin
end;
В него надо поместить код, который должен выполняться каждый раз после наступления этого события.
Перечень всех событий для текущего компонента находится в окне Инспектора объектов. Однако для доступа к событиям необходимо перейти на вкладку Events (События). Чтобы подключить требуемый обработчик события, необходимо в окне Инспектора объектов выбрать соответствующее событие и сделать двойной щелчок в правой колонке (в этой колонке показываются имена уже подключенных обработчиков).
В результате этого откроется окно редактора кода, в которое будет добавлен шаблон обработчика события, а в окне Object Inspector, рядом с именем события, появится имя его обработки.
Lazarus присваивает процедуре обработки события имя, которое состоит из двух частей. Первая часть имени идентифицирует форму, содержащую объект (компонент), для которого создана процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем примере имя формы - Form1, имя объекта - Button1, а имя события - Click.
40