- •Конспект по "Объектно-ориентированному программированию".
- •1. Что такое объект? Понятия "состояние" и "поведение"?
- •2. Понятия "интерфейс" и "реализация"?
- •3. Понятия "класс" и "абстрактный тип данных"?
- •4. Основные категории классов?
- •5. Объявление класса? Общий вид объявления класса? Включение кода метода внутри объявления класса?
- •6. Особенности локальных классов?
- •7. Понятие inline-метода. Способы создания?
- •9. Константный объект? Константный метод?
- •10. Конструктор. Его назначение и синтаксические конструкции вызова конструктора?
- •11. Конструктор копирования. Общий вид и случаи вызова?
- •12. Что называется конструктором по умолчанию? Конструктором преобразования?
- •13. Основные свойства и правила использования конструкторов.
- •14. Деструктор. Вызов деструкторов (автоматический и явный).
- •15. Основные свойства и правила использования деструкторов.
- •16. Создание и уничтожение объектов.
- •17. Что такое наследование?
- •18. Понятия "базовый класс" и "производный класс"?
- •19. Принцип подстановки. Различие между понятиями "подкласс" и "подтип"?
- •20. Основные формы наследования?
- •21. Преимущества наследования?
- •22. Недостатки наследования?
- •23. Общая форма наследования классов? Спецификаторы доступа при наследовании?
- •24. Конструкторы и деструкторы производных классов? Порядок вызова конструкторов и деструкторов при множественном наследовании?
- •25. Множественное наследование. Общая форма?
- •26. Передача параметров в базовый класс. Назначение. Общая форма?
- •27. Указатели и ссылки на производные классы?
- •28. Виртуальная функция. Объявление виртуальной функции?
- •29. Чисто виртуальная функция. Общая форма чисто виртуальной функции?
- •30. Понятие "абстрактный класс".
- •31. Что такое полиморфизм? в каких формах он может существовать?
- •32. Понятие "перегрузка"?
- •33. Приведение типа. Неопределенность. Причины возникновения неопределенности и способы ее устранения?
- •34. Понятие "параметрическая перегрузка"?
- •35. Понятие "переопределение"? в чем заключается различие между перегрузкой и переопределением?
- •36. В чем заключается процесс уточнения?
- •37. Что такое шаблоны (или обобщенные функции)? Их назначение?
- •38. Функция-шаблон. Назначение функции-шаблона? Общий вид функции-шаблона?
- •39. Класс-шаблон. Общая форма класса-шаблона и экземпляра такого класса?
21. Преимущества наследования?
Преимущества наследования:
1) Повторное использование программ
При наследовании поведения от другого класса программный код не переписывается. Это имеет важное значение. Многие программисты тратят много времени на переработку уже написанного кода. При использовании ООТ, написанный ранее код может повторно использоваться.
Другое преимущество повторно используемого кода – в его надежности (чем в большем числе ситуаций используется код, тем больше возможностей обнаружения ошибок) и низкой стоимости, так как она делится на всех пользователей кода.
2) Использование общего кода
При применении ООТ использование общего кода происходит на нескольких уровнях. Во-первых, клиенты могут пользоваться одними и теми же классами. Другая форма использования общего кода возникает, когда два или более класса, разработанные одним программистом для некоторого проекта, наследуют от единого родительского класса. Например, классы "Множество" и "Массив" могут рассматриваться как разновидности совокупности данных "Коллекция". В этом случае два или более типов объектов совместно используют наследуемый код. Он пишется единожды и входит в программу только в одном месте.
3) Согласование интерфейса
Если два класса наследуют одному и тому же предку, наследуемое поведение будет одинаковым во всех случаях. То есть объекты, схожие по интерфейсу, должны быть фактически сходными. Иначе пользователь получит почти одинаковые объекты с совершенно разным поведением.
4) Программные компоненты
Наследование предоставляет программистам возможность создавать повторно (многократно) используемые программные компоненты. Цель: обеспечить развитие новых приложений с минимальным написанием нового кода. Например, библиотеки.
5) Быстрое макетирование
Когда программное обеспечение конструируется в основном из повторно используемых компонент, большая часть времени, требуемого на разработку, может быть посвящена пониманию новых необычных частей системы. Таким образом, программные комплексы могут создаваться быстрее и проще, приводя к стилю программирования, известному как быстрое макетированиеилиисследовательское программирование. Создается система-прототип (макет), пользователи экспериментируют с ней, потом на основе этих опытов создается вторая система, с ней проводятся эксперименты и т.д.
Такое программирование особенно выгодно, когда цели и требования к системе в начале разработки представлены весьма расплывчато.
6) Маскировка информации
Программист, использующий программную компоненту, должен понимать только ее назначение и интерфейс. Совсем не обязательны сведения о технических средствах, использованных при реализации компоненты. Например, работая в оболочке NC, мало кто интересуется, на чем она реализована. Таким образом, уменьшается необходимость внутренних связей между программными системами.
7) Полиморфизм и структура
Программное обеспечение традиционно создавалось снизу вверх. То есть сначала писались программы нижнего уровня, на их основе строились более абстрактные элементы, затем– еще более абстрактные. Такой процесс похож на строительство дома.
Обычно мобильность кода уменьшается с увеличением абстракции, то есть программы нижнего уровня могут быть использованы в нескольких различных проектах, и даже, возможно, абстракции следующего уровня могут повторно использоваться, но программы верхнего уровня тесно связаны с определенным приложением.
Компоненты нижнего уровня могут быть перенесены в новую систему, и часто есть смысл в их самостоятельном существовании.
Компоненты верхнего уровня обычно имеют смысл (из-за их функциональности или зависимости от данных), только когда они построены на определенных элементах нижнего уровня.
Полиморфизм позволяет программисту создавать многократно используемые компоненты высокого уровня, которые можно перекраивать под различные приложения за счет изменения нижнего уровня.