Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ООАП.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
735.74 Кб
Скачать
  1. Абстрактные классы: определение, назначение, примеры использования.

Чистая виртуальная функция не имеет реализации, ее нельзя вызвать в программе, она служит лишь как основа для дальнейшего полиморфного переопределения в производном классе. Если в классе определена хотя бы одна чистая виртуальная функция, он становится абстрактным. Главное отличие абстрактных классов – на их основе невозможность создавать объекты, они могут служить только основой для наследования. Класс Shape по замыслу является абстрактным, поэтому его можно переопределить следующим образом:

class Shape

{ protected:

Point base;

int color;

public:

virtual void show()=0;

virtual void hide()=0;

void move(int xn,int yn)

{ hide()

base.x+=xn; base.y+=yn;

show();

} };

  1. Интерфейс: назначение, синтаксис определения, примеры использования.

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

interface имя{

тип имя_метода1 (список_параметров);

тип имя_свойства{set; get;}

}

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

В теле интерфейса не указываются модификаторы доступа к членам, нельзя использовать для методов интерфейса ключевые слова virtual и static.

Например, определим интерфейс, отвечающий за проверку корректности заполнения данных различного типа – телефонных номеров, адресов e-mail, дат и других типов данных, поступающих от при регистрации пользователей, заполнении анкет и т.п.

public interface ICheckExp

{

bool checkPhone(string phoneNumb);

bool checkEmail(string emailStr);

bool checkDate(string dateStr);

}

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

  1. Основные принципы обобщенного программирования, его достоинства и недостатки.

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

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

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

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