Программирование >>  Структурное программирование 

1 ... 196 197 198 [ 199 ] 200 201 202 ... 342


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

Хороший стиль программирования

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

9.2. Множественное наследование - мощное свойство, но оно может внести в систему сложности. Требуется большая осторожность при проектировании систем для извлечения выгоды из использования множественного наследования; использовать его не следует, если можно ограничиться простым наследованием.

Советы по повышению эффективности

9.1. Если классы, полученные путем наследования, более широкие, чем необходимо, это ведет к потере ресурсов памяти и производительности. Наследуйте из класса только самое необходимое.

Замечания по технике программирования

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

9.2. При переопределении в производном классе функции-элемента базового класса нет необходимости получать такую же сигнатуру, как у функции-элемента базового класса.

9.3. При создании объекта производного класса первым выполняется конструктор базового класса, затем конструкторы объектов-элементов производных классов, затем конструктор производного класса. Деструкторы вызываются в последовательности, обратной той, в которой вызывались соответствующие конструкторы.

9.4. Последовательность, в которой конструируются объекты-элементы, - это последовательность, в которой эти объекты объявлены в определении класса. На это не влияет последовательность, в которой перечислены инициализаторы элементов.

9.5. При наследовании конструкторы базовых классов вызываются в той последовательности, в которой указано наследование в определении производного класса. На это не влияет последовательность, в которой указаны конструкторы базовых классов в описании конструктора производного класса.

9.6. Создание производного класса не влияет на исходный или объектный код базового класса; сохранность базового класса оберегается наследованием.



9.7. В объектно-ориентированных системах классы часто тесно связаны. Факторизуйте общие атрибуты и функции и помещайте их в базовом классе. Затем используйте наследование для формирования производных классов.

9.8. Производный класс содержит атрибуты и функции своего базового класса. Производный класс может также содержать дополнительные атрибуты и функции. При наследовании базовый класс может быть скомпилирован независимо от производного класса. При формировании производного класса нужно компилировать только дополнительные атрибуты и функции; их объединение с базовым классом сформирует производный класс.

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

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

Упражнения для самопроверки

9.1. Заполнить пробелы в следующих утверждениях:

a) Если класс Alpha наследует классу Beta, класс Alpha называется классом, а класс Beta - классом.

b) С-Н- обеспечивает , которое позволяет производному классу

наследовать нескольким базовым классам, даже если эти базовые классы не родственные.

c) Наследование предоставляет возможность , что экономит

время разработки и способствует использованию проверенного и высококачественного программного обеспечения.

d) Объект класса можно рассматривать как объект соответствующего ему класса.

e) Для преобразования типа указателя базового класса в тип производного класса, должно быть использовано , потому что

компилятор считает такую операцию опасной.

f) Существуют три спецификатора доступа к элементу: ,

и .

g) При порождении класса от базового класса открытым наследованием открытые элементы базового класса становятся элементами производного класса, а защищенные элементы базового класса становятся элементами производного класса.

h) При порождении класса от базового класса защищенным наследованием открытые элементы базового класса становятся элементами производного класса, а защищенные элементы базового класса становятся элементами производного класса.



i) Отношение между классами содержит представляет , а

отношение является представляет .

Ответы на упражнения для самопроверки

9.1. а) производным, базовым. Ь) множественное наследование, с) повторного использования программного обеспечения, d) производного, базового, е) приведение типа, f) public, protected, private, g) открытыми, защищенными, h) защищенными, защищенными, i) композицию, наследование.

Упражнения

9.2. Рассмотрите класс bycicle (велосипед). Демонстрируя ваши знания о некоторых типичных компонентах велосипеда, покажите иерархию классов, в которой класс bycicle наследует другим классам, которые, в свою очередь, наследуют еще каким-то другим классам. Обсудите возникновение различных объектов класса bycicle. Обсудите наследование классу bycicle других тесно связанных производных классов.

9.3. Кратко определите каждый из следующих терминов: наследование, множественное наследование, базовый класс и производный класс.

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

9.5. Укажите различия простого и множественного наследования.

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

9.7. (Верно, или неверно) Объект производного класса является также объектом своего базового класса.

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

9.9. Многие программы, написанные с применением наследования, могли бы быть реализованы с применением композиции и наоборот. Обсудите относительные достоинства этих двух походов в контексте иерархии классов Point, Circle, Cylinder, рассмотренных в этой главе. Перепишите программу на рис. 9.10 (и поддерживающие класса) с использованием композиции вместо наследования. После этого оцените заново относительные достоинства обоих подходов для проблемы Point, Circle, Cylinder, а также для объектно-ориентированных программ вообще.

9.10. Перепишите программу Point, Circle, Cylinder на рис. 9.10 как программу Point, Square (квадрат), Cube (куб). Сделайте это двумя способами: один раз с наследованием и один раз с композицией.



1 ... 196 197 198 [ 199 ] 200 201 202 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика