- •Windows -приложение
- •Среда программирования
- •Встроенный отладчик
- •Использование графики
- •Графические данные и палитра
- •Сохранение проекта
- •Структура приложения
- •Структура модуля
- •Простые типы
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Составной оператор
- •Оператор if
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла repeat
- •Пример приложения 6
- •Пример приложения 7
- •Статические массивы
- •Динамические массивы
- •Оператор with
- •Идентичность типов
- •Совместимость типов
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Рекурсия
- •Процедура exit
- •Директивы подпрограммы
- •Класс как объектный тип
- •Наследование
- •Операции is и as
- •Типы ссылки на класс
- •Типизированные файлы
- •Файлы без типа
- •Пример приложения 17
- •Компонент tmainmenii
- •Двунаправленные списки
- •Потоки данных
- •Пример приложения 22
- •Интерфейс drag and drop
- •Пример приложения 24
- •С файлами
- •Пример приложения 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Проблемы синхронизации потоков
В.И. Емельянов
В.И. Воробьев
Т.П. Тюрина
ОСНОВЫ
ПРОГРАММИРОВАНИЯ НА
DELPHI
Под редакцией доктора технических наук, профессора В.М. Черненького
Допущено
Учебно-методическим объединением
по университетскому политехническому
образованию в качестве учебного пособия
для студентов высших учебных заведений,
обучающихся по направлению «Информатика
и вычислительная техника»
Москва
«Высшая школа» 2005
УДК 004.43 ББК 32.973-018.1 L Е60
Рецензенты:
д-р техн. наук В.Н, Богатиков (Институт информатики и математического моделирования технологических процессов РАН); д-р техн. наук В.И. Захаров (Институт проблем комплексного освоения недр PAI [}
Емельянов, В.И.
Е60
Основы программирования на Delphi: Учеб. пособие для вузов/В.И. Емельянов, В.И. Воробьев, Т.П. Тюрина; Под ред. В.М. Черненького. — М.: Высш. шк., 2005.— 231 с: ил.
ISBN 5-06-004869-1
Пособие содержит основные начальные сведения по программированию на Delphi, более 20 заданий, рекомендованных к обязательному выполнению, и составляет материал курса «Алгоритмические языки программирования»
Для студентов вузов, обучающихся по направлению «Информатика и вычислительная техника». Может быть рекомендовано студентам других направлений и всем желающим изучить основы программирования на Delphi.
УДК 004.43 ББК 32.973-018.1
ISBN 5-06-004869-1
ФГУП «Издательство «Высшая школа», 2005
Оригинал-макет данного издания является собственностью издательства «Высшая школа», и его репродуцирование (воспроизведение) любым способом без согласия издательства запрещается.
ВВЕДЕНИЕ
Основной задачей изучения дисциплины "Алгоритмические языки и технология программирования" является обучение студентов методике разработки программ, основам алгоритмизации, методам отладки, тестирования и построения приложений на ЭВМ. В качестве базового языка программирования выбран Object Pascal (Паскаль).
Достоинства языка Паскаль общепризнанны: рациональность, лаконичность, полное соответствие идее структурного программирования, наличие мощной системы программирования и пакетов прикладных программ для решения широкого круга задач.
В настоящее время продолжают оказывать решающее влияние на состояние и развитие всех областей современного программирования идеи визуального, объектно-ориентированного и событийно управляемого программирования. Классическим выражением этих идей является среда программирования DELPHI и язык программирования OBJECT PASCAL.
Форма обучения программированию достаточно проста: обучение в работе. Такой способ не только ускоряет процесс обучения, но и помогает быстрее запомнить материал. Когда выполняется некоторое действие и можно увидеть его результат, то надолго запоминается, что было сделано и как.
Чтение книг по программированию - это хорошо, но гораздо лучше практика в программировании. Соответственно предлагаемое пособие - это фундамент Вашего успеха.
Для целей первоначального обучения наиболее приемлемым представляется разумное сочетание обучения программированию с изложением языка. Детально ориентированная на синтаксис методика учит не программированию, а кодированию. Не должно быть ни стремления к полноте, например, в описании языка, ни следования заповеди "от частного к общему", т. е. систематическому, формальному изложению предшествует предварительное неформальное знакомство с большинством языковых средств.
Данное учебное пособие содержит большое количество примеров. Теоретический материал изложен исходя из постепенного усвоения тех или иных языковых средств решения задач. Отличием данного пособия от многочисленных книг, посвященных программированию на DELPHI, является подробное описание реального процесса создания программ. Это означает,
что в центре внимания авторов пособия находились, прежде всего, технологии разработки приложений.
В данном пособии рассмотрена среда визуального программирования Delphi версии 7.0. Все примеры выполнены в операционной среде Windows ХР.
ОСНОВЫ DELPHI
Программное обеспечение представляет собой один из видов интеллектуальной собственности, разработка которой превратилась в индустрию, которая развивается по собственным строго определенным законам. Скорость создания и надежность программного обеспечения напрямую зависят от основного рабочего инструмента - используемой среды разработки. При этом важны не только достоинства текущей версии, но и базовые идеи, заложенные в концепцию инструментария.
Особенностью программирования в Windows является наличие многочисленных технологий, используемых при создании приложений различных типов, например офисных, для работы с базами данных, в среде "клиент-сервер", в Интернете и т.д. Среда разработки приложений Delphi для самых разнообразных предприятий и организаций, являющаяся интеллектуальной собственностью фирмы Borland, на протяжении ряда лет успешно выдерживает (и выигрывает!) жесткую конкуренцию с другими системами подобного типа.
В среде Delphi могут работать не только профессионалы. Среда разработки сохраняет простоту и наглядность процесса создания приложений, основанного на использовании технологий визуального программирования. Объектно-ориентированный компонентный подход позволяет легко и быстро создавать не только интерфейс программ, но и достаточно сложные механизмы доступа к данным, а также повторять и тиражировать удачные программные решения.
ОБЩАЯ ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ
Компьютерное программирование часто рассматривается как вид искусства. Однако многие институты преподают программирование как науку. Исследовательские учреждения давно ищут пути увеличения эффективности труда и уровня профессионализма разработчиков программ, т. е. интеллектуальной собственности, которая имеет свой особый статус и свое правовое поле.
Существуют различные подходы к программированию. Одним из них является структурное программирование, представляющее попытку превра-
собственности, которая имеет свой особый статус и свое правовое поле.
Существуют различные подходы к программированию. Одним из них является структурное программирование, представляющее попытку превра-
тить искусство программирования в обычную науку. Основной принцип структурного программирования заключается в создании некоторых аналитических моделей решаемой задачи перед началом кодирования. Двумя наиболее используемыми старыми моделями являются разработки "сверху вниз" и "снизу вверх".
Разработка "сверху вниз" означает, что программа создается исходя из принципа первоочередного решения главных задач. Новые более детальные уровни разрабатывают по мере успешной реализации предыдущих более высоких уровней.
Идея разработки "снизу вверх" заключается в том, что все хорошие программы состоят из хорошо отлаженных процедур и функций, объединенных логично и разумно. Новые уровни программы разрабатывают с использованием уже готовых функций и процедур, пока программа не будет готова.
В настоящее время значительным сдвигом на пути разработки технологий программирования является объектно-ориентированное программирование (ООП). ООП задумывалось как некая мощная концепция, уменьшающая время разработки и отладки программ. ООП описывает программы в терминах логических сущностей и взаимодействий между ними. Основным элементом программирования является класс, от которого порождаются многочисленные объекты со своими инкапсулированными данными и интерфейсами, позволяющими выполнять определенные встроенные действия. Отличительной особенностью ООП является мощный механизм эволюционного развития имеющихся многочисленных базовых классов путем наследования и встраивания новых интерфейсов в последующие поколения классов.
Концепция ООП соответствует внутренней логике функционирования операционной системы (ОС) Windows. Поэтому приложения, разработанные на основе ООП (в том числе и вереде Delphi), приобретают большую надежность кода и возможность широкого использования однажды построенных классов.
ЯЗЫК ПРОГРАММИРОВАНИЯ
Delphi - это могучая среда разработки самых разнообразных программных приложений, являющаяся одновременно и редактором и компилятором. Данная среда ориентирована на работу, прежде всего, в операционных системах Windows. Однако с помощью Delphi можно разрабатывать приложения для Linux и строить кроссплатформенные приложения Windows- Linux.
В основе любой программы на Delphi лежит язык Object Pascal - язык программирования высокого уровня, позволяющий использовать такие объектно-ориентированные языковые средства, как динамические массивы, перегрузка методов, параметры, заданные по умолчанию, файловые потоки, многопоточные приложения и многое другое.
В качестве главного момента можно отметить следующее: изучение Delphi следует вести в двух направлениях: изучение среды разработки и изучение языка программирования.
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
В Delphi разрабатываются приложения, работающие под управлением операциионной системы Windows. Эти приложения используют библиотеку базовых классов объектов (библиотеку компонентов). Таким образом, приложение представляет собой совокупность объектов, которыми являются само приложение и все его компоненты: окна, кнопки, меню и т.д. Объект-приложение разрабатывается как программа-проект, которая взаимодействует с другими объектами. Это взаимодействие, как и положено в объектно-ориентированном мире, выражается в сообщениях, посылаемых друг другу объектами. Идея обмена сообщениями легла в основу операционной системы Windows, где объекты-окна посылают и получают сообщения.
Основные принципы и понятия объектно-ориентированного программирования: класс, поля, методы, свойства, инкапсуляция, объект, наследование, полиморфизм.
Класс является обобщением понятия типа данных и задает свойства и поведение объектов класса, являющихся его построенными экземплярами. Каждый объект принадлежит некоторому классу. Отношение между объектом и классом такое же, как между переменной и ее типом. С формальной точки зрения класс - это объединение данных и обрабатывающих их процедур (инкапсуляция). Данные класса называются полями, или переменными класса, а процедуры обработки полей - методами класса. Поля определяют свойства объекта (экземпляра класса) или состояние объекта, методы определяют поведение объекта.
Для придания гибкости доступа к полям существуют такие элементы класса, как свойства. Свойства реализуют механизм доступа к полям. Каждому свойству соответствует свое поле, содержащее некоторое текущее знаовые поля и методы.
Метод базового класса иногда полезно объявить как виртуальный. Виртуальность обеспечивает возможность написания полиморфного метода,
ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ
Визуальное программирование позволяет разрабатывать все элементы приложения, непосредственно наблюдая результаты своей работы на экране. Иными словами, разработчик увидит, как будет работать его приложение еще до того, как полностью будет написана программа. Реализация визуального программирования стала возможной в связи с развитием графического интерфейса GUI (Graphical User Interface).
Основным понятием визуального программирования является интерфейсный элемент, который в терминах объектно-ориентированного программирования является объектом. Объекты - кнопки, строки, списки и т.д. - являются кирпичиками, из которых строится приложение. Среда визуального программирования позволяет увидеть объекты на экране монитора до выполнения программы. Изменение внешнего вида объекта выполняется с помощью таких его свойств, как высота, ширина, положение, цвет и др. Свойства - это атрибуты объекта, которые составляют его индивидуальность и помогают описать его. В то же время свойства обеспечивают возможность реагировать на внешние события.
Жизнь объектов состоит в обмене сообщениями. Сообщения инициируются событиями, которые происходят во внешнем по отношению к приложению мире: при действиях пользователя, операционной системы или другого приложения. События могут возникать, например, при нажатии на кнопку мыши или клавиши на клавиатуре. Сообщение может быть проигнорировано или обработано. Для обработки сообщения необходимо запрограммировать соответствующий обработчик события. Соответственно в ООП, в том числе и Delphi, основным стилем программирования является управляемое событиями программирование.
СОБЫТИЙНО УПРАВЛЯЕМОЕ ПРОГРАММИРОВАНИЕ
Рассмотрим простую и естественную модель событийно управляемого и визуального программирования, характерную для Delphi. В типовой модели у приложения три составляющие: визуальная, системная и обработчики событий (рис.1).
Визуальная составляющая задает образ на экране, с которым будет работать пользователь, т. е. визуальная составляющая определяет интерфейс пользователя. Большинство элементов интерфейса (кнопки, окна, списки и др.) стандартизированы. Поэтому в разных средах разработки (Visual Basic, Visual C++, Delphi и др.) визуальный инструментарий содержит одни и те же элементы интерфейса (элементы управления).
Обработчик событий 1 |
|
|
|
Обработчик событий 2 |
|
|
|
■ ■ ■ |
|
|
|
Обработчик событий п -1 |
|
|
|
Обработчик событий п |
|
|
Рис. 1
Элементы управления являются объектами. Их свойства и поведение определяются полями и методами соответствующих базовых классов. Классы, порождающие интерфейсные элементы управления, в Delphi называют компонентами. Все визуальные компоненты находятся в библиотеке визуальных компонентов Delphi VCL (Visual Component Library). Кроме визуальных компонентов в этой библиотеке есть невизуальные компоненты, не имеющие образа на экране монитора.
Пользователь - возмутитель спокойствия в мире объектов. Он нажимает на кнопки, выбирает элементы списков, печатает тексты в окнах редактирования. Каждому его действию соответствует некоторое событие. Системная составляющая определяет тип и параметры события и формирует сообщение объекту, с которым связано событие. Иначе говоря, системная составляющая находит нужный объект и запускает соответствующий обработчик события, т. е. соответствующий метод данного объекта. В обработке события программист может предусмотреть самые разные действия: изменение свойств объектов, добавление или удаление интерфейсных объектов и т. д.
В большинстве приложений нет необходимости программировать системную составляющую. Кроме того, такое программирование часто требует владения функциями Windows API (Application Programm Interface, функции из открытых библиотек Windows).
Таким образом, чтобы создать приложение, необходимо выполнить два взаимосвязанных этапа: разработать с помощью визуального инструментария интерфейс пользователя и написать реакции на действия пользователя, т. е. для каждого возможного события написать обрабатывающий его метод. Полученный интерфейс определяет способ взаимодействия пользователя и приложения, т.е. управление приложением, и внешний вид форм, из которых состоит разрабатываемый проект. Функциональность, т.е. конкретные решаемые задачи, определяется разрабатываемыми обработчиками событий.
Windows -приложение
Основным объектом объектно-ориентированной операционной системы windows является окно. В дополнение к обычным свойствам объекта оно имеет графический образ на экране дисплея, с которым взаимодействует пользователь. Параметры windows-окна определяют такие свойства, как тип, размер, положение на экране и т. д. В многозадачной и многооконной операционной системе windows одновременно можно запустить несколько приложений, с каждым из которых может быть связано несколько окон, В каждом приложении имеется, как минимум, одно окно.
События, возникающие в процессе работы компьютера (инициированные пользователем или связанные с посылкой сообщений от одного приложения к другому, от одного окна к другому того же приложения), приводят к возникновению сообщений, из которых операционная система (\Упкю\уз) организует системную очередь сообщений. Далее сообщения распределяются по приложениям и создается для каждого приложения своя очередь. В этой очереди группируются сообщения от разнообразных источников: мыши, клавиатуры, таймера, других приложений и от самой операционной системы. В этой схеме есть исключения, так как некоторые сообщения напрямую направляются окну, например, сообщение WM_DESTROY, уведомляющее о закрытии данного окна.
windows накладывает довольно жесткие ограничения на структуру приложений - каждое имеет главную процедуру (в Delphi это программа-проект), одинаково устроенную для всех приложений. Главная процедура начинает работу с регистрации класса окна приложения, затем создает и рисует на экране главное окно и, возможно, другие окна. После создания объектов-окон, связанных с приложением, запускается цикл обработки очереди сообщений приложения, который иногда называют основным циклом обработки сообщений.
Среда программирования
Интегрированная среда разработки приложений в Delphi называется ШЕ (Integrated Development Environment). Под этим названием скрывается целая коллекция окон, меню и программ, которые позволяют проектировать интерфейс, связывать код с каждым экранным элементом и полностью отлаживать приложение внутри Delphi.
При входе в IDE стандартно появляются 4 окна: главное окно (рис.2), окно инспектора объектов (Object Inspector), окно форм (Form Designer) и окно редактора кода (Code Editor).
Главное окно является управляющим центром IDE. Оно управляет файлами, включаемыми в приложение, и выполняет всю работу с их сопровож-
10
дением, компиляцией и отладкой. Оно состоит из трех отдельных элементов: панели меню (Menubar), панели инструментов (Speedbar) и палитры компонентов (Component Palette).
Окно инспектора объектов оформлено в виде двухстраничного блокнота (рис. 3). Это окно используется для настройки компонента или формы. Первая страница используется для настройки свойств (Properties), вторая - для настройки событий (Events).
Форма является контейнером интерфейсных элементов. Окно форм (проектировщик форм) используется в процессе разработки интерфейса (рис. 4). Вместе с инспектором объектов проектировщик форм позволяет добавлять компоненты в форму, модифицировать их, связывать обработчики событий с программным кодом на Object Pascal, используя окно редактора кода.
Рис.3
По умолчанию для каждого нового проекта создается одно окно, которое называется формой. В дальнейшем к проекту могут быть добавлены другие формы. Но только одна форма может быть активной.
Рис.4
Окно редактора кода (Code Editor, рис.5, справа) позволяет редактировать коды всех модулей (программных единиц), входящих в разрабатываемое приложение. Это окно оформлено в виде многостраничного блокнота.
11
Каждая страница отображает код той или иной программной единицы, входящей в приложение. С помощью проектировщика форм и инспектора объектов представляются все виды частей "фасада" приложения, но без редактора кода нельзя связать эти части в единое целое.
Рис. 5
По умолчанию слева от редактора кода находится окно Code Explorer (см. рис. 5). Оно используется для поиска в редакторе кода какого-либо программного элемента: типа, класса, метода и т.д. Это окно можно выделить в самостоятельное и перенести в другое место.
ШЕ Delphi обладает большой гибкостью в настройке рабочей среды. Для настройки используется диалоговое окно Environment Options, которое выбирается, раскрывая пункты меню Tools - Options.
ПЕРВОНАЧАЛЬНЫЕ СВЕДЕНИЯ О ПРОЕКТЕ ПРИЛОЖЕНИЯ
Основу любой разработки a Delphi составляет проект, объединяющий различные элементы в единое целое и обеспечивающий требуемую структуру для Windows-приложения. В простейшем случае в проект входят модули и формы различных типов. Как правило, из одного проекта получается одно приложение.
Самый маленький проект состоит из главного файла (программы-проекта), который имеет расширение DPR. Кроме этого файла в проект входят файлы с расширениями CFG (настройки проекта), DOF (опции проекта), DSK (настройки среды), RES (файл ресурсов, в котором хранятся курсоры, значки, строки сообщений и др.). Главный файл проекта имеет стандартную форму и автоматически генерируется средой Delphi.
Обычный проект, кроме главного файла, включает в себя, как минимум, одну форму и связанную с этой формой программу модуля. Форма служит для размещения на ней интерфейсных элементов. Программа модуля позво-
12
ляет на языке Object Pascal связать эти элементы в единое целое. Форма хранится в файле с расширением DFM (файл ресурсов формы), а программа модуля - в файле с расширением PAS.
Модуль - это текстовый файл с исходным программным кодом. С модулем может быть связана форма, представляющая отдельное окно. Программная заготовка для модуля генерируется автоматически при построении формы. В состав проекта могут входить модули, не имеющие связанных с ними форм.
При входе в ШЕ Delphi автоматически строится стандартный проект, включающий одну форму и связанный с ней один модуль. Если требуется выбрать какой-либо другой вариант проекта, то используется репозиторий (специальное хранилище, Repository, рис. 6).
Рис.6
В репозиторий содержатся не только варианты проектов, но и элементы, которые можно добавлять в проект. Открыть репозиторий можно при помощи команды New-Other меню File. Если перед этим закрыть проект, предлагаемый по умолчанию (Close All в меню File), и выбрать в репозиторий Application, то получим стандартный проект, т.е. такой же, какой в самом начале был закрыт.
Обычно все файлы проекта располагают в одном каталоге. Сборка всего проекта выполняется при его компиляции (Ctrl+F9). При этом имя создаваемого приложения (ЕХЕ-файл) или динамически загружаемой библиотеки (DLL-файл) совпадает с названием проекта. Для каждого модуля создается файл кода с расширением DCU.
Для управления составными частями проекта служит диспетчер проектов (Project Manager, рис. 7), который вызывается командой Project Manager меню View главного окна Delphi.
13
Рис.7
В общем случае в Delphi всегда создается группа проектов. Простой проект представляет группу из одного проекта.