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

 

В этом случае объект-часть должен создаваться в процессе создания объекта-контейнера.

 

Изменить состояние объекта-части можно только в рамках самого контейнера, извне это сделать нельзя.

 

Пример

Сущности аналогичны базовым. Отличия в предметной области: осветительный прибор собирается на заводе изготовителе и представляет собой единое целое. Замена частей невозможна.

 

Отличия в программном коде заключаются в изменении конструктора класса Прибор. В этом конструкторе создаются объекты-части (лампочка и корпус изготавливаются на заводе на основе их технических характеристик, принятых в качестве параметров).

 

public Прибор(Корпус кор, Лампочка лам, string состояние)

   {

       this.кор = new Корпус();

       this.кор.Тип = кор.Тип;

       this.кор.Цена = кор.Цена;

       this.лам = new Лампочка();

       this.лам.Цена = лам.Цена;

       this.лам.Мощность = лам.Мощность;

       this.состояние = состояние;

}

 

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

           

//смена эталонной лампочки

п = new Прибор(к, л, "Включено");

 

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

 

п.лам.Мощность = 200.0;

 

Но это противоречит описанию предметной области.

 


Композиция на основе структур

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

Отличия от класса (основные)

1. Структуры относятся к типам значения, т.е. при присваивании одной структуры другой происходит копирование не ссылки, а всех полей структуры.

Копирование выполняется поверхностное (с полей значения снимается копия значений, с полей ссылок снимается копия ссылки).

Таким образом, задача создания осветительного прибора, не допускающего замены корпуса и лампочки, может быть решена с помощью кода абсолютно идентичного коду базового примера путем замены классов Корпус, Лампочка, Прибор, путем замены классов на структуры.

 class à struct

 

2. Для структур не поддерживается механизм наследования.

 

Прочие отличия

  1. Конструктор по умолчанию для структур невозможно переопределить, он всегда есть и всегда доступен. Можно добавить конструктор с параметрами.
  2. Создания объекта типа stuct не требует операции new. Но в этом случае поля структуры будут неопределенными по значению.
  3. При определении структуры запрещена инициализация полей.

 



НАСЛЕДОВАНИЕ

 

Понятие наследования

С точки зрения моделирования предметной области наследование предназначено для описания некоторой сущности (потомка) путем указания отличий от другой сущности (предка).

В ООП наследование рассматривается как отношение между классами, при котором класс-потомок представляет собой разновидность класса-предка.

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

Предок может иметь множество наследников. Наследник может иметь не более одного прямого предка. Другими словами, в С# явным образом не поддерживается множественное наследование. Потомок не может унаследовать поля и методы от нескольких прямых предков. Пример наследования приведен на Рис.1.

Специфические черты классу-потомку могут быть приданы двумя способами:

- Дополнение унаследованных от предка полей и методов новыми полями и методами. В результате потомок становится сложнее по структуре и поведению.

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

 

Механизм реализации:

- При определении класса-потомка указывается базовый класс: class ИмяКласса: ИмяБазовогоКласса;

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

 

С точки зрения технологии программирования наследование позволяет решить проблемы:

• Повторное использование кода (создание новых классов на основе существующих)

• Модификация существующего кода (изменение в базовом классе немедленно приводит к изменению в классах-потомках)

 

Дата: 2019-02-02, просмотров: 271.