Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

private inheritance (закрытое наследование)

Наследование структуры в ситуации, при которой не наследуется спецификация поведения.
См. implementation inheritance; interface inheritance; substitutability principle.

Семантика

У обобщения может стоять стереотип "implementation". Это обозначает, что клиент (обычно, это класс) наследует структуру (атрибуты, ассоциации и операции) поставщика. Однако при этом он не всегда разрешает доступ к этой структуре своим собственным клиентам.
Предки такого класса (или другого элемента) не видны другим классам, поэтому его экземпляр нельзя использовать для переменной или параметра, тип которых является классом-поставщиком. Другими слонами, этот класс нельзя подставить вместо тех его поставщиков, от которых он наследует закрытым образом. Закрытое наследование не поддерживает принцип подстановочности.

Нотация

Закрытое наследование изображается при помощи ключевого слова "implementation", стоящего у стрелки обобщения, которая идет от клиента, наследующего структуру, к поставщику, который ее предоставляет.

Обсуждение

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

Алфавитный указатель