Виды взаимоотношений между классами — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Виды взаимоотношений между классами

2019-09-26 208
Виды взаимоотношений между классами 0.00 из 5.00 0 оценок
Заказать работу

Механизм наследования классов предоставляет программисту богатейшие возможности организации кода и его многократного использования. Выбор наиболее подходящих средств для целей конкретного проекта основывается на знании механизма их работы и взаимодействия.

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

· Специализация. Класс-наследник является специализированной формой родительского класса — в наследнике просто переопределяются методы.

· Спецификация. Дочерний класс реализует поведение, описанное в родительском классе. В С# эта форма реализуется наследованием от абстрактного класса.

· Конструирование. Класс-наследник использует методы базового класса, но не является его подтипом.

· Расширение. В класс-потомок добавляют новые методы, расширяя поведение родительского класса.

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

· Ограничение. Класс-наследник ограничивает поведение родительского класса.

· Варьирование. Базовый класс и класс-потомок являются вариациями на одну тему, однако связь "класс-подкласс" произвольна, например, "квадрат-прямоугольник" или "прямоугольник-квадрат". Эта форма фактически не отличается от "конструирования", так как класс-наследник, очевидно, "использует методы базового класса, но не является его подтипом".

· Комбинирование. Дочерний класс наследует черты нескольких классов — это множественное наследование (в C# не используется, поскольку множественное наследование запрещено, а наследование от нескольких интерфейсов имеет иной смысл).

Альтернативой наследованию при проектировании классов является вложение, когда один класс включает в себя поля, являющиеся классами. Например, если есть класс "двигатель", а требуется описать класс "самолет", логично сделать двигатель полем этого класса, а не его предком. Вложение представляет отношения классов "Y содержит X" или "Y реализуется посредством Х" и обычно реализуется с помощью модели "включение-делегирование", которая иллюстрируется в листинге 4.

using System;

namespace ConsoleApplication1

{

class Двигатель

{ public void Запуск()

   {

       Console.WriteLine("вжжжж!!");

   }

}

class Самолет

{ public Самолет()

  {

       левый = new Двигатель();

       правый = new Двигатель();

   }

   public void Запустить_двигатели()

   {

       левый.Запуск();

       правый.Запуск();

   }

   Двигатель левый, правый;

}

class Class1

{ static void Main()

   {

   Самолет АН24_1 = new Самолет();

   АН24_1.Запустить_двигатели();

   }

}

}

Листинг 8.4. Модель включения-делегирования

Результат работы программы:

вжжжж!!

вжжжж!!

В методе Запустить_двигатели запрос на запуск двигателей передается, или, как принято говорить, делегируется вложенному классу.

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

UML — Unified Modeling Language — является языком для специфицирования, визуализации, конструирования и документирования программных продуктов, а также используется в бизнес-моделировании и моделировании любых иных (не программных) систем.

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

Отношение наследования изображается на диаграмме классов в виде незакрашенного треугольника, направленного к базовому классу (предку). Пример изображения наследования с помощью диаграммы классов приведен на рис. 1.


Рис. 1. Пример диаграммы UML для наследования

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


Рис. 2. Примеры диаграмм UML для вложения классов

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

Класс object

Корневой класс System.Object всей иерархии объектов. NET, называемый в C# object, обеспечивает всех наследников несколькими важными методами. Производные классы могут использовать эти методы непосредственно или переопределять их.

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


Поделиться с друзьями:

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

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

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.