Объектно-ориентированное программирование на языке Delphi
Национального технического университета университете Украины «КПИ» email:
Информатика – это область человеческой деятельности, связанная с процессами преобразования информации с помощью компьютеров и их взаимодействием со средой применения. Информатика появилась благодаря развитию компьютерной техники и немыслима без нее.
Одним из важнейших разделов информатики является программирование. Язык программирования – это формальный, искусственно созданный язык для написания и реализации алгоритма на компьютере.
Данное методическое пособие предназначено для изучения основ объектно-ориентированного языка программирования Delphi (ООП) без ориентации на структурную парадигму.
Среди главных причин, принесших заслуженную популярность объектно-ориентированного программирования, следует отметить следующие:
почти полное разрешение проблемы кризиса в программном обеспечении, за счет уменьшения времени на разработку программного продукта и высокой технологии программирования;
переход от существующих языков программирования к новым, прогрессивным информационным технологиям и сходство идей объектно-ориентированного программирования с идеями из других областей науки.
Методы ООП для решения технических задач нередко используются в повседневной жизни, поэтому, обучение языкам объектно-ориентированного программирования не вызывает особых трудностей.
Методическое пособие может быть рекомендовано для студентов, изучающих объектно-ориентированное программирование.
Алгоритмы и исполнители 4
Основные понятия объектно-ориентированного программирования 5
Проверочная работа №1. Алгоритмы и исполнители. Основные понятия ООП 7
Форма и размещение на ней простейших объектов 9
Расположение объектов на форме 16
Дополнительные возможности при работе с объектами Edit, Memo. Кнопка с изображением BitBtn 18
Лабораторная работа №3. MainMenu — главное меню формы 19
Проверочная работа №2. Работа с компонентами. 20
Арифметические операции в ООП 21
Лабораторная работа № 4 23
Лабораторная работа №5. Алгоритм решения математический задачи на языке. 24
Стандартные арифметические функции 25
Лабораторная работа № 6 25
Флажки (CheckBox) и переключатели (RadioButton). Условный оператор 26
Проверочная работа №3. Условный оператор. 33
Работа со строками в объектно-ориентированном программировании. Оператор цикла с параметрами 40
Программирование циклических алгоритмов. Циклы «до» и «пока» 44
Лабораторная работа №10 45
Проверочная работа №4. Строки. Циклы 47
Рассмотрение дополнительных компонентов для ввода/вывода строк 51
Оператор присоединения (With) 53
Графические компоненты 53
Лабораторная работа №11 55
Лабораторная работа №12 58
Лабораторная работа №13 61
Проверочная работа №5. Массивы 62
Обработка событий мыши. Регулировка прозрачности формы 65
Процедуры и функции вызова диалоговых окон 66
Лабораторная работа №14 67
Работа с датой и временем 68
Лабораторная работа №15 71
Компоненты вкладки Samples. Обработка событий OnDownClick и OnUpClick 72
Лабораторная работа №16 72
Компоненты вкладки Dialogs 73
Лабораторная работа №17 74
Список рекомендуемой литературы 77
Статьи о Delphi
Большим шагом вперёд в развитии технологий программирования было появление объектно-ориентированного программирования. Здесь программный код перестал быть «плоским» и программист оперирует не просто процедурами и функциями, а целыми объектами.
- свойствами (цвет, текст на кнопке, шрифт текста и т. д.);
- событиями (события пользовательского ввода, например, нажатие на кнопку);
- методами (обеспечивающими работу кнопки, например, метод прорисовки текста, прорисовки фокуса и т. д.).
Свойства — это переменные, которые влияют на состояние объекта. Например, ширина и высота объекта.
Методы — это те же процедуры и функции, т. е. это то, что объект умеет делать. Например, объект может иметь процедуру для вывода какого-то текста на экран. Эта процедура и есть метод, который принадлежит объекту.
События — это те же процедуры и функции, которые вызываются при наступлении определенного события. Например, если изменилось какое-то свойство объекта, может быть сгенерировано соответствующее событие и вызвана процедура, которая инициализирует реакцию приложения на это событие.
Изначально в объекте может и не быть процедуры для какого-то события, а если и есть, то она действует как обработчик по умолчанию. В среде Delphi в качестве обработчиков вы будете назначать собственные процедуры только в строго определенном формате (в зависимости от события). Формат процедуры заранее определен, и в разных случаях объект должен будет передавать вам различные параметры. Ваши процедуры должны будут соответствовать предопределенному формату, чтобы не было разногласий с объектом, к которому они будут относиться.
Рассмотрим пример. Пусть пользователь нажал на кнопку. В этом случае она, как объект, генерирует соответствующее событие. В результате этого может быть вызвана процедура-обработчик, которую вы назначили кнопке при возникновении данного события. В этом случае не требуется никакая дополнительная информация, поэтому объект не будет пересылать вам никаких параметров, кроме указателя на самого себя. Однако, если нужно обработать событие, связанное с перемещением курсора мыши, дело будет обстоять несколько иначе. В этом случае объект будет генерировать событие и автоматически передавать вам новые координаты X и Y курсора, поэтому процедура должна быть объявлена с соответствующими параметрами, чтобы можно было принять их от объекта.
Теперь рассмотрим работу свойств, методов и событий как единого целого. И снова для примера возьмем объект — кнопку. Такой объект должен обладать следующим минимальным набором.
- левая позиция Left;
- верхняя позиция Top;
- ширина Width;
- высота Height;
- заголовок Caption;
- создать кнопку;
- нарисовать кнопку;
- уничтожить кнопку.
- кнопка нажата;
- кнопка отпущена;
- заголовок кнопки изменен.
У каждого объекта обязательно присутствуют два метода: «создать объект» и «уничтожить объект». Во время создания объекта происходит выделение памяти дляхранения необходимых свойств, и заполняются значения по умолчанию. Во время уничтожения объекта происходит освобождение выделенной памяти. Метод для создания объекта называется конструктором (constructor). Метод для уничтожения объекта называется деструктором (destructor). Сам процесс создания объекта называется инициализацией.
- Создание кнопки с помощью вызова конструктора;
- Изменение необходимых свойств;
- Все. Наша кнопка готова к работе.
- Объявить переменную типа «кнопка».
- В эту переменную проинициализировать объект.
- Изменить нужные свойства.
- Можно использовать объект.
Давайте напишем прототип небольшой программы, которая пояснит весь процесс создания объекта.
Начало программы
Переменные:
Объект1: Кнопка;
Начало кода
Объект1:= Кнопка.Создать объект;
Объект1.Заголовок:=’Привет’;
Объект1.Уничтожить объект.
Конец кода;
Доступ к свойствам и методам объектов осуществляется при помощи записи
ИмяОбъекта.Свойство
или
ИмяОбъекта.Метод
т.е. в записи имя объекта и его свойства или методы объекта разделяются точкой.
Создание объекта перед использованием — обязательно. Поэтому, если вы попробуете использовать код, приведенный ниже, то у вас произойдет ошибка.
Неправильное использование объекта
Начало программы
Переменные:
Объект1: Кнопка;
Начало кода
Объект1.Заголовок:=’Привет’;
Конец кода;
Здесь мы пытаемся изменить заголовок без создания и уничтожения объекта, а это ошибка! В данном случае переменная Объект1 ещё ничего не хранит и ни на что не указывает. Её необходимо сначала проинициализировать и создать для нее объект-кнопку или присвоить адрес расположения в памяти уже существующей кнопки.
Без инициализации можно использовать только простые переменные, такие как число или строка. Тут Delphi выделяет под них память автоматически, потому что размер этих переменных фиксированный и Delphi уже на этапе компиляции знает, сколько памяти нужно отвести под переменную. Сложные переменные типа объектов обязательно должны инициализироваться. Это связано еще и с размещением данных. Простые переменные хранятся в стеке (сегмент стека), а сложные переменные типа объектов хранятся в памяти компьютера. При старте программы сегмент стека инициализируется автоматически. Поэтому переменные могут спокойно размещаться в уже подготовленной памяти сегмента стека. Когда вы создаете объект, он создается в нераспределенной памяти компьютера. Так как память еще не распределена, ее нужно сначала подготовить (выделить нужный объем под создаваемый объект). После того как объект не нужен, эту память необходимо освободить, вызвав деструктор объекта. Простые переменные освобождать не надо, потому что стек очищается автоматически.
Объект — очень удобная вещь. Он работает как шаблон, на основе которого создаются переменные типа объектов. Например:
Объект в виде шаблона
Начало программы
Переменные:
Объект1 — Кнопка;
Объект2 — Кнопка;
Начало кода
Объект1:= Кнопка.Создать объект;
Объект2:= Кнопка.Создать объект;
Объект1.Заголовок:=’Привет’;
Объект2.Заголовок:=’Пока’;
Объект1.Уничтожить объект;
Объект2.Уничтожить объект;
Конец кода;
Инициализацию объекта еще очень часто называют созданием экземпляра объекта. И это тоже правильно. Когда вы вызываете конструктор, в памяти создается новый экземпляр объекта. В данном примере можно сказать, что наши переменные объект1 и Объект2 указывают на собственные экземпляры объекта Кнопка, т. е. в памяти получается две независимые копии объекта (кнопки). Любую из них можно независимо менять и она не будет влиять на другую переменную.
Теперь более подробно о самом примере. В нем объявляются две переменных типа «кнопка». Потом производятся их инициализация и изменение заголовка на нужный. В результате мы получили из одного объекта две кнопки с разными заголовками. Обе кнопки работают автономно и не мешают друг другу, потому что им выделена разная память. Таким образом создаются новые объекты на основе шаблона и потом раздельно используются, изменяя разные свойства шаблона и используя его методы.
По материалам сайта О Delphi