» Главная
eXcode.ru » Статьи » Другие » Введение в теорию программирования. Объектно-ориентированный подход
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 13





Туроператор тез тур

Система подбора и бронирования туров. Поиск и продажа туров.

tezsale.ru




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




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

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

Таким образом, применительно к языку программирования концепция наследования означает, что свойства и методы базового класса равно применимы к производным от него классам. Заметим, что дочерний объект не обязательно наследует все без исключения атрибуты и операции родительского, а лишь некоторые из них. Такой подход характерен как для классов объектов в целом, так и для отдельных их конкретизаций, или, иначе, экземпляров.

Теоретическая концепция наследования удовлетворительно моделируется посредством отношения (или, точнее, иерархии) частичного порядка. Существует целый ряд формализаций наследования, но наиболее адекватными и концептуально ясными являются графические модели. Среди них следует выделить уже упомянутые ранее подходы: фреймовую нотацию Руссопулоса и диаграммы Хассе.

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

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

 a: a ISA a.

Другой важной особенностью отношения частичного порядка является транзитивность. Суть транзитивности состоит в том, что если существует цепочка из (трех) объектов, связанных отношением частичного порядка, то первый и последний элементы этой цепочки можно связать тем же отношением. Это свойство гарантирует построение на множестве графа отношения частичного порядка в виде «решетки». Формальная запись свойства транзитивности для отношения частичного порядка выглядит следующим образом:

 a,b,c: a ISA b, b ISA c  a ISA c.

Наконец, еще одним фундаментальным свойством отношения частичного порядка как модели наследования является антисимметричность. Это свойство разрешает наследование только в одном направлении (и запрещает его в противоположном). Формальная запись свойства антисимметричности для отношения частичного порядка выглядит следующим образом:

 a,b : a ISA b  NOT (b ISA a).

По завершении исследования свойств отношения частичного порядка, перейдем к рассмотрению формализаций, моделирующих наследование. Проиллюстрируем графическую интерпретацию отношения частичного порядка на примере фреймовой нотации Руссопулоса. Рассмотрим следующий фрейм (рис. 19.1), который связывает отношением частичного порядка понятия «сущность» (THING), «юридическое лицо» (LEGAL.PERSON), «учреждение» (INSTITUTION), «работодатель» (EMPLOYER), «кадровое агентство» (RECRUITER), «физический объект» (PHYSICAL.OBJECT), «одушевленный объект» (ANIMATE.OBJECT), «человек» (PERSON), «мужчина» (MALE.PERSON) и «женщина» (FEMALE.PERSON).

Пример фрейма.
Рис. 19.1. Пример фрейма.

Как видно из структуры фрейма, понятия (или, точнее, концепты) изображены в овалах. Направленные ISA-дуги соединяют понятия, образуя иерархию с направлением в сторону увеличения уровня общности (абстракции), например, от понятия «мужчина» к понятию «сущность». Рефлексивные и транзитивные дуги опущены для удобства восприятия; их без труда можно восстановить. Ориентированность дуг характеризует антисимметричность отношения частичного порядка: любая из дуг может иметь только одну стрелку со стороны увеличения уровня абстракции.

Другой продуктивной формализацией, моделирующей, в частности, наследование, является диаграмма Хассе. Проиллюстрируем использование диаграмм Хассе для графической интерпретации отношения между элементами класса или домена (см. рис. 19.2).

Пример диаграммы Хассе.
Рис. 19.2. Пример диаграммы Хассе.

Диаграмма Хассе состоит из точек, которые представляют элементы множества (точнее, домена или класса), а также из соединяющих их линий, которые представляют собой отношения между элементами класса или домена (в данном случае интерпретируется отношение частичного порядка).

Данный пример иллюстрирует отношение IS IN («является подмножеством») между множествами {}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3} и {1,2,3}.

Заметим, что в случае графической интерпретации отношения частичного порядка с помощью диаграммы Хассе свойство антисимметричности рассматриваемого отношения было бы отображено в явном виде.

Исследовав основные свойства отношения наследования и способы его наглядной формализации, рассмотрим, каким образом эта теоретическая концепция реализуется в языках объектно-ориентированного программирования, и, в частности, в языке C#.

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

class A {
// базовый класс
   int a;
   public A() {...}
   public void F() {...}
}

class B : A {	
// подкласс (наследует свойства класса A, 
// расширяет класс A)
   int b;
   public B() {...}
   public void G() {...}
}

Применительно к языку программирования C# наследование есть отношение между классами. Данный пример содержит описание более общего (находящегося выше по ISA-иерархии) класса A и его подкласса – класса B. Заметим, что находящийся выше по ISA-иерархии класс принято называть базовым, а находящийся ниже – производным (или подклассом).

Подкласс B наследует свойства класса A, и, кроме того, возможно, расширяет его новыми (по сравнению с классом A) свойствами.

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

Рассмотрим подробнее, каким образом производится реализация механизма наследования.

Производный класс B наследует свойство a и метод F() базового класса A. Кроме того, к свойствам производного класса B добавляется новое по сравнению с базовым классом A свойство b, а к методам – новый по сравнению с базовым классом A метод G().

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

В случае неявного задания базового класса производный класс наследует свойства наиболее общего класса Microsoft .NET, известного как объект (object) и аналогичного концепту THING («сущность») в рассмотренном ранее примере фреймовой нотации.

Для иллюстрации множественного наследования приведем фрагмент программы на языке C#, содержащей описание интерфейса:

public interface IList : 
   ICollection, IEnumerable	
{
   int Add (object value);	
   // методы
   bool Contains (object value);
   bool IsReadOnly {
      get;
   }
   // свойство
   object this [int index]{
      get;
      set;
   }
   // индексатор
}

Из приведенного примера видно, что фрагмент программы на языке C# представляет собой описание общедоступного интерфейса IList, наследующего в иерархии элементы интерфейсов ICollection и IEnumerable, а также содержащего методы Add и Contains, свойство IsReadOnly и объект-индексатор.

После визуального знакомства с кодом на языке программирования 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].

К началу статьи





Добавил: MadvEXДата публикации: 2006-02-28 01:04:04
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 6204

Комментарии читателей

Всего комментариев: 37

2011-04-22 13:48:46
Seanomakamerb
Брянский форум Bryanskinform.com был спроектирован специально для обсуждения событий произошедших в Брянской области и самом Брянске. Новостной форум <a href=http://bryanskinform.com/>Брянские новости</a> позволяет населению Брянщины быстрее узнать о проишествиях проходящих в Брянске и соседних районах. Вы без трудаскачаете всю нужную вам информацию, а очень большой выбор тематик и разделов поможет вам в этом, например раздел - <a href=http://bryanskinform.com/>Брянск Информ</a>. Добро пожаловать!

2011-04-17 01:52:55
Emaisesletips
22.04 :: DJ SMASH LIVE @ ARENA MOSCOW

<img>http://arenamoscow.ru/data/images/4d265f99c06c0/4d7dfd65b07d6.jpg</img>

DJ Smash, один из самых востребованных и знаковых музыкантов в отечественной dance-культуре, ставший, по мнению журнала Billboard, реформатором клубной жизни, недавно завершил работу над своим вторым альбомом «23». Релиз звездного диджея, сделавшего электронную музыку мейнстримом, состоится 23 марта этого года. Бюджет диска составил четверть миллиона долларов. Пластинка спродюсирована Ником Ингманом, сотрудничавшим с Мадонной, Бьорк и Massive Attack, весь продакшн проходил в Лондоне. В трек-лист вошли работы, записанные с Лондонским симфоническим оркестром, Terry B, Timati, Ларисой Долиной и группой «Любэ» (ремикс на песню «Атас»).

22 апреля в клубе Arena Moscow состоится первый открытый московский концерт DJ Smash, в рамках которого пройдет презентация альбома «23». Ранее диджей-реформатор выступал только на закрытых вечеринках, на которые зачастую было сложно попасть, теперь же создаются все условия для того, чтобы все желающие смогли посетить этот концерт. DJ Smash планирует собрать на одной сцене всех, кто принимал участие в создании его новой пластинки, а режиссером этого грандиозного шоу выступит он сам.

«Как говорится, если хочешь, чтобы что-то было сделано хорошо – сделай это сам, - говорит DJ Smash. – Поэтому я взял организацию мероприятия такого масштаба на себя. Там будет лучший свет и звук в Москве, много танцующих до потери сознания людей и море хорошей музыки. Это будет грандиозное шоу!»

Генеральный партнер релиза – сеть ресторанов быстрого питания Burger King.

ЗАКАЗАТЬ БИЛЕТ НА KONTRAMARKA.RU
( Тел. 9-333-200 )

http://www.kontramarka.ru/portal/ru/muzika/rock_pop/smash_live/264689/performance.html

Сайт DJ Smash : http://djsmash.ru/
Блог DJ Smash : http://blogs.mail.ru/mail/smashdj/
DJ Smash в Твиттере : http://twitter.com/djsmashforever
DJ Smash «Вконтакте» : http://vkontakte.ru/club2703292

Дополнительная информация : +7-(495)-980-8994

ОФИЦИАЛЬНЫЙ САЙТ : http://arenamoscow.ru/
ОФИЦИАЛЬНОЕ СОБЫТИЕ : http://arenamoscow.ru/events.php?id=29





б1 dj smash live Опера, арена smash Luxury music, а2 ширман minimal, москва андрей леонидович ширман Павел Воля, арена одноклассники глянец, клуб арена ширман Жени Mishell, arena group dj smash VJ Archi, arena ширман хит, арена москва ширман рэп, а2 ширман promodj, a2 смэш Dj Gold Sky, arena fast food тусовщик.

2011-04-10 14:08:26
Slotolophoafe
Горст СМ осуществляет поставку моторных масел, трансмиссионых масел, индустриальных масел (промышленные масла) - масла BP Visco, трансмиссионные Autran и Energear, масла BP Vanellus для дизельных двигателей, пластичные смазки BP, масла Castrol для легковых автомобилей Magnatec, EDGE , SLX Professional, GTX, Castrol для мото и водно-моторной техники, Castrol для сельскохозяйственной техники Agri, индустриальные масла, масла Sibi Motor Люкс, Экстра,Sibi Motor Супер, пластичные смазки Литол, гидравлические масла Газпромнефть Гидравлик, редукторные масла Газпромнефть Редуктор, компрессорные и турбинные масла. Масла Sibi Motor для коммерческого транспорта Sibi Motor Дизель, судовые масла, для гидромеханических и гидрообъёмных передач, для тепловозных двигателей. G-Energy, G-Profi и G-Truck. <a href=http://bp-castrol.ru/castrol/>В продаже масло для ГУР Esso в Уфе и Стерлитамаке, Челябинске и Магнитогорске, Оренбурге</a>

2011-03-26 13:52:51
Fruireodott
Вечер на горных лыжах или вечер на сноуборде – экиперуйтесь стильно и тепло, а SnowCheap.ru подскажет, как быть самым укомплектованным и не замерзнуть. Теперь вы знаете где можно <a href=http://www.snowcheap.ru>заказать сноуборды Rossignol в Ленинградской области</a>. Зима в самом разгаре, значит, нужно успеть перепробовать все зимние виды спортивных развлечений – от экстремальных горных лыж до сноубордов.

2011-03-16 14:57:08
AbiseryBizBer
Пиво - это полезный напиток. Его свойства получили подтверждение. <a href=http://pivo.im/pivo/>Пиво</a> приготавливают на пивных заводах. Главное в пиве вода, от этого зависит запах этого весёлого напитка.

2011-03-06 09:58:35
CardHolding
Кампания CardHolding занимается продажей копий кредитных карт с пин-кодами, дампы, CC, CVV2 (Visa, MasterCard). Примерный баланс карт от 1000 EUR и предназначены только для снятия наличных через банкомат. Стоимость 10% от баланса карты. Продаем по предоплате.
По всем вопросам пишите на E-mail: cardmoney@hu2.ru








кардинг, carding, дампы кредитных карт, продам картон, номера кредитных карт, хакерство, кредитные карты, как взломать банк, продам дампы кредитных карт, кардинг, как обмануть банкомат, дорожные чеки, кардеры, как ограбить банк, продам дампы кредитных карт, пластиковые карты, продам номера кредитных карт, основы кардинга, продам дампы кредитных карт, компьютерный взлом, хакеры, фальшивые кредитные карты, как стать хакером plastic cards

2011-03-04 21:04:39
Encubyincipsy
Представляем Вам интернет магазин арома смесей BLACK-PACK.RU !
В нашем интернет магазине BLACK-PACK.RU Вы всегда можете <a href=http://www.black-pack.ru/>купить курительные смеси</a>, не запрещённые в странах СНГ с доставкой по всей России наложенным платежём.
В нашем магазине исключительно легальная продукция, документы с экспертиз вы можете посмотреть на нашем сайте.
Цены и Качество Вас приятно удивят.
Добро пожаловать всем на наш интернет магазин курительных смесей и арома миксов BLACK-PACK.RU

2011-02-27 21:56:29
fliemsfuegush
World of warcraft Dead-zone.net - это <a href=http://www.dead-zone.net/>wow</a> и куча уникальных возможностей и ивентов, которые вы не встретите ни на каком другом сервере world of warcraft.

2011-02-23 17:29:01
Borpdiowanara
Всего в 15 минутах езды от нашей столицы - Москвы строится Коттеджный поселок "Черничные поля". <a href=http://www.bilberryfields.ru>коттеджный поселок Черничные поля</a> - инфраструктурный поселок уникален уникальным месторасположением и уникальной транспортной доступностью и находится около от р. Незнайка и Крекшинских прудов. В непосредственной близости от поселка находится церковь Спаса Нерукотворного. Природные особенности и развитая инфраструктура создают все условия для всесезонного комфортабельного проживания.

2011-02-22 16:21:03
Gyncnully
<a href=http://www.sporg.ru>форум совместных закупок Черняховск</a>
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой поисковик лучше?
Yandex
41% (63)
Rambler
10% (15)
Google
42% (65)
Yahoo!
1% (1)
MSN
0% (0)
Mail.ru
2% (3)
Aport
1% (1)
AltaVista
1% (2)
Другой
2% (3)

Проголосовало: 153
Как-то летели Холмс с Ватсоном на воздушном шаре. И заснули. Просыпаются над какой-то незнакомой местностью, видят - внизу какой-то мужик коров пасет. Снизились они и спрашивают мужика:
- Скажите, сэр, где мы находимся?
(долго думал)- На воздушном шаре.
- Спасибо, сэр! - и поднялись вверх. Холмс задумчиво говорит:
- Интересная местность, Ватсон! Программист пасет коров!
- Но, Холмс, с чего вы взяли, что он программист?
- Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его ответ был абсолютно точен. И самое главное - абсолютно бесполезен!
Рейтинг: 7.5/10 (2)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » Другие » Введение в теорию программирования. Объектно-ориентированный подход