- •Введение в конструирование программ
- •Пенза 2006 г.
- •Предисловие
- •1 Обработка информации на компьютере
- •1.1 Модель обработки информации на компьютере
- •1.2 Основные объекты языка программирования
- •1.2.1 Синтаксические элементы языка программирования
- •1.2.2. Значения и типы
- •1.2.3. Константы и переменные
- •1.2.4. Выражения
- •1.2.5. Операторы
- •1.3 Лабораторные задания
- •1.3.1 Логическая разминка
- •1.3.2 Реализовать схемы программ на языке Object Pascal
- •2 Структурное конструирование программ
- •2.1 Простая программа
- •2.2 Консольное приложение
- •2.2.1 Создание, сохранение и загрузка программы
- •2.2.2 Компиляция и выполнение программы
- •2.3 Лабораторные задания
- •2.3.1 Составление простых программ
- •2.3.2 Выполните трассировку и определите результаты работы программы
- •2.3.3 Программирование с использованием управляющих структур
- •2.4 Подпрограммы
- •2.4.1 Глобальные данные
- •2.4.2 Способы передачи параметров
- •2.4.3 Функции
- •2.4.4 Процедуры
- •2.4.5 Значения параметров по умолчанию
- •2.4.6 Перегрузка функций
- •2.4.7. Рекурсивные подпрограммы
- •2.4.8. Передача наименования подпрограммы как параметра
- •2.5 Отладка программ
- •2.6 Лабораторные задания. Подпрограммы
- •2.6.1 Конструирование подпрограмм
- •2.6.2 Разработка рекурсивных подпрограмм
- •2.7. Модули
- •Interface {интерфейс модуля}
- •Implementation {реализация}
- •Initialization {инициализация}
- •3. Структуры данных
- •3.1. Массивы
- •3.1.1. Действия над массивами
- •I, j : byte; { индексы элементов массивов }
- •3.1.2 Передача массивов в качестве параметров
- •3.1.2.1. Формальные параметры как массивы с фиксированными размерами
- •3.1.2.2. Формальные параметры как массивы со «свободными» размерами
- •3.1.2.3. Определение наименьшего/наибольшего значения массива
- •3.1.3 Лабораторные задания
- •3.1.3.1 Одномерные массивы
- •3.1.3.2. Двумерные массивы
- •3.2. Строки
- •3.2.1 Лабораторные задания
- •3.3. Записи
- •3.3.1 Лабораторные задания
- •3.4 Файлы.
- •3.4.1 Основные понятия и операции
- •3.4.2 Типизированные файлы
- •3.4.3 Текстовые файлы
- •3.4.4 Лабораторные задания
- •3.5 Динамические структуры данных. Указатели
- •3.5.1 Основные понятия и определения
- •3.5.2 Процедуры выделения и освобождения памяти
- •3.5.3 Односвязный список
- •3.5.4 Лабораторные задания. Указатели, список
- •3.5.5 Динамические массивы
- •4. Введение в объектно-ориентированное конструирование программ
- •4.1 Основные понятия и определения
- •4.2 Классы и объекты
- •4.2.1 Структура класса
- •4.2.2 Создание и уничтожение объектов
- •4.2.3 Пример. Класс – динамический массив
- •4.2.5 Операции с объектами
- •4.2.5.1 Оператор is
- •4.2.5.2 Оператор as
- •4.2.5.3 Копирование объектов одного класса
- •4.2.6 Свойства
- •4.2.7 Наследование и полиморфизм
- •4.2.8 События
- •4.2.9 Исключительные ситуации
- •4.2.9.1 Операторы try…except
- •4.2.9.2 Операторы try…finally
- •5. Визуальная разработка программ в delphi
- •5.1. Интегрированная среда разработки программ
- •5.1.1 Проект
- •5.2 Конструирование простого приложения
- •5.2.1 Интерфейс Пользователя
- •5.2.2 Визуальное конструирование
- •5.2.3 Реализация методов
- •5.2.4 Обработка исключительных ситуаций
- •5.2.5 Файлы приложения Калькулятор
- •5.3 Компоненты ввода/вывода данных StringGrid и Memo
- •5.3.1 Компонент StringGrid – таблица строк
- •5.3.1 Ввод массива. Компонент StringGrid
- •5.3.3 Компонент Memo – многострочное окно редактирования
- •5.3.4 Ввод массива. Компонент Memo
- •5.4 Немного о графике
- •5.4.1 Свойство Canvas. Построение графика функции
- •5.4.2 Событие OnPaint
- •Список литературы
- •Приложение а. Кратко о Delphi а.1 Свойства проекта
- •А.2 Программный код пустой формы
- •А.3 Главная форма
- •А.3.1 Свойства главной формы
- •А.3.2 События главной формы
- •А.4 Компоненты Delphi
- •Приложение b. Приложение «Калькулятор»
3.5.4 Лабораторные задания. Указатели, список
В разработанную ранее согласно заданию 3.3.1 программу добавьте процедуры работы со списком (рисунок 3.8).
Процедура «Создание списка» формирует односвязный список из данных файла. Количество записей файла определяется в процедуре автоматически.
Процедура «Просмотр списка» отображает значения данных элементов списка.
Процедура «Удаление списка» освобождает память, занимаемую элементами списка.
Рисунок 3.8 – Структура программы для задания 3.5.4
3.5.5 Динамические массивы
Динамический массив – это массив, память для которого выделяется во время работы программы.
Синтаксис объявления динамического массива:
<имя массива> : аrray of <тип элементов>;
Индекс динамического массива всегда начинается с 0 !
Имя динамического массива – это указатель, который не требует разыменования (символа ^) для доступа к данным. Например, FArray [2].
Оператор присваивания для имен динамических массивов означает присваивание указателей!
Выделение памяти для динамического массива осуществляется процедурой SetLength (<имя массива>, <количество элементов>), освобождение памяти процедурой Finalize (<имя массива>).
Пример:
Var
FArray: array of integer;
. . .
begin
SetLength (FArray, 10); {выделяем память для 10 элементов массива}
. . . {что-то делаем с массивом }
{не хватило элементов массива?}
SetLength (FArray, Length(FArray) + 10);{добавим еще 10 элементов }
. . . { делаем с массивом что-то еще }
Finalize (FArray); {освобождаем память }
End.
Использование многомерных динамических массивом рассмотрим на примере "матрицы", которая имеет различное количество элементов в каждой строке.
Пример многомерного динамического массива:
Var
FArray: array of array of integer;
begin
SetLength (FArray, 10); {память для 10 строк }
. . .
SetLength (FArray[0], 5); { память для 5 элементов первой строки }
SetLength (FArray[1], 4); { память для 4 элементов второй строки }
SetLength (FArray[2], 6); { память для 6 элементов третьей строки }
. . . { Например, FArray[1, 3] – четвертый элемент второй строки }
Finalize (FArray); {освобождаем память, выделенную для массива }
End.
4. Введение в объектно-ориентированное конструирование программ
4.1 Основные понятия и определения
Подход к разработке программных средств, в основе которого лежит объектная декомпозиция программной системы, получил название объектно-ориентированного.
Объектная декомпозиция заключается в представлении программной системы в виде совокупности классов и объектов, которые наиболее естественным образом отражают предметную область работы системы. При этом иерархический характер системы отражается в иерархии классов, а ее функционирование рассматривается как взаимодействие объектов этих классов.
Объект обладает индивидуальностью и поведением.
Индивидуальность объекта, его свойства – это значения данных, которые определяют его состояние.
Поведение объекта – это совокупностью методов (процедур и функций), определяющих взаимодействие объекта с «внешней» средой и изменяющих его состояние. Методы описываются внутри класса и предназначены для операций над его данными. От обычных процедур и функций методы отличаются тем, что им при вызове передается указатель (с зарезервированным именем self) на тот объект, который их вызвал. Поэтому обрабатываться будут данные именно того объекта, который вызвал метод.
Таким образом, объект объединяет данные (свойства) и код (методы) в единое целое.
Каждый объект является представителем некоторого класса.
Класс – это совокупность однотипных объектов. Класс определяет общие свойства для всех его объектов.
Графическое изображение класса в нотации UML (Unified Modeling Language) следующее (рисунок 4.1):
Рисунок 4.1 – Графическое представление класса
Объектно-ориентированной разработке присущи следующие характерные свойства классов и объектов:
Инкапсуляция – объединение данных и кода в одно целое. Скрытие информации – имеется возможность запретить любой доступ к данным объекта, кроме как через его методы. Внутренняя структура объекта скрыта от пользователя.
Наследование – возможность создавать новые классы по принципу «от общего к частному». Наследование позволяет классам-потомкам при сохранении всех свойств классов-родителей добавлять свои собственные свойства, которые отражают их индивидуальность.
Полиморфизм – способность объектов выбирать реализацию метода на основе типов данных, принимаемых в сообщении. Объекты разных классов реагируют по-своему на одно и тоже сообщение. Это позволяет разным объектам иерархии классов реализовать своим собственным образом некоторый метод обработки данных с одним и тем же именем для всех объектов.