Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конструирование программ.doc
Скачиваний:
12
Добавлен:
05.05.2019
Размер:
12.37 Mб
Скачать

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 – Графическое представление класса

Объектно-ориентированной разработке присущи следующие характерные свойства классов и объектов:

  • Инкапсуляция – объединение данных и кода в одно целое. Скрытие информации – имеется возможность запретить любой доступ к данным объекта, кроме как через его методы. Внутренняя структура объекта скрыта от пользователя.

  • Наследование – возможность создавать новые классы по принципу «от общего к частному». Наследование позволяет классам-потомкам при сохранении всех свойств классов-родителей добавлять свои собственные свойства, которые отражают их индивидуальность.

  • Полиморфизм – способность объектов выбирать реализацию метода на основе типов данных, принимаемых в сообщении. Объекты разных классов реагируют по-своему на одно и тоже сообщение. Это позволяет разным объектам иерархии классов реализовать своим собственным образом некоторый метод обработки данных с одним и тем же именем для всех объектов.