При вызове подпрограммы происходит ее активация. При этом в памяти форми-
руется структура — запись активации. Запись активации содержит все данные,
необходимые для работы подпрограммы. В каждый момент времени управление
может передаваться только одной подпрограмме. Передача управления между активациями подпрограмм соответствует принципу 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 |


