оператор1, оператор2, ... , операторN




Цикл – пока

While P do A;

Действие А будет повторяться до тех пор, пока значение предиката будет оставаться истинным. Поэтому в действии А должно изменяться значение переменных, от которых зависит Р. В противном случае произойдет зацикливание. Вычисление предиката производится до начала выполнения действия А и может случиться так, что действие А не будет выполняться ни разу.

Цикл – до

Repeat A until P;

Повторение типа Repeat until всегда выполняется хотя бы 1 раз. Действие А перестает выполняться, как только предикат становится истинным.

4) выбор – переключатель case (обобщение развилки), структура, облегчающая программирование без ущерба для ясности программы. Структура выбор полезна в том случае, когда требуется выбрать одну из нескольких альтернатив.

В зависимости от значения Р выполняется одно из действий А, В, …Z. После чего происходит переход к выполнению следующей управляющей структуры.

 

4. Дайте определение идентификатора. Укажите правила формирования идентификаторов в языке программирования Паскаль.

 

Идентификаторы в Турбо Паскале – это имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ и полей в записях. Идентификаторы могут иметь произвольную длину, но значащими (уникальными в области определения) являются только первые 63 символа.

Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры. Буквой считается также символ подчеркивания, поэтому идентификатор может начинаться этим символом и даже состоять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор.

 

5. Дайте описание общей структуры программы на языке Паскаль.

 

Program имя программы;

Uses Список используемых модулей

Label Список меток из основного блока программы

Const Определение констант программы

Type Описание типов

Var Описание переменных

Procedure Текст процедуры

Function Текст функции

Begin

Основной блок программы или раздел операторов

End.

6. Назовите операторы ввода-вывода. Укажите их отличие друг от друга.

 

Процедура ввода данных

Для ввода данных:

­ с клавиатуры во время работы программы исходных данных (значений переменных) предназначена инструкция readln (read);

­ используя одну инструкцию readln (read), можно ввести значения нескольких переменных;

­ в случае несоответствия типа введенных данных типу переменной, значение которой вводится с клавиатуры, программа завершает работу и на экран выводится сообщение Error №ошибки: invalid numeric format (если программа запущена из среды разработки, т. е. из Turbo Pascal) или Run time error №ошибки (если программа запущена из операционной системы).

Для вызова процедуры ввода используются три оператора:

1) Read (список переменных);

Каждое вводимое значение набирается минимум через один пробел и последовательно присваивается переменным из списка;

2) ReadLn (список переменных);

То же, что и оператор Read, только после ввода данных происходит переход на новую строку (т.е. следующий оператор ввода будет вводить данные с новой строки);

3) ReadLn;

Происходит переход на новую строку без ввода данных.

Процедура вывода данных

o Для вывода данных на экран:

­ инструкции write и writeln предназначены для вывода на экран монитора сообщений и значений переменных;

­ одна инструкция write (writeln) может вывести на экран значения нескольких переменных и (или) несколько сообщений;

­ инструкция writeln без параметров переводит курсор в начало следующей строки экрана.

Для вызова процедуры вывода используются три оператора:

1) Write (список переменных);

Выводит последовательно значения переменных из списка;

2) Writeln (список переменных);

То же, что и оператор Write, но после вывода переменных осуществляется переход на новую строку (следующий оператор вывода будет выводить данные с начала новой строки);

3) Writeln;

Осуществляется переход на новую строку без вывода данных.

 

7. Опишите синтаксис оператора if и его функциональное назначение. Объясните принцип его работы.

Условный оператор используется для программирования развил­ки, если условие сформулировано как логическое выражение.

IF <логическое выражение> THEN<оператор 1>

[ ELSE <оператор 2>];

<следующий оператор >;

