Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры к ГОСАМ (все билеты).doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.56 Mб
Скачать

1.2. Архитектура как интерфейс между уровнями физической системы

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

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

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

Уровень 5 является одним из центральных уровней архитектуры и проводит разграничение между системным программным и аппаратным (т. е. схемным и микропрограммным) обеспечением. Он позволяет представить физическую структуру системы независимо от способа реализации.

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

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

3. Виртуальные функции. Объявление виртуальных функций. Таблицы виртуальных функций. Структура таблицы виртуальных функций. Случаи, когда вызов виртуальной функции не будет виртуальным. Виртуальные деструкторы. Чисто виртуальные функции и абстрактные базовые классы.

Наследование - использование уже описанных объектов для построения иерархии объектов, порождаемых от них. При этом для порождаемых объектов имеется возможность доступа к коду и данным породивших их объектов.

Не для всех объектов можно создавать экземпляры (нельзя создать просто "предмет" или "мебель"). Такие объекты называются абстрактными, для них характерно использование абстрактных методов (не имеющих тела).

Абстрактные методы в обычном описываются так:

virtual Func(parametrs) = 0;

Они применяются для описания методов, которые будут реализованы в потомках данного объекта.

Размещение ссылок на вызываемые методы происходит на этапе компиляции (раннее связывание). Это работает так:

  1. При вызове метода компилятор устанавливает тип объекта, вызывающего метод.

  2. После установления проверяется, есть ли в его описании данный метод. Если есть, то назначается вызов данного метода - сразу и навсегда.

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

При этом если методы предка вызывают другие статические методы, то они тоже будут методами предка (даже если они и описаны в потомках).

Для борьбы с этим используются виртуальные методы. При использовании виртуальных методов для объектного типа выделяется дополнительно специальная область памяти VMT (vitrual methods table), и каждый экземпляр типа имеет невидимое поле-указатель на VMT.

Структура VMT(по байтам):

  • размер экземпляра объекта

  • служебная информация

  • указатели на начала всех виртуальных методов класса.

При этом для всей линии наследования смещение такого указателя на определенный вирт. метод остается постоянным.

Компилятор при вызове такого метода выполняет следующее: назначается вызов метода, адрес которого находится по соответствующему смещению в VMT типа, к которому относится вызвавший его (метод) экземпляр объекта.

Адрес VMT объекта берется из поля VMT экземпляра, т.е. подставляется не адрес метода а схема его нахождения ("позднее связывание").

Случаи, когда вызов виртуальной функции не будет виртуальным. Есть 3 случая, когда вызов виртуальной функции не является виртуальным, т.е. происходит раннее связывание:

  • Виртуальная функция вызывается не через указатель или ссылку, а через объект ( d.method(); )

  • Виртуальная функция вызывается через указатель или ссылку, но уточняется именем класса ( p->Derived::method(); )

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

Виртуальные деструкторы. Если мы по указателю на базовый класс вызовем операцию delete для порожденного класса, то будет вызван деструктор базового класса. Из-за этого память выделяемая в конструкторе порожденного класса не будет освобождена. Поэтому можно объявить деструктор виртуальным:

virtual ~Base();

Конструкторы виртуальными быть не могут!

Чисто виртуальные функции и абстрактные базовые классы. Чисто виртуальные функции – это виртуальные функции, тело которых не определено:

virtual method() = 0;

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

Билет 25

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]