- •Содержание
- •Пояснительная записка
- •Раздел 1. Основы программирования
- •Тема 1.1 Понятие алгоритма
- •Понятие алгоритма. Свойства алгоритма
- •Алгоритмический язык
- •Понятие алгоритма. Свойства алгоритма
- •Хорезми
- •2. Алгоритмический язык
- •Тема 1.2 Методы описания алгоритма
- •Виды описания алгоритма
- •Тема 1.3 Типы алгоритмов
- •1.Типы алгоритмов
- •Алгоритм линейной структуры
- •3. Разветвляющийся алгоритм
- •4. Циклический алгоритм
- •5.Виды циклов
- •Цикл с предусловием (цикл пока)
- •2. Цикл с постусловием (цикл до)
- •3. Арифметический цикл (цикл для) – цикл с параметром.
- •Тема 1.4. Алгоритмический ряд.
- •Операторы цикла с условием
- •Операторы ограничения и прерывания цикла
- •Раздел 2. Решение задач на пэвм.
- •Тема 2.1. Основные этапы подготовки задачи к решению на пэвм.
- •Этапы решения задач
- •Тема 2.2 Программа на языке высокого уровня.
- •Тема 2.3. Методика Джексона
- •1. Методика Джексона
- •Шаг объект-действие
- •Раздел 3.Разработка программы на языке Турбо Паскаль
- •Тема 3.1 Основные элементы
- •История и классификация языков программирования
- •Элементы языка Турбо Паскаль
- •Тема 3.2. Типы данных
- •1. Типы данных Типы данных
- •Тема3.3 Программа на языке Турбо Паскаль
- •Структура программы на языке Паскаль
- •4. Вывод данных в тр
- •5. Ввод данных в тр
- •Тема 3.4 Массивы и их обработка
- •Строковый тип данных
- •Процедуры и функции для работы со строками
- •1. Определение массива
- •2 Описание массивов
- •3 Действия над массивами
- •4.Двумерный массив
- •6.Строковый тип данных
- •'Текстовая строка'
- •7. Процедуры и функции для работы со строками
- •Тема 3.5 Встроенные процедуры и функции
- •1. Арифметические процедуры и функции:
- •2. Функции преобразования типов:
- •3. Процедуры и функции для работы со строками:
- •Тема 3.6. Процедуры и функции пользователя
- •Отличия функции от процедур
- •3. Описание процедуры
- •4. Описание функций
- •5. Локальные и глобальные переменные.
- •6. Параметры в процедурах.
- •Тема 3.7. Записи
- •1. Структура записи в тр
- •2. Отличия записи от массива.
- •Тема 3.8 Файлы и их обработка
- •1. Понятие файла
- •2. Чтение и запись информации из файл или в файл
- •3.Доступ к файлам
- •4.Имена файлов
- •5. Связь файла с файловой переменной.
- •6. Открытие и переименование файла.
- •7. Типизированные фалы.
- •8. Нетипизированные файлы.
- •9.Текстовые файлы
- •Раздел 4. Объектно – ориентированная модель программирования
- •Тема 4.1. Основные характеристики ооп. Преимущества.
- •1. Основные характеристики ооп. Преимущества
- •Тема 4.2. Инкапсуляция.
- •Тема 4.3. Наследование.
- •Тема 4.4.Виртуальные методы и полиморфизм.
- •Перечень источников литературы для самостоятельного изучения учебной дисциплины «Основы алгоритмизации и программирования»
Тема 4.3. Наследование.
Тип лекции: текущая
План:
1. Наследование Примитивные объекты не используются как програмные модули, а используются в качестве носителей общих свойств и методов. Такие объекты называют родительскими. Объекты основанные на родительских называют дочерними. Родительский тип не используемый для описания переменных называется абстрактным. Тип потомок наследует все поля типа отца. В их числе все поля унаследованные отцом, если у него есть предки. Увеличение числа полей у потомка необязательно. Наследоваться также могут и методы, но выборочно. Описание типа потомка имеют отличительную деталь - имя типа отца: <имя типа потомка>=object(<имя типа отца>) С увеличением сложности объектов увеличивается число действий, которое можно заменить построением нового метода, причем имена методов создаются так, как если бы объекты не имели между собой родственной связи. Одинаковое обозначение функционально-подобных методов упрощает не только восприятие системы объектов, но и программирование. Важной деталью использования наследования в программах является применение присваивания объектам значений объектов. Присваивание A:=B допустимо, если A и B - однотипны, A - предок B или для каждого поля A есть соответствующее поле в B.
Предположим, мы создаем программу, в которой, помимо объекта-точки, фигурирует также объект-окружность. Конечно, можно было бы описание этого нового типа создать с нуля, подобно тому как мы описали тип Dot в предыдущем разделе. Однако этот новый тип-окружность (назовем его Ring) имеет много общего с существующим типом Dot. В самом деле, как и точка, окружность характеризуется двумя координатами: a и b, определяющими положение ее центра. Однако для создаваемого объекта необходимо добавить поле, задающее радиус окружности.
Что касается методов, то для нового типа Ring подошел бы метод Move, поскольку перемещение точки и перемещение окружности (собственно, ее центра) по экрану осуществляются одинаково. Однако метод, инициализирующий объект (Init), а также методы, делающие окружность видимой или невидимой (Show и Hide), придется создать заново.
Итак, мы выяснили, что новый тип Ring кое в чем повторяет тип Dot. А нельзя ли новый тип создать на основе уже существующего, просто добавив в него новые поля и методы? Оказывается, это возможно благодаря свойству объектных типов, известному как наследование. Поскольку речь идет о наследовании, в соответствии с генеалогической терминологией существующий тип, служащий основой для создания нового объекта, называют предком, или родительским типом, а создаваемый объект – потомком, или дочерним типом. Потомок автоматически наследует все поля и методы своего предка.
Свойство наследования широко используется в ООП. Благодаря ему на основе существующего объекта можно создать любое количество новых объектов. Основываясь на этих новых объектах, можно создавать еще и еще объекты, причем длина цепочки наследования ничем не ограничивается. При этом каждый объект может иметь любое количество потомков, но только единственного предка.
А теперь вернемся к нашим типам Dot и Ring. В описании типа-потомка должно указываться имя родительского типа (в круглых скобках после зарезервированного слова OBJECT).
Type
Ring = object (Dot)
Rad : integer
end;
В приведенном описании типа Ring имеется поле Rad, определяющее радиус окружности, которого не было у типа Dot. Кроме того, тип Ring унаследовал все поля своего предка (два значения типа INTEGER, определяющие положение точки на экране). Однако здесь пока отсутствуют методы. Вот как может выглядеть описание типа Ring, дополненное соответствующими методами.
Ring = object (Dot)
Rad : integer;
procedure Init (x, y, r : integer);
procedure Show;
procedure Hide
end;
{----------------------------------------------}
procedure Ring.Init;
begin
a : =x; b : =y; Rad :=r;
end;
{----------------------------------------------}
procedure Ring.Show;
begin
SetColor (White);
Circle (a, b, Rad);
end;
{---------------------------------------------}
procedure Ring.Hide;
begin
SetColor (Black);
Circle (a, b, Rad);
end;
Необходимо заметить, что методы объекта-потомка заменяют собой (или переопределяют) для потомка одноименные методы родительского объекта. Иными словами, если имеет место обращение к методу Ring.Move, система смотрит, не задан ли метод с таким именем в описании объекта Ring. Если да, используется этот новый метод; если нет, применяется метод, унаследованный от предка. (При этом необходимо помнить, что переопределять можно только методы; имена полей в объекте-потомке не должны совпадать с именами полей родительского объекта.)
После того как тип-потомок объявлен, прежде чем приступить к манипулированию его полями, необходимо создать экземпляр объекта.
Var
ring1 : ring;
Перечень источников:
1. Ахо Альфред В., Хопкрофт Джон, Ульман Джеффри Д. Структуры данных и алгоритмы: Пер. с англ.: Уч.пос.- М.: Издательский дом “Вильямс”, 2000.-324 с.
2. Бауэр Ф.Л., Гооз Г. Информатика. Вводный курс: В 2 ч.- М.:Мир, 1990.-543с.
3. Вирт Н. Алгоритмы + структуры данных = программы.- М.: Мир, 1985. (Алгоритмы и структуры данных.- М.: Мир, 1989.) (Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001. (2-е изд., испр.))
