Добавил:
выбрасываю тут свой мусор, надеюсь, что он кому-то может пригодится... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP-KONEChNYJ.docx
Скачиваний:
20
Добавлен:
03.12.2023
Размер:
7.72 Mб
Скачать

34. Понятие полиморфизма и его основные виды (классический полиморфизм, перегрузка, параметрический полиморфизм).

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

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

Классический полиморфизм – возможность определить в базовом классе набор членов, которые могут быть замещены в производном классе. При замещении в производных классах членов базового класса эти производные классы будут по-разному реагировать на одни и те же обращения. Члены базового класса могут описываться также как virtual (виртуальный), что означает, что такой член может быть переопределен классом, который его наследует. Другими словами, производный класс может использовать альтернативную реализацию данного члена. Это и есть одно из определений полиморфизма.

35. Классический полиморфизм на основе наследования и его применение в базовых принципах проектирования.

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

При определении класса-наследника и наследовании методов базового класса мы можем выбрать одну из следующих стратегий:

  • Обычное наследование всех членов базового класса в классе-наследнике

  • Переопределение членов базового класса в классе-наследнике

  • Скрытие членов базового класса в классе-наследнике

36. Обоснованность применения наследования или композиции классов. Отрицательное правило наследования.

Более точным типом отношений является отношение открытого наследования (отношение «является»), которое говорит, что все, что справедливо для базового класса справедливо и для его наследника.

И хотя наследование является отличным инструментом в руках любого ОО-программиста, его явно недостаточно для решения всех типов задач. Во-первых, далеко не все отношения между классами определяются отношением «является», а во-вторых, наследование является самой сильной связью между двумя классами, которую невозможно разорвать во время исполнения (это отношение является статическим и, в строготипизированных языках определяется во время компиляции).

В этом случае нам на помощь приходит другая пара отношений: композиция и агрегация. Оба они моделируют отношение «является частью».

Совет Банды Четырех - что следует предпочесть агрегацию наследованию, поскольку первая дает большую гибкость и динамичность во время исполнения.

Отрицательное правило наследование: не делайте класс B наследником класса A, если нельзя привести аргументы в защиту того, что каждый экземпляр B является также экземпляром A.

Соседние файлы в предмете Объектно-ориентированное программирование