Связывания при выполнении процедур: поток управления между активизациями, деревья активизации.

При вызове подпрограммы происходит ее активация. При этом в памяти форми-

руется структура — запись активации. Запись активации содержит все данные,

необходимые для работы подпрограммы. В каждый момент времени управление

может передаваться только одной подпрограмме. Передача управления между активациями подпрограмм соответствует принципу LIFO (последний вошел — первый вышел).

Поток управления между активациями подпрограмм может быть отображен с по-

мощью дерева активации. Вершины в дереве представляют активации. Если акти-

вация Р вызывает активацию Q, то у вершины Р есть потомок — вершина Q.

Если Р вызывает Q перед тем как вызвать R, вершина для Q появляется левее

вершины для R.

Формат записи активизации. Пример активизаций процедур.

Запись активации — это шаблон (фрейм), который содержит все данные, необхо-

димые для активации подпрограмм. Эта запись содержит память для локальных

переменных, формальных параметров, а также для любой дополнительной инфор-

мации, требуемой для активации.

Характеристика исключений. Этапы работы с определяемыми исключениями

В любой жизнеспособной системе должна предусматриваться реакция на чрезвы-

чайные (исключительные) ситуации. Такую реакцию в языке программирования

предусматривает аппарат исключений. Требования к аппарату исключений:

1. Полнота исключений — на любое исключение должна быть предусмотрена

реакция исполнителя (компьютера).

НЕ нашли? Не то? Что вы ищете?

2. Минимальность возмущений — затраты на учет чрезвычайных ситуаций должны

быть минимальны.

3. Минимальность повреждений — ущерб при возникновении исключений должен

быть минимален.

На первом этапе, при создании программы программист объявляет исключение, пишет под него ловушку и вводит в программу ≪генератор≫ исключения, который анализирует корректность хода вычислений и при необходимости может сгенерировать предварительно объявленное исключение.

Второй этап — это этап вычислений программы. Здесь может произойти авария и возникнуть сигнал исключения. В этой ситуации нормальные вычисления

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

На третьем этапе в вычислительной среде обычные действия ≪заморожены≫,

движется лишь сигнал исключения. Считается, что он движется в направлении,

где его поджидает ловушка (обработчик) исключения. Говорят, что исключение

распространяется от точки его порождения до точки его обработки. Обработчик

это специализированная подпрограмма, которая реагирует на аварию (конкретное

исключение), в максимальной степени демпфируя ее последствия.

Обработчики Исключений в С++. Связывание исключений с обработчиками.

Область действия обработчиков исключений задается с помощью блока

try, а обработка исключений производится с помощью catch-функций:

try {

// Программный текст, где возможно возникновение исключений

}

catch (формальный параметр) {

// тело первого обработчика

}…

catch (формальный параметр) {

// тело m-го обработчика

}

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

Само исключение в языке С++ возникает по оператору

throw [ <выражение> ] Тип выражения должен совпадать с типом формального параметра какого-то обработчика исключений. По типу выражения throw выбирается конкретный обработчик, имеющий соответствующий тип формального параметра.

Понятие абстракции. Инкапсуляция.

Абстракция — это упрощенное представление реальной сущности с важными

для данного контекста характеристиками. При построении абстракции вто-

ростепенные характеристики сущности игнорируются. Абстракция упрощает

рассмотрение сущности, выделяя существенные свойства и игнорируя второ-

степенные свойства.

Инкапсуляция — это такое размещение в контейнере данных и подпрограмм для

их обработки, при котором доступ к данным возможен только с помощью подпро-

грамм. Иначе говоря, инкапсуляция обеспечивает принцип сокрытия информации

Когда информация инкапсулирована в абстракцию, это означает, что пользо-

ватель:

‰. не нуждается в скрытой информации для использования абстракции;

‰. даже при желании не имеет возможности как-нибудь манипулировать скрытой

информацией. Ему это просто не позволено.

Абстрактные типы данных. АТД в С++.

Абстрактный тип данных (АТД) — это синтаксический контейнер, который

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

Целиком и полностью требованиям АТД удовлетворяют такие синтаксические единицы

языка С++, как классы. С++ класс — это описание типа данных.

Данные в классе называют элементами-данными, а функции в классе называют

элементами-функциями.

Все экземпляры (объекты) класса разделяют один и тот же набор элементов функций, но каждый экземпляр получает собственный набор из элементов-данных класса.

Класс может содержать как скрытую от клиентов секцию (private-секцию), так

и видимую секцию ( public-секцию).

Объектно-ориентированное программирование: наследование, полиморфизм.

Наследование является достаточно гибким механизмом, который позволяет на-

следнику не просто быть копией родителя, но и дополнять унаследованные черты

своими собственными характеристиками. Наследник может иметь дополнительные

атрибуты и операции. Наконец, он может изменить содержание унаследованной

операции, переопределив ее.

Рассмотрим три типовых варианта применения наследования.

Потомок наследует все Потомок добавил 2 отребута и операц. Потомок унаслед. op_a2

Переопределение родительских операций приводит к тому, что в дереве на-

следования классов появляются операции с одинаковым заголовком и разными

телами — все вместе они образуют так называемую полиморфную операцию.

Наследование в языке С++.

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

Новый класс строится на базе уже существующего с помощью конструкции следующего вида:

class Parent {....};
class Child : [модификатор наследования] Parent {....};

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

Динамическое связывание в языке С++.

При динамическом связывании оператор объявления переменной не содержит име-

ни типа. Вместо этого тип переменной определяется при присвоении ей значения

оператором присваивания. При выполнении оператора присваивания переменная

из его левой части получает тип переменной, выражения или значения, находяще-

гося в его правой части.

Возможность динамического связывания типа была введена в язык C# версии

2010 года. Включение в объявление переменной зарезервированного слова dynamic

разрешает динамическое связывание типа, это показано в следующем примере:

dynamic any;

Можно отметить некоторое сходство данного объявления с объявлением

object any;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6