Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абстрактные классы.rtf
Скачиваний:
6
Добавлен:
10.07.2019
Размер:
2.25 Mб
Скачать

1.4.4. Наследование в программировании

Объектно-ориентированное программирование предоставляет механизм, посредством которого производному классу разрешается наследовать данные и операции от базового класса. Этот механизм, называемый наследование класса (class inheritance), позволяет производному классу использовать данные и операции, которые были определены ранее в базовом классе. Производный класс может добавлять новые операции или переписывать некоторые операции, так как он устанавливает методы для обработки его данных. Аналогично, ребенок может наследовать дом или автомашину от его (или ее) родителя. Затем он может затем н: пользовать этот дом или автомашину. Если необходимо, наследник может модифицировать дом, чтобы он соответствовал его (или ее) особым условиям.

Проиллюстрируем наследование класса с помощью линейного списка, названного SeqList, который сохраняет информацию в последовательном порядке. Список – это важная и знакомая структура, используемая для ведения инвентаризационных записей, графика деловых встреч, типов и количества необходимых гастрономических товаров и т.д. Наследование возникает, когда мы объявляем упорядоченный список, который является особым типом последовательного списка. Упорядоченный список использует все базовые методы обработки списка из последовательного списка и обеспечивает свою собственную операцию вставки для того, чтобы элементы списка сохранялись в возрастающем порядке.

В линейном списке, содержащем N элементов, любой элемент занимает одно из положений от 0 до N-1. Первое положение является передним, а последнее – конечным. На рис. 1.3 показан неупорядоченный список целых чисел с шестью элементами.

0 5

  1. 3

  2. 22

  3. 45

  4. 23

  5. 8

Рис. 1.3. Неупорядоченный линейный список

Базовые операции SeqList включают операцию Insert, которая добавляет новый элемент в конец списка (Рис. 1.4), и операцию Delete, которая удаляет первый элемент списка, соответствующий ключу. Вторая функция удаления, называемая DeleteFront, удаляет первый элемент в списке (Рис. 1.5). Структура определяет размер списка с помощью ListSize и предоставляет операцию Find, выполняющую поиск элемента в списке. Для управления данными пользователь может определить, является ли список пустым, и удалить его операцией Clear-List.

Insert (10)

  1. 5

  2. 3

  3. 22

  4. 45

  5. 23

  6. 8

  7. 10

Рис. 1.4. Вставка значения 10

  1. 5

  2. 3

  3. 22

  4. 23

  5. 8

  6. 10

Delete (45)

  1. 3

  2. 22

  3. 45

  4. 23

  5. 8

  6. 10

DeleteFront

Рис. 1.5. Удаление элемента 45 и удаление первого элемента в списке

Данный класс предоставляет метод GetData, позволяющий клиенту читать значение любого элемента списка. Например, для нахождения максимального значения в списке мы можем начать сканирование списка с нулевого элемента. Процесс заканчивается при достижении конца списка, который определяется с помощью ListSize. В каждом положении следует обновлять максимальное значение, если текущее значение (GetData) больше, чем текущий максимум. Например, для второго элемента списка число 22 сравнивается с предыдущим максимумом, равным 3, поэтому текущее максимальное значение заменяется на 22. В конечном счете, число 23 определяется как максимальный элемент в списке.

ADT SeqList

Данные

Неотрицательное целое число, указывающее количество элементов, находящихся в данный момент в списке (размер), и список элементов данных.

Операции

Конструктор

Начальные значения: Нет

Процесс: Установка размера списка на 0

ListSize

Вход: Нет

Предусловия: Нет

Процесс: Чтение размера списка

Выход: Размер списка

Постусловия: Нет

ListEmpty

Вход: Нет

Предусловия: Нет

Процесс: Проверка размера списка

Выход: Возвращать TRUE, если список пустой; в противном случае – возвращать FALSE.

Постусловия: Нет

ClearList

Вход: Нет

Предусловия: Нет

Процесс: Удаление всех элементов из списка и установка размера списка на 0.

Выход :Нет

Постусловия: Список пустой

Find

Вход: Элемент, который необходимо найти в списке.

Предусловия: Нет

Процесс: Сканирование списка для нахождения соответствующего элемента.

Выход: Если соответствующий элемент списка не найден, возвращать FALSE; если он найден, возвращать TRUE и этот элемент.

Постусловия: Нет

Insert

Вход: Элемент для вставки в список

Предусловия: Нет

Процесс: Добавление этого элемента в конец списка.

Выход: Нет

Постусловия: Список имеет новый элемент; его размер увеличивается на 1.

Delete

Вход: Значение, которое должно быть удалено из списка.

Предусловия: Нет

Процесс: Сканирование списка и удаление первого найденного элемента в списке. Не выполнять никакого действия, если этот элемент не находится в списке.

Выход: Нет

Постусловия: Если соответствующий элемент найден, список уменьшается на один элемент.

DeleteFront

Вход: Нет

Предусловия: Список не должен быть пустым.

Процесс: Удаление первого элемента из списка.

Выход: Возвращать значение удаляемого элемента

Постусловия: Список имеет на один элемент меньше.

GetData

Вход: Положение (роs) в списке.

Предусловия: Генерируется ошибка доступа, если роз меньше 0 или больше 0 (размер -1)

Процесс: Получать значение в положении роs в списке.

Выход: Значение элемента в положении роs.

Постусловия: Нет

Конец AQT SeqList