Билет 17 (Ответы на билеты)
Описание файла
Файл "Билет 17" внутри архива находится в папке "Bilety_s_otvetami-progr". Документ из архива "Ответы на билеты", который расположен в категории "". Всё это находится в предмете "программирование" из 3 семестр, которые можно найти в файловом архиве МПУ. Не смотря на прямую связь этого архива с МПУ, его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "программирование" в общих файлах.
Онлайн просмотр документа "Билет 17"
Текст из документа "Билет 17"
Билет №17
-
Стандартизация информационных технологий. Классификация стандартов. Понятия и определения.
-
Деструкторы. Назначение, синтаксис, понятия и определения.
-
Интерфейсы. Свойства, применение. Производные интерфейсы.
1.
Стандартизация в области информационных технологий. |
|
2. Деструкторы. Назначение, синтаксис, понятия и определения.
При написании длинных программ в некоторых частях программы обычно требуется инициализация. Необходимость в инициализации еще более часто проявляется при работе с объектами.
Действительно, если обратиться к реальным проблемам, то, фактически, для каждого создаваемого вами объекта требуется какого-то вида инициализация. Для разрешения этой проблемы в C++ имеется функция-конструктор(constructor function), включаемая в описание класса. Конструктор класса вызывается всякий раз при создании объекта этого класса. Таким образом, любая необходимая объекту инициализация при наличии конструктора выполняется автоматически.
Конструктор имеет то же имя, что и класс, частью которого он является, и
не имеет возвращаемого значения. Например, ниже представлен небольшой класс с конструктором:
#include
using namespace std;
class myclass {
int a ;
public:
myclass (); // конструктор
void show() ;
myclass : :myclass ( )
{
cout << "В конструкторе\п";
a-10;
)
void myclass :: show ()
{
cout << a;
Глава 2. Введение в классы _ 45
int main ( )
{
myclass ob;
ob. show)) ;
return 0;
В этом простом примере значение а инициализируется конструктором
myclass(). Конструктор вызывается тогда, когда создается объект ob. Объект, в
свою очередь, создается при выполнении инструкции объявления объекта. Важ-
но понимать,что в C++ инструкция объявления переменной янляется
"инструкцией действия". При программировании на С инструкции объявления
переменных понимаются просто как создание переменных. Однако в C++, по-
скольку объект может иметь конструктор, инструкция объявления переменной
может вызывать выполнение записанных в конструкторе действий.
Обратите внимание, как определяется конструктор myclassQ. Как уже гово-
рилось, он не имеет возвращаемого значения. В соответствии с формальны-
ми правилами синтаксиса C++ конструктор не должен иметь возвращаемого
значения.
Для глобальных объектов конструктор объекта вызывается тогда, когда начи-
нается выполнение программы. Для локальных объектов конструктор вызыва-
ется всякий раз при выполнении инструкции объявления переменной.
Функцией, обратной конструктору, является деструктор (destructor). Эта
функция вызывается при удалении объекта. Обычно при работе с объектом
в момент его удаления должны выполняться некоторые действия. Напри-
мер, при создании объекта для него выделяется память, которую необходи-
мо освободить при его удалении. Имя деструктора совпадает с именем
класса, но с символом ~ (тильда)в начале. Пример класса с деструктором:
#include
using namespace std;
class myclass {
int a;
public:
myclass (); // конструктор
-myclass (); // деструктор
void show() ;
}
myclass : :myclass ( )
{
cout << "Содержимое конструктора\n";
a = 10;
myclass::~myclass ( )
{
cout << "Удаление... \n";
}
void myclass::show()
{
cout << a << "\n";
}
int main()
myclass ob;
ob.show ();
return 0;
}
Деструктор класса вызывается при удалении объекта. Локальные объекты
удаляются тогда, когда они выходят из области видимости. Глобальные объ-
екты удаляются при завершении программы.
Адреса конструктора и деструктора получить невозможно.
3) Интерфе́йс (от лат. inter — между и лат. face — поверхность) — это семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом.
Интерфейс определяет границу взаимодействия между классами или компонентами, специфицируя определенную абстракцию, которую осуществляет реализующая сторона. В отличие от большинства других видов интерфейсов, интерфейс в ООП является строго формализованным элементом объектно-ориентированного языка и, в качестве семантической конструкции, широко используется кодом программы. К примеру, интерфейс «Cloneable» может описать абстракцию клонирования (создания точных копий) объектов, специфицировав метод «Clone». Тогда любой класс, способный создать свою копию, может задекларировать себя как Cloneable и предоставить метод Clone. Причем вызывающей стороне достаточно знать только описание интерфейса. Таким образом, интерфейсы позволяют рассоединить части программной системы в модули без взаимной зависимости кода.
С одной стороны, интерфейс — это контракт, который обязуется выполнить класс, реализующий его. Один класс может реализовать несколько интерфейсов одновременно.
С другой стороны, интерфейс — это тип данных, потому что его описание достаточно четко определяет свойства объектов, чтобы наравне с классом типизировать переменные.
Роль интерфейсов в C++ выполняют абстрактные классы.
Виртуальные функции и абстрактные классы
Класс является абстрактным, если он содержит хотя бы одну чистую виртуальную функцию.
Абстрактный класс – это класс, который может использоваться лишь в качестве базового класса для некоторого другого класса. Класс является абстрактным, если он содержит хотя бы одну чистую виртуальную функцию.
Виртуальная функция называется чистой, если в объявлении функции внутри объявления класса задан чистый спецификатор = 0.
class Shape
{ public:
virtual void draw() = 0; // Чистая виртуальная функция
...
};
Абстрактный класс нельзя употреблять в качестве типа объектов, типа параметров функций, типа возвращаемого функцией значения или как тип при явном приведении типа. Можно, однако, объявлять указатели и ссылки на абстрактный класс.
Shape s; // Ошибка: объект абстрактного класса
Shape *s; // Всё правильно
Shape f(); // Ошибка
void f(Shape s); // Ошибка
Shape& f(Shape &s); // Всё правильно
Чистые виртуальные функции наследуются и остаются чистыми виртуальными функциями.
Интерфейсы.
Интерфейс трактуется как набор всех потенциально возможных операций, которые могут быть выполнены объектом по заявкам клиентов. Вводится отношение "объект удовлетворяет интерфейсу". Оно имеет место, если рассматриваемый объект может быть указан как целевой в любой возможной заявке, которая адекватна данному интерфейсу. Интерфейсы могут иметь атрибуты. Наличие атрибута логически эквивалентно объявлению пары функций доступа: для извлечения и для установки значения атрибута, соответственно.
Интерфейсы в модели типизируются. Под типом данного интерфейса понимается такой тип, которому удовлетворяет любой объект, удовлетворяющий рассматриваемому конкретному интерфейсу.
На интерфейсы распространяется действие механизмов наследования. Интерфейс, наследующий свойства другого интерфейса, называется производным от этого другого интерфейса, который, в свою очередь, называется базовым по отношению к нему. В производном интерфейсе могут объявляться новые элементы или переопределяться наследуемые. Интерфейс может быть производным от нескольких базовых интерфейсов. На множестве определенных интерфейсов могут, таким образом, поддерживаться иерархии отношений наследования. Наследование интерфейсов есть композиционный механизм, позволяющий объекту поддерживать множественные интерфейсы. Главный (principal) интерфейс является наиболее специализированным интерфейсом, поддерживаемым объектом. Этот интерфейс состоит из всех операций в транзитивном замыкании графа наследования интерфейсов.
Введено понятие реализации объекта, которое трактуется следующим образом. Метод представляет собой программу, исполняемую для реализации сервиса. С методом связаны формат метода, определяющий набор исполнительных механизмов для интерпретации метода, и исполнительный механизм - абстрактная машина, интерпретирующая методы определенных форматов. Реализация объекта представляет собой определение, содержащее информацию, необходимую для создания объекта и для участия объекта в обеспечении надлежащего набора сервисов. Реализация обычно включает определения методов, оперирующих состоянием объекта.
Понятие интерфейса
Из предыдущих глав вы уже знаете, что собой представляет объект. Представьте, что получится, если из объекта убрать поля и код всех методов. Останется лишь интерфейс — заголовки методов и описания свойств. Схематично понятие интерфейса можно представить в виде формулы:
Интерфейс = Объект - Реализация
В отличие от объекта интерфейс сам ничего "не помнит" и ничего "не умеет делать"; он является всего лишь "разъемом" для работы с объектом. Объект может поддерживать много интерфейсов и выступать в разных ролях в зависимости от того, через какой интерфейс вы его используете. Совершенно различные по структуре объекты, поддерживающие один и тот же интерфейс, являются взаимозаменяемыми. Не важно, есть у объектов общий предок или нет. В данном случае интерфейс служит их дополнительным общим предком.