Допустимо ли говорить об экземплярах абстрактного класса? - PullRequest
0 голосов
/ 14 сентября 2018

Я являюсь частью рабочей группы, которая разрабатывает стандарт IEEE.Проблемная область стандарта выражается в виде объектно-ориентированной модели.Модель не зависит от какого-либо конкретного языка реализации, но использует UML для выражения аспектов модели.Во многих местах в тексте есть ссылки на «экземпляры Foo», где Foo - абстрактный класс.Что на самом деле означает «экземпляры любого инстанцируемого подкласса Foo».

Мой опыт всегда заключался в том, что «экземпляры любого Foo» понимались как «экземпляры любого инстанцируемого подкласса Foo».Является ли это понимание тем, чем поделились бы большинство людей, разбирающихся в объектно-ориентированных моделях?Если так, есть ли какая-нибудь хорошая ссылка, на которую мы можем указать, которая поддержала бы это понимание?Если это не то, что обычно понимают, тогда нам нужно изменить много текста, но так оно и есть.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вопрос имеет два аспекта: во-первых, что правильно в смысле UML и во-вторых, как это понимается в реальности.Давайте начнем с более простого аспекта.Стандарт UML четко заявляет, что любой экземпляр классификатора также является экземпляром любого из его обобщений

Экземпляр классификатора также является (косвенным) экземпляром каждого из его обобщений.Любые ограничения, применяемые к экземплярам обобщений, также применяются к экземплярам классификатора.

Это просто дает очень статичное представление о нем.Но и это не ответ спортсмена, потому что он ничего не говорит о том, как экземпляры могут использоваться динамически.Но в стандарте также говорится, что любой экземпляр может использоваться в качестве экземпляра любого его обобщенного классификатора:

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

Таким образом, в этом случае стандарт достаточно ясен.

Второй аспект - реальность.В действительности большинство практически применяемых языков ООП поддерживают полиморфизм.Говоря упрощенно, любой объект класса можно рассматривать как объект любого из его суперклассов.Таким образом, большинство людей воспринимают это так, как вы это понимали.

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

Все ссылки на OMG UML 2.5.1.

0 голосов
/ 14 сентября 2018

Только что вернувшись (снова) к стандарту OMG для UML и снова просматривая его, я нашел этот текст:

Экземпляр классификатора также является (косвенным) экземпляром каждого изего обобщения.

Кроме того, в пункте 9.7.5 он использует текст

каждый экземпляр Person

со ссылкой на модельпоказано на рисунке 9.22.
enter image description here

На рисунке 9.22 класс Person является абстрактным.Я думаю, что это довольно ясно решает это в пользу того, что «примеры Foo» являются полностью правильными и приемлемыми.

...