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

22. Недостатки наследования?

Недостатки наследования:

1) Скорость выполнения

Программные инструменты общего назначения редко являются такими же быстрыми, как и аккуратно, "вручную" разработанные специальные системы. То есть, унаследованные методы, имеющие дело с подклассами, часто медленнее специального кода.

Но заботы об эффективности часто бывают не к месту. Билл Вульф считает, что "Во имя эффективности (как правило, эфемерной) совершается больше программных ошибок, чем по какой-либо другой причине, включая полную тупость".

Во-первых, разница не слишком велика.

Во-вторых, снижение скорости выполнения может компенсироваться повышением скорости разработки программного обеспечения.

Наконец, большинство программистов на самом деле мало знают о том, как распределены временные затраты в программах.

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

2) Размер программ

Использование любой программной библиотеки часто приводит к увеличению размера программ. Этого не происходит в специально разработанных системах. Хотя такие затраты могут быть существенными, по мере уменьшения стоимости памяти размер программы перестает быть критичным. Снизить затраты на разработку и быстро выдать качественный и свободный от ошибок программный код иногда значит гораздо больше, чем малый размер приложения.

3) Сложность программ

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

23. Общая форма наследования классов? Спецификаторы доступа при наследовании?

В С++ члены класса классифицируются в соответствии с правами доступа на три категории:

– public(публичные) – любая функция программы имеет к ним доступ;

– private(частные) – доступ к ним имеют только функции-члены класса или дружественные функции;

– protected(защищенные) – доступ к ним имеют функции-члены класса или дружественные функции, а также производные классы.

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

Общая форма наследования классов:

classимя_класса:спецификатор_доступаимя_базового_класса

{

. . . тело класса

};

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

Если спецификатор доступа опущен, по умолчанию подразумевается спецификатор public. В таком случае все публичные (public) и защищенные (protected) члены базового класса становятся соответственно публичными (public) и защищенными (protected) членами производного класса.

Если спецификатор доступа имеет значение private, то публичные (public) и защищенные (protected) члены базового класса становятся частными (private) членами производного класса.

Если спецификатор доступа принимает значение protected, то все публичные (public) и защищенные (protected) члены базового класса становятся защищенными (protected) членами производного класса.

Это можно изобразить в виде таблицы.

Таблица 1 – Спецификаторы доступа при наследовании

Спецификатор доступа производного класса

Спецификатор

базового класса

Доступ

в производном классе

Комментарий

public

public

public

Не изменяется

private

private

protected

protected

private

public

private

Все становятся

private

private

private

protected

private

protected

public

protected

Все становятся protected,

private

private

кромеprivate

protected

protected