Иерархическая организация

Мы разглядели три механизма для борьбы со сложностью:

q абстракцию (она упрощает представление физического объекта);

q инкапсуляцию (закрывает детали внутреннего представления абстракций);

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

Красивым дополнением к этим механизмам является иерархическая организация — формирование из абстракций иерархической структуры. Определением иерархии в проекте упрощаются осознание заморочек Иерархическая организация заказчика и их реализация — непростая система становится обозримой человеком.

Иерархическая организация задает размещение абстракций на разных уровнях описания системы.

2-мя необходимыми инструментами иерархической организации в объектно-ориентированных системах являются:

q структура из классов («is a»-иерархия);

q структура из объектов («part of»-иерархия).

В большинстве случаев «is а»-иерархическая структура Иерархическая организация строится при помощи наследования. Наследование определяет отношение меж классами, где класс делит структуру либо поведение, определенные в одном другом (единичное наследование) либо в нескольких других (множественное наследование) классах.

Пример:положим, что программка управления полетом 2-й ступени ракеты-носителя в главном похожа на программку управления полетом 1-й ступени, но все таки Иерархическая организация отличается от нее. Определим класс управления полетом 2-й ступени, который инкапсулирует ее спец поведение:

with Класс_УпрПолетом1; use Класс_УпрПолетом1;

Package Класс_УпрПолетом2 is

type Линия движения is (Эластичная. Свободная);

type УпрПолетом2 is new УпрПолетом1 with private;

procedure Установиться: in out УпрПолетом2:

тип: Линия движения; ориентация : Углы;

характеристики Иерархическая организация: Координаты_Скорость; команды: График);

procedure УсловияОтделенияЗступени (the: УпрПолетом2;

аспект:КритерийОтделения);

function ПрогнозОтделенияЗступени (the: УпрПолетом2)

return БортовоеВремя;

function ИсполнениеКоманд(the: УпрПолетом2)

return Boolean;

private

type УпрПолетом2 is new УпрПолетом1

with record

типТраектории: Линия движения; доОтделения: БортовоеВремя;

выполнениеКоманд: Boolean;

end record;

end Класс_УпрПолетом2;

Лицезреем, что класс УпрПолетом2 — это «is а»-разновидность класса УпрПолетом Иерархическая организация1, который именуется родительским классом либо суперклассом.

В класс УпрПолетом2 добавлены:

q авспомогательный тип Линия движения;

q три новых характеристики (типТраектории, доОтделения, выполнениеКоманд);

q три новых способа (УсловияОтделенияЗступени, ПрогнозОтделенияЗступени, ИсполнениеКоманд).

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

Классы УпрПолетом1и УпрПолетом2 образуют наследную иерархическую компанию. В ней общая часть структуры и поведения сосредоточены Иерархическая организация в верхнем, более общем классе (суперклассе). Суперкласс соответствует общей абстракции, а подкласс — спец абстракции, в какой элементы суперкласса дополняются, меняются и даже скрываются. Потому наследование нередко именуют отношением обобщение-специализация.

Иерархию наследования можно продолжить. К примеру, используя класс УпрПолетом2, можно объявить еще больше спец подкласс — УпрПолетомКосмическогоАппарата.

Другая разновидность Иерархическая организация иерархической организации — «part of»-иерархическая структура — базируется на отношении агрегации. Агрегация не является понятием, уникальным для объектно-ориентированных систем. К примеру, хоть какой язык программирования, разрешающий структуры типа «запись», поддерживает агрегацию. И все таки агрегация в особенности полезна в купе с наследованием:

1) агрегация обеспечивает физическую группировку логически связанной структуры;

2) наследование Иерархическая организация позволяет просто и неоднократно использовать эти общие группы в других абстракциях.

Приведем пример класса ИзмерительСУ (измеритель системы управления ЛА):

with Класс_НастройкаДатчиков. Класс_Датчик;

use Класс_НастройкаДатчиков, Класс_Датчик;

Package Класс_ИзмерительСУ is

type ИзмерительСУ is tagged private;

-- описание способов

private

type укз_наДатчик is access all Датчик'Class;

type ИзмерительСУ is Иерархическая организация record

датчики: array(1..30) of укз_наДатчик;

процедураНастройки: НастройкаДатчиков;

end record;

end Класс_ИзмерительСУ;

Разумеется, что объекты типа ИзмерительСУ являются агрегатами, состоящими из массива датчиков и процедуры опции. Наша абстракция ИзмерительСУ позволяет использовать в системе управления разные датчики. Изменение датчика не меняет особенности измерителя в целом. Ведь датчики вводятся Иерархическая организация в агрегат при помощи указателей, а не величин. Таким макаром, объект типа ИзмерительСУ и объекты типа Датчик имеют относительную независимость. К примеру, время жизни измерителя и датчиков независимо друг от друга. Напротив, объект типа НастройкаДатчиков на физическом уровне врубается в объект типа ИзмерительСУ и независимо существовать не может. Отсюда вывод Иерархическая организация — разрушая объект типа ИзмерительСУ, мы, в свою очередь, разрушаем экземпляр НастройкиДатчиков.

Любопытно сопоставить элементы иерархий наследования и агрегации исходя из убеждений уровня трудности. При наследовании нижний элемент иерархии (подкласс) имеет больший уровень трудности (огромные способности), при агрегации — напротив (агрегат ИзмерительСУ обладает большенными способностями, чем его элементы — датчики и процедура Иерархическая организация опции).

Объекты

Разглядим более внимательно объекты — определенные сути, которые есть во времени и пространстве.


identificirovat-pishevie-dobavki-v-razlichnih-produktah-pitaniya-v-sootvetstvii-s-kodami-evropejskogo-soyuza-i-tehnologicheskimi-svojstvami-margarin.html
identifikacionnie-priznaki-ponyatie-klassifikaciya-usloviya-ispolzovaniya.html
identifikacionnogo-nomera-malomernogo-sudna-ispolzuemogo-v-nekommercheskih-celyah.html