Оператор выполняется таким образом: если результат вычисления логического выражения TRUE, то выполняется <оператор 1>, затем <следующий оператор >; если - FALSE, то выполняется <оператор 2>, затем <следующий оператор>. Операторы 1 и 2 могут быть простым или составным оператором. Если часть оператора, начинающаяся ELSE, от­сутствует, то при логическом выражении равным FALSE, будет выпол­няться <следующий оператор>. При вложенности условных операторов ELSE всегда относится к ближайшему предшествующему IF. Следует избегать большой глубины вложенности условных операторов, так как при этом теряется наглядность и возможно появление ошибок.

 

8. Опишите синтаксис оператора case и его функциональное назначение. Объясните принцип его работы.

 

Оператор выбора CASE может быть использован вместо услов­ного оператора, если требуется сделать выбор более, чем из двух воз­можностей.

CASE <селекторное выражение> OF

<метка1>: <оператор 1>;

<метка2>: <оператор 2>;

…………..

<меткаN>: <операторN>

[ ELSE <оператор>]

END;

Селекторное выражение (селектор, переключатель) и метки-константы (метки варианта, метки выбора) должны иметь один и тот же простой тип (кроме вещественного). Метки-константы в отличие от ме­ток программы не требуется описывать в разделе описания меток. Но на них нельзя ссылаться в операторе GOTO. Метки варианта могут быть перечисляемого и интервального типа.

Оператор выбора выполняется следующим образом. Сначала вы­числяется селекторное выражение; затем выполняется оператор, метка варианта которого равна текущему значению селектора; после этого происходит выход из оператора CASE на следующий оператор. Если значение селектора не совпадает ни с одной из меток варианта, будет выполнен оператор после ELSE. Если ветвь ELSE отсутствует, то управление передается следующему за CASE оператору.

 

9. Опишите синтаксис оператора for и его функциональное назначение. Объясните принцип его работы.

 

Общий вид оператора цикла с параметром:

FOR i:= A TO B DO оператор;

где i - параметр цикла (счетчик повторов) - переменная целого типа (integer);

A и B - начальное и конечное значения параметра цикла-выражения того же типа, что и параметр цикла;

оператор - любой простой или составной оператор, который требуется повторить несколько раз.

Оператор цикла типа FOR...TO...DO предусматривает последовательное увеличение на единицу параметра цикла i от начального значения A до конечного значения B и выполнение входящего в цикл алгоритма при каждом значении параметра цикла.

 

10. Опишите синтаксис оператора while и его функциональное назначение. Объясните принцип его работы.

 

Если число повторений, выполняемых в цикле, заранее не известно или шаг приращения счетчика (параметра) цикла отличен от единицы, то необходимо использовать оператор цикла с предусловием. Оператор цикла этого вида имеет вид:

WHILE условие DO оператор;

где условие - это логическое выражение, от значения которого зависит- продолжать повторы или завершить цикл;

оператор - любой простой или составной оператор.

Выполнение оператора начинается с вычисления значения логического выражения. Если оно имеет значение «True» (истина), то выполняется оператор (операторы), входящий в цикл. Выполнение цикла продолжается до тех пор, пока логическое выражение в его заголовке не примет значение «False» (ложно). Если выражение равно «False» при первом же витке цикла, то работа цикла завершится, а входящие в него операторы не выполнятся ни разу. Поскольку в цикле типа WHILE...DO условие завершения его работы проверяется до выполнения входящего в него оператора, такой цикл называется «оператор цикла с предусловием».

 

11. Опишите синтаксис оператора repeat и его функциональное назначение. Объясните принцип его работы.

Общий вид оператора цикла с постусловием таков:

REPEAT

оператор1, оператор2,..., операторN

UNTIL условие;

где оператор1, оператор2,..., операторN - операторы тела цикла;

условие - логическое выражение, диктующее завершение повторов.

Оператор цикла с постусловием начинается с выполнения операторов внутри цикла. Затем проверяется истинность логического условия, стоящего после слова UNTIL. Если это условие справедливо (True), то осуществляется выход из цикла. Если же значение логического выражения ложно (False), то выполнение операторов тела цикла повторяется, после чего снова проверяется истинность логического условия.

 

12. Дайте определение массива. Перечислите способы объявления массива.

 

МАССИВ - упорядоченная группа фиксированного количества переменных одного типа, имеющая общее имя.

Массив описывается в разделе переменных посредством указания типа его элементов и максимального их количества. Тип элементов может быть любым. При задании максимального числа элементов массива (числа ячеек таблицы) обычно употребляют диапазон целых чисел. Общий вид описания массива следующий:

Возможны два способа описания массивов:

Typeимя типа = Array[t,t1,...,tn ] Of тип элементов;

Varимя массива: имя типа;

Или

Var имя массива:Array[t,t1,...,tn ] Of тип элементов;

здесь t, t1,...,tn - типы индексов массива (любой скалярный тип, кроме real) или размерность.

К имени массива предъявляются те же требования, что и к имени переменной.

Размерность - это диапазон целых чисел, каждое из которых является порядковым номером (индексом) одной из ячеек массива. Обычно диапазон индексов задают, начиная от единицы: [1..100]. Это удобно, но не обязательно. Важно лишь, чтобы правая граница диапазона была больше или равна левой границе.

 

13. Дайте определение понятию «подпрограмма». Назовите основное отличие процедур от функций. Опишите структуру процедуры и функции.

 

Подпрограммой называется именованная логически законченная группа операторов, которую можно многократно вызвать для выполнения по имени из различных мест программы.

Отличие функции от процедуры заключается в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое единственное значение или указатель, поэтому обращение к функции можно использовать в соответствующих выражениях наряду с переменными и константами.

Описание процедуры имеет вид:

Procedure имя (формальные параметры);

раздел описаний

Begin

раздел операторов

End;

и помещается в разделе описаний основной программы (глобальном блоке).

Подпрограмма-функция аналогична процедуре, но имеет следующие отличия.

1. Заголовок функции имеет вид

Function имя (формальные параметры): тип функции;

2. Функция имеет только один результат выполнения.

3. Результат обозначается именем функции, поэтому в разделе операторов функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя этой функции.

4. Вызов функции в основной программе осуществляется непосредственно внутри выражения по ее имени с указанием фактических параметров.

 

14. Опишите структуру Unit-модуля. Ключевые слова Unit, Interface, Implementation. Описание каждого раздела.

Структура модуля имеет вид:

ЗАГОЛОВОК МОДУЛЯ

Unit < имя модуля >;

ИНТЕРФЕЙСНАЯ ЧАСТЬ

Interfaсe

Uses < список используемых модулей >

Type{ открытые объявления переменных, которые будут доступны в основной программе}

Var

Procedure

Function

РЕАЛИЗАЦИОННАЯ ЧАСТЬ или ИСПОЛНЯЕМАЯ ЧАСТЬ

Implementation {выполнение}

Uses < список используемых модулей >

{ собственные объявления, доступны только внутри данной реализации подпрограмм}

Type

Var

{ процедуры и функции }

Procedure

Function

ИНИЦИИРУЮЩАЯ ЧАСТЬ

Begin

… {Основной блок модуля}

End.

 

15. Дайте определение понятию «строка». Опишите формат строки.

Строка - это последовательность символов кодовой таблицы персональной ЭВМ. При использовании в выражениях строка-константа заключается в апострофы. Длина строки равняется количеству символов в этой строке и может изменяться от 0 до 255.

Форма описания строковых данных:

Type имя типа = String [максимальная длина строки];

Var имя строковой переменной: имя типа;

или

Var имя строковой переменной: String [максимальная длина строки];

16. Дайте определение понятия «запись». Опишите формат объявления структуры типа запись.

Запись - это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов, называемых полями записи. Определение типа записи начинается идентификатором Record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием имен полей и типа каждого поля. Структура объявления типа записи такова:

Type <имя типа> = Record

<имя поля1>: <тип компонентов>;

<имя поляN>: <тип компонентов>;

End;

VAR <имя переменной>: <имя типа>;

17. Дайте определение понятия «множество». Перечислите операции, производимые над множествами. Опишите формат множества.

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

Все элементы множества должны принадлежать одному из скалярных типов, кромевещественного. При работе с множествами допускается использование операций отношения, “=”, “<>”, “>=”, “<=”, объединения, пересечения, разности множеств и операции in. Результатом выражения с применением этих операций является значение True или False.

Формат записи множественных типов:

Type <имя типа> = set of <элемент 1,…., элементN>;

Var <идентификатор, ….>: <имя типа>;

Можно задать множественный тип и без предварительного описания:

Var <идентификатор, …>: set of <элемент1, …>;

 

18. Раскройте суть понятия «сортировка». Перечислите типы сортировок с краткой их характеристикой.

 

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

Сортировка прямым включением.

Допустим, что массив a[1..n] разбит на две части a1..i-1, ai..n – в первой части элементы упорядочены, во второй – нет. При i=2 такое разбиение получается автоматически, т.к. массив из одного элемента тривиально упорядочен. На каждом шаге i=2..n выполняем элементарный алгоритм: берем очередной элемент r из неупорядоченной части и включаем его в «нужное» место упорядоченной части. Для поиска нужного места в нижеприведенном алгоритме используется барьер a[0]:=x. Элементы, начиная от i-1 до нужного j сдвигаются на одну позицию: a[j]:=a[j-1]. На каждом проходе происходит перемещение i -того элемента в готовую последовательность, а некоторое число элементов сдвигается вправо. Данный процесс перемещения называется просачиванием элемента.

Сортировка бинарными включениями.

Алгоритм сортировки прямыми включениями можно легко улучшить, пользуясь тем, что готовая последовательность a[1],...,a[i-1], в которую нужно включить новый элемент, уже упорядочена. Поэтому место включения можно найти значительно быстрее, применив бинарный поиск, который исследует средний элемент готовой последовательности и продолжает деление пополам, пока не будет найдено место включения. Модифицированный алгоритм сортировки называется сортировкой бинарными включениями.

Прямой выбор.

Для i=1..n-1 выполняется следующий элементарный алгоритм: среди элементов ai..n выбираем минимальный am и переставляем местами элементы i -й и m -й. В результате на первое место станет самый минимальный, на второе – следующий минимальный и т.д.

Сортировка прямого обмена (пузырьковая).

Это метод, в котором обмен двух элементов является основной характеристикой процесса. Алгоритм сортировки простым обменом основан на принципе сравнения и обмена пары соседних элементов до тех пор, пока не будут рассортированы все элементы. Для i=1..n-1 выполняется следующий элементарный алгоритм: начиная от n до i последовательно проверяем упорядоченность двух соседних элементов a[j] и a[j-1], и если они не упорядочены, то меняем их местами. В результате такого обмена минимальный элемент перемещается на место i.

Шейкерная сортировка.

Улучшение алгоритма - это запоминать, производится ли на данном проходе какой-либо обмен. Если нет, то это означает, что алгоритм может закончить работу. Этот процесс улучшения можно продолжить, если запомнить не только сам факт обмена, но и место (индекс) последнего обмена.

Однако внимательный программист заметит здесь странную асимметрию: один неправильно расположенный "пузырек" в "тяжелом" конце рассортированного массива всплывет на место за один проход, а неправильно расположенный элемент в "легком" конце будет опускаться на правильное место только на один шаг на каждом проходе. Изменение направления сортировки в каждом из проходов алгоритма поиска называют шейкерной сортировкой.

Для того чтобы тяжелые элементы сразу попадали вниз, пузырьковую сортировку выполняют так, чтобы направление прохода было снизу вверх, следующий проход - сверху вниз и так далее.

Пирамидальная сортировка.

Предположим, что дана пирамида с элементами hl+1,..., hr для некоторых значений l и r и нужно добавить новый элемент x для того, чтобы сформировать расширенную пирамиду hl,..., hr. Новый элемент x сначала помещается в вершину дерева, а затем “просеивается” по пути, на котором находятся меньшие по сравнению с ним элементы, которые одновременно поднимаются вверх; таким образом, формируется новая пирамида.

Обменная сортировка разделением (быстрая сортировка).

Выбирается любой произвольный элемент массива, далее массив просматривается слева направо до тех пор пока не будет найден элемент больший выбранного; а затем просмотрим его справа налево, пока не найдем элемент меньший выбранного. Найденные элементы поменяем местами. Затем продолжим процесс “просмотра с обменом”, пока два просмотра не встретятся где-то в середине массива. В результате массив разделится на две части: левую - с ключами меньшими выбранного элемента; и правую - с большими ключами. Описанный алгоритм применяется к обоим этим частям, в результате чего последовательность разбивается на 4 части. Алгоритм применяется к каждой четвертинке и т.д. Разделение заканчивается, когда в каждой части остается 1 элемент.

19. Дайте определение «Рекурсия», «Условие завершения рекурсии», «Косвенная рекурсия».

Рекурсия – процедура (функция), которая обращается к самой себе или вызывает саму себя. Содержание и мощность рекурсивного определения, а также главное назначение, состоит в том, что оно позволяет с помощью конечного выражения определить бесконечное множество объектов. Максимальное число рекурсивных вызовов процедуры без возвратов, которое происходит во время выполнения программы, называется глубиной рекурсии. Число рекурсивных вызовов в каждый конкретный момент времени, называется текущим уровнем рекурсии. Главное требование к рекурсивным процедурам заключается в том, что вызов рекурсивной процедуры должен выполняться по условию, которое на каком-то уровне рекурсии станет ложным. Косвенной или взаимной рекурсией называется организация вызовов нескольких процедур и функций по кругу (первая процедура вызывает вторую, вторая - третью,..., n-я процедура вызывает первую).

20. Дайте понятие «текстовый файл». Опишите формат объявления текстового файла.

Текстовые файлы состоят из последовательности символов, разделенных на строки. Каждый текстовый файл разделяется на строки неопределенной длины, которые заканчиваются символом конец строки. Каждый символ представлен во внутреннем коде ASCII и занимает 1 байт. Текстовый файл отличается от символьного не только делением на строки. В текстовый файл можно записать и из него прочитать информацию любого типа. Если эта информация не символьная, то в процессе чтения или записи происходит ее преобразование из символьной формы во внутреннюю и обратно.

К текстовым файлам возможен только последовательный доступ. С текстовыми файлами работают различные редакторы текстов. Текстовые файлы имеют стандартный тип TEXT.

 

Формат описания

VAR < имя файла>: TEXT;

 

21. Дайте понятие «нетипизированный файл». Опишите формат объявления нетипизированного файла.

 

Файлы без типа используются обычно при копировании файлов, когда не важна внутренняя структура записи файла. Если длина сегмента на диске 1024 байта, то количество блоков в группе равно 8 при длине блока 128 символов.

Обмен информацией происходит непосредственно между программой и файлом без использования буферной памяти. Адресация блоков производится по их номерам. Блоки в этом случае являются компонентами файла. Использование файлов без типа приводит к экономии памяти.

Для работы с такими файлами предусмотрены специальные процедуры, позволяющие производить обмен группами блоков по 128 символов.

 

Формат описания

VAR < имя файла >: FILE;

 

BLOCKREAD(<имя файла>,<переменная>,<число компонент> [,<факт.число>]); – для чтения блока из файла.

BLOCKWRITE(<имя файла>,<переменная>,<число компонент> [,<факт.число>]); – для записи блока в файл.

Здесь <имя файла> – имя файла без типа; <переменная> – имя переменной для чтения или записи; <число компонент> – количество передаваемых компонент за один раз; <фактическое число> – количество фактически переданных записей длиной 128 байт.

Файл для блочного ввода-вывода описывается с типом FILE. Для файла без типа нельзя использовать процедуры READ и WRITE.

При открытии файла без типа можно указать длину записи файла в байтах. Она указывается вторым параметром при обращении к процедуре RESET или REWRITE, в качестве которого используется выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.

 

22. Дайте понятие «типизированного файл». Опишите формат объявления типизированного файла. Перечислите процедуры и функции, необходимые при работе с типизированными файлами с краткой характеристикой.

Типизированный файл - это последовательность элементов одного типа. При последовательном обращении к файлу текущий указатель переходит от элемента к элементу.

Формат описания

TYPE <имя>=FILE OF <тип элементов>

VAR < имя файла >: <имя>

или без объявления файлового типа

VAR < имя файла >: FILE of <тип элементов>;

Если есть необходимость нарушения последовательной записи или чтения из файла, текущий указатель, может быть изменен процедурой SEEK (МуFilе, n); где n - требуемое положение указателя. Нумерация элементов типизированного файла начинается с нуля.

Seek (МуFilе, 0); - устанавливает указатель в начальной позиции (на первый элемент).

Seek (МуFilе, FileSize(МуFilе)); - устанавливает указатель после последнего элемента, то есть на признак конца файла.

Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе. Текущую позицию указателя дает функция FilePos (МуFilе);

Функция IOResult предназначена для поиска ошибок, возникающих при работе с файлами. Эта функция возвращает результат последней операции ввода/вывода, если автоматический контроль за ошибками, возникающими при выполнении операций ввода/вывода, отключен с помощью директивы компилятора {$I-}. При безошибочном выполнении операций ввода/вывода функция IOResult всегда возвращает результат равный нулю. Поэтому, как правило, ее используют в операции сравнения с нулем. При использовании функции IOResult нужно помнить о том, что она возвращает величину, которую можно интерпретировать как флаг ошибки лишь в том случае, когда эта функция вызывается следом за операцией ввода/вывода. А если Вы хотите провести анализ ошибки позже, Вам придется сохранить возвращаемое значение в некоторой промежуточной переменной.

Изменение имени файла производится процедурой RENAME(МуFilе, FileName);

первый аргумент которой - переменная файлового типа, а второй аргумент - строкового типа - новое имя файла, которое может быть сокращенным или полным (с указанием пути). Действие этой процедуры эквивалентно действию аналогичной процедуры DOS.

Уничтожение части файла от текущего положения до конца производится процедурой TRUNCATE(МуFilе);

Уничтожение всего файла производится процедурой ERASE(МуFilе); действие которой эквивалентно удалению файла в операционной системе DOS.

 

23. Раскройте суть понятия «объект». Перечислите свойства объекта с краткой их характеристикой.

Объект – это структура, компонентами которой являются данные-поля объекта и процедуры (функции) - методы объекта. Все данные и методы инкапсулированы в одном объекте. Определение типа ОБЪЕКТ: TYPE ИмяОбъекта = OBJECT Поля данных; Заголовки методов; END;Все поля данных предшествуют методам. Поля – любые структуры данных кроме файлов. Все поля предшествуют методам. Полями могут быть любые структуры данных, кроме файлов.

Метод – это процедура (или функция), объявление которой включено в объявление объектного типа. Метод выполняет действие над объектом – экземпляром объектного типа. Включая объявление методов в объявление объектного типа, программист явно указывает какие действия могут быть выполнены над объектом. Инкапсуляция является важнейшим свойством объекта, на котором строится ООП. Инкапсуляция заключается в том, что объект скрывает свои детали, которые несущественны для использования объекта, т.е. пользователь класса должен видеть и использовать только список полей объекта и методов и не вникать в его внутреннюю реализацию. Этот прием еще называется сокрытие данных, благодаря которому защищаются такие сведения клиента, как баланс счета. Инкапсуляция является средством организации доступа к данным только через соответствующие методы.

Наследование – это порождение новых типов объектов (потомков) из уже имеющихся типов объектов (предков или прародителей). Объекты Потомки получают по наследству все поля и методы объекта Предка, могут быть дополнены новыми полями и методами, и, кроме того, могут переопределять методы объекта Предка, сохраняя или изменяя при этом у одноимённых методов списки формальных параметров и типы возвращаемых значений. Поля объекта Предка в объекте Потомке заменять нельзя. Любой метод объекта Предка может быть вызван в любом методе объекта Потомка. В этом случае перед именем вызываемого метода указывается имя типа объекта Предка.При вызове метода прямого Предка в версии Турбо Паскаль 7.0 достаточно предварительно указать ключевое слово INHERITED (унаследованный). Синтаксически наследование выражается следующим образом:Type ИмяОбъектаНаследника = OBJECT (ИмяОбъектаПредка) Новые поля объекта наследника; Новые методы объекта наследника; END; Полиморфизм – это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т.е. объявить в потомке одноименный метод и реализовать в нем нужные свойства. В результате в объекте-потомке и объекте-родителе будут действовать два одноименных метода, имеющих разную алгоритмическую основу и придающих объектам разные свойства.Полиморфизм означает возможность определения единого по имени метода в каждом объектовом типе иерархической структуры разными способами.Если несколько объектных типов связаны между собой отношениями родитель-потомок, то указателю на базовый тип может быть присвоено значение указателя на любой из дочерних типов.

 

 

24. Раскройте суть понятия ООП. Опишите назначение конструктора и деструктора.

Конструктор

Конструктор – это особый метод, который позволяет выполнять некоторую работу, обеспечивающую поддержку механизма виртуальных методов. Он должен вызываться раньше других методов объекта, т.к. он выполняет инициализацию объекта. Вместо слова «procedure» в объявлении объектных типов используется « constructor ».

Для объявления конструктора используется зарезервированное слово constructor, после которого идет имя конструктора и параметры, если необходимо. Конструктор возвращает указатель на экземпляр класса. В теле конструктора Вы можете вызвать конструктор предка для инициализации закрытой части предка значениями по умолчанию, например:

Для создания объектов используется расширенный синтаксис вызова функции new, который позволяет выделить память для объекта и инициализировать объект с помощью вызова конструктора. Общий вид инструкции:

Указатель:=new(ТипОбъекта, КонстукторОбъекта);

Деструктор

Для уничтожение объекта служит деструктор. Деструктор объявляется с помощью зарезервированного слова destructor, после которого идет имя деструктора. Деструктор ничего не возвращает и не имеет параметров.

Т.к. объект представляет собой сложную структуру, то рекомендуется использовать метод Done. Метод Done оформляется как деструктор – особая процедура, выполняющая специфическую работу, в том числе обеспечивающая объединение освобождающихся, возможно, небольших участков памяти в более крупные блоки.

Инструкция Dispose(p,Done); уничтожает объект, на который указывает P.

На практике в качестве конструктора используют метод, устанавливающий начальные значения экземпляра объекта. В частности, конструктор может быть пустым. В рассмотренном примере конструктором является метод Init. Конструктор – это обычный метод-процедура, в котором служебное слово procedure заменено на constructor. Он, помимо действий, заданных в его теле, выполняет установочную работу для механизма виртуальных методов, обеспечивая вызов в процессе выполнения программы именно того виртуального метода, который определён для вызывающего объекта. В примере 3 один и тот же метод Moveto будет работать по-разному (передвигать различные фигуры) в зависимости от того, экземпляр какого объектового типа этот метод вызывает. Такое свойство называется полиморфизмом. Полиморфизм возникает на стыке принципов наследования и динамических связей. Полиморфизм означает возможность определения единого по имени метода в каждом объектовом типе иерархической структуры разными способами.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: