Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Без имени 2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
139.26 Кб
Скачать
  1. Полиморфизм. Три механизма реализации полиморфизма.

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

  • одностороннее присваивание объектов внутри семейства классов; сущность, базовым классом которой является класс предка, можно связать с объектом любого из потомков. Другими словами, для введенной нами последовательности объектов xk присваивание xi = xj допустимо для всех j >=i;

  • переопределение потомком метода, наследованного от родителя. Благодаря переопределению, в семействе классов существует совокупность полиморфных методов с одним именем и сигнатурой;

  • динамическое связывание, позволяющее в момент выполнения вызывать метод, который принадлежит целевому объекту.

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

16. Абстрактные классы. Абстрактные классы

С наследованием тесно связан еще один важный механизм проектирования семейства классов - механизм абстрактных классов.

Класс называется абстрактным, если он имеет хотя бы один абстрактный метод.

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

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

Абстрактные классы являются одним из важнейших инструментов объектно-ориентированного проектирования классов. К сожалению, я не могу входить в детали рассмотрения этой важной темы и ограничусь лишь рассмотрением самой идеи применения абстрактного класса. В основе любого класса лежит абстракция данных. Абстрактный класс описывает эту абстракцию, не входя в детали реализации, ограничиваясь описанием тех операций, которые можно выполнять над данными класса. Так, проектирование абстрактного класса Stack, описывающего стек, может состоять из рассмотрения основных операций над стеком и не определять, как будет реализован стек - списком или массивом. Два потомка абстрактного класса - ArrayStack и ListStack могут быть уже конкретными классами, основанными на различных представлениях стека.

17. Интерфейсы, объявления интерфейсов.

объектно-ориентированном программировании очень часто требуется определить, что класс должен делать, а не как он будет это делать

Т акой подход используется в абстрактных классах, содержащих один или более абстрактных методов

А бстрактный метод определяет название и сигнатуру метода, но не обеспечивает его реализации, предоставляя это классам- наследникам

В каждом производном классе каждый абстрактные методы, определенные базовым классом, реализуются по-своему

Э та идея получила свое дальнейшее развитие в концепции интерфейса

И нтерфейс (interface ) — это набор объявлений открытых (public ) методов, свойств и событий, которые в совокупности определяют некоторую функциональность

И нтерфейсы объявляются подобно классам, но с использованием ключевого слова interface :

[<модификатор_доступа >] interface <имя_интерфейса >

{

< члены_ интерфейса >

}

И мена интерфейсов принято начинать с символа I, чтобы отличать их от имен классов, например IMyInterface или I С omparable

членами интерфейса, кроме объявлений методов, свойств и событий могут быть также объявления индексаторов

И нтерфейсы не могут иметь конструкторов и деструкторов, поскольку создавать экземпляры интерфейса (как и экземпляры абстрактного класса) нельзя

И нтерфейсы не могут содержать полей и констант, а также объявлений операций

К роме того, ни один член интерфейса не может быть объявлен статическим (static )

П о умолчанию интерфейс имеет модификатор доступа private

О бъявления, являющиеся членами интерфейса, не должны содержать модификаторов доступа и неявно являются общедоступными