Шаг 41.
Унифицированный язык моделирования UML.
Одиночное наследование

    На этом шаге рассмотрим одиночное наследование.

    Класс, структура и поведение которого наследуются, называется суперклассом (superclass). Класс TelemetryData является суперклассом для класса ElectricalData. Класс, производный от суперкласса, называется подклассом (subclass). Следовательно, наследование устанавливает между классами иерархию "общее/частное", в которой подкласс наследует свойства одного или нескольких суперклассов. Этот признак — необходимое условие наследования. Рассмотрим два класса А и В. Если класс А не является разновидностью класса В, то класс А не может быть подклассом класса В. В этом смысле класс ElectricalData является специализированной разновидностью более общего класса TelemetryData. Способность языка поддерживать этот вид наследования отличает объектно-ориентированные языки программирования от объектных.

    Подкласс обычно либо расширяет, либо ограничивает существующую структуру и поведение своего суперкласса. Подкласс, дополняющий свойства своего суперкласса, использует наследование для расширения. Например, подкласс GuardedQueue (защищенная очередь) может расширить поведение суперкласса Queue (очередь), дополнив его операциями защиты класса в многопоточной среде. И наоборот, подкласс UnselectableDisplayItem (невыбираемый объект дисплея) ограничивает поведение своего суперкласса DisplayItem, запрещая выбор объекта на экране. На практике иногда трудно понять, расширяет подкласс свой суперкласс или ограничивает. Как правило, происходит и то, и другое.


Рис.1. Одиночное наследование

На рис. 1 продемонстрированы отношения одиночного наследования от суперкласса TelemetryData. Стрелки обозначают отношения "is а". Например, класс Cameradata (данные камеры) представляет собой разновидность класса SensorData (данные сенсора), который в свою очередь является разновидностью класса TelemetryData (телеметрические данные).

    Аналогичный тип иерархии характерен для семантических сетей, которые часто используются специалистами по распознаванию образов и искусственному интеллекту для организации баз знаний [Brachman, R. October 1983. What IS-A Is and Isn't: An Analysis of Taxonomic Links in Semantic Networks. IEEE Computer vol. 16(10), p. 30.]. Правильная организация иерархии абстракций — это вопрос разумной классификации.

    Некоторые классы, изображенные на рис. 1, могут иметь экземпляры. Например, наиболее вероятным является образование объектов самых специализированных классов (листьев, или конкретных классов), таких как ElectricalData, а наименее вероятным — образование экземпляров более общих классов, занимающих промежуточное положение (SensorData и TelemetryData). Классы, экземпляры которых не создаются, называются абстрактными (abstract classes). Абстрактные классы создаются с расчетом на то, что подклассы дополнят их структуру и поведение с помощью конкретной реализации не полностью описанных методов.

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

    Наследование подразумевает, что подклассы повторяют структуры их суперклассов. Экземпляры класса ElectricalData содержат данные- члены суперкласса (такие как id и timeStamp), а также члены, которые наследуются более специализированными классами.

    Подклассы также наследуют поведение суперклассов. Например, экземпляры класса ElectricalData могут выполнять операции currentTime (унаследована от его суперкласса), currentPower (определена в самом классе) и transmit (переопределена в подклассе).

    На следующем шаге рассмотрим полиморфизм.




Предыдущий шаг Содержание Следующий шаг