Опубликован: 19.08.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 8:

Концепция наследования и ее реализация в языке C#

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

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

Интерфейсом называется чисто абстрактный класс (с поддержкой полиморфизма ), содержащий только описания без реализации.

Концепция множественного наследования предполагает возможность наследования одним концептом языка свойств сразу нескольких языковых концептов. При этом в языке программирования C# принципиально допустимо множественное наследование, но область действия его ограничена интерфейсами. Множественное наследование классов в языке программирования C# недопустимо, однако неявно реализуемо посредством интерфейсов. Так, классы и структуры языка программирования C# могут реализовывать множественные интерфейсы.

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

Элементы интерфейса неявно являются виртуальными (т.е. общедоступными и абстрактными) объектами и описываются в языке C# как public abstract (или virtual ).

Интерфейсы, будучи принципиально полиморфными (т.е. динамически означиваемыми) объектами, не могут содержать статических элементов.

Наконец, свойства одного интерфейса могут быть расширены посредством другого интерфейса.

Рассмотрим более подробно важнейшие свойства интерфейсов как механизма реализации концепции множественного наследования в языке программирования C#.

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

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

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

Кроме того, заметим, что реализованные в языке программирования C# методы интерфейса могут быть описаны либо как виртуальные ( virtual ), либо как абстрактные ( abstract ). Таким образом, интерфейс может быть реализован посредством абстрактного класса. В то же время не допускается реализация замещенных интерфейсов по аналогии с замещенными в производных классах методами, которые описываются посредством ключевого слова override языка программирования C#.

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

В этой связи не является исключением и среда интегрированной разработки приложений Microsoft .NET, классы которой не имеют существенных различий с классами языка программирования C#.

Как видно из схемы, описывающей основные пространства имен Microsoft .NET Framework, организация их является вполне иерархической и реализует классическую схему единичного наследования (см. рис. 19.3).

Наиболее общим концептом иерархии является пространство имен System, характеризующее конфигурацию среды Microsoft .NET Framework и содержащее, в частности, параметры среды выполнения приложений, удаленной обработки данных, процессов, безопасности, ввода-вывода, системной конфигурации и др.

Среди подпространств пространства имен System можно выделить такие пространства имен, как System.Web, System.Windows.Forms, System.Data, System.Drawing и System.Xml, которые описывают такие характеристики среды Microsoft .NET Framework, как конфигурации веб-сервисов, формы ввода-вывода данных, форматы представления данных, графических подсистем и т.д.

Данная схема иллюстрирует перечень классов Common Type System среды проектирования и реализации программного обеспечения Microsoft .NET применительно к языку программирования C#.

Иерархия классов .NET Framework.

Рис. 19.3. Иерархия классов .NET Framework.

В частности, все многообразие типов можно разделить на предопределенные (заранее заданные системой программирования) и определенные пользователем (user defined) типы.

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

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

Напомним, что все без исключения типы языков программирования SML и C# однозначно отображаются в систему типизации Microsoft .NET, верхним иерархическим элементом которой является пространство имен System.

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

Прежде всего, концепция наследования устраняет необходимость многократного явного указания свойств и методов для производных объектов. Одного взгляда на схему пространств имен Microsoft .NET Framework достаточно, чтобы понять значимость этого свойства. Заметим, что на схеме показана лишь часть верхних "этажей" многоуровневой иерархии (см. рис. 19.3).

Кроме того, следует отметить, что наследование открывает возможности для гибкого определения уровня абстракции предметной области. Можно оперировать единственным, достаточно абстрактным, концептом System (или THING на рис.19.1), и, спускаясь по ISA-иерархии, обращаться к терминам все более конкретных концептов и сущностей (или, в терминологии языка программирования C#, классов и объектов).

Таким образом, концепция наследования предоставляет возможность моделирования сколь угодно сложной предметной области посредством ISA-иерархии концептов (или классов языка программирования C#), моделирующих объекты реального мира.

Итак, наследование прозрачный и унифицированный подход к построению классов (которые в терминологии языка программирования C# принято называть производными) по заданной совокупности свойств и методов так называемых базовых классов.

Заметим, что в языке программирования C# допустимо наследование свойств и методов как от единственного класса ( единичное ), так и от нескольких классов ( множественное ). Последний вид наследования реализуется посредством механизма интерфейсов.

Для моделирования наследования можно воспользоваться фреймами Н. Руссопулоса и диаграммами Х. Хассе.

Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [ 27, 29, 30, 37, 65, 68, 69].

< Лекция 7 || Лекция 8: 123 || Лекция 9 >