Диаграмма объекта UML: родитель или дочерний элемент

Скажем, у меня есть следующий класс:

public class ParentClass{}

И один из его дочерних классов:

public class ChildClass extends ParentClass{}

Рассмотрим другой класс:

public class Foo{
    
    private ParentClass field;
    
    public Foo(){
        
        field = new ChildClass();
        
    }
    
    public static void main(String[] args){
        
        Foo foo = new Foo();
        
    }
    
}

При рисовании диаграммы объектов foo я не знаю, нужно ли мне писать ChildClass :

введите здесь описание изображения

Or ParentClass :

введите здесь описание изображения


person Axel Carré    schedule 24.11.2020    source источник


Ответы (1)


В вашей программе поле является экземпляром ChildClass, цель диаграммы объектов — показать экземпляры с их эффективным типом (и значением их атрибутов, если они есть) => правильная диаграмма для использования

введите здесь описание изображения


[изменить из примечаний к моему ответу]

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

Я забыл упомянуть на обеих ваших диаграммах, что линия между двумя экземплярами не соответствует единственной связи между ними, правильный способ сделать это для первой диаграммы:

введите здесь описание изображения

учитывая, что ваш экземпляр Foo сохраняется через переменную с именем foo, кажется разумным назвать foo ваш экземпляр Foo

person bruno    schedule 24.11.2020
comment
Спасибо, я хотел сделать это таким образом, но я не был уверен. - person Axel Carré; 25.11.2020
comment
При размещении названия объекта перед двоеточием было бы еще понятнее. - person qwerty_so; 25.11.2020
comment
Интересно. Я не большой пользователь диаграмм объектов, но я бы использовал foo:Foo --- field:ParentClass, потому что в известном классе field есть ParentClass. Где в спецификациях сказано, что он должен показывать действующий тип? Я нашел только страницу 125. Цель InstanceSpecification — показать, что представляет интерес в экземпляре. Экземпляр соответствует каждому классификатору InstanceSpecification..., что оставляет выбор одного, другого или обоих вместе в зависимости от того, что представляет интерес для диаграммы. - person Christophe; 25.11.2020
comment
Более того, это не предложение спецификации. Важно помнить, что InstanceSpecification является элементом модели, и его не следует путать с экземпляром, который он моделирует. открытая дверь для необязательного использования эффективного типа объекта? - person Christophe; 25.11.2020
comment
@ Кристоф, может быть, я недостаточно ясно выразился в своем ответе, я не сказал, что вторая диаграмма неверна. Зная, что экземпляр Foo точно связан с экземпляром CHildClass, зачем скрывать это на диаграмме? Зачем мы делаем диаграммы, чтобы скрыть знания/информацию или показать их? Для меня показать, что представляет интерес в экземпляре, начинается с эффективного типа экземпляра в этом контексте. - person bruno; 25.11.2020
comment
@Christophe I would have used foo:Foo --- field:ParentClass вы ошибаетесь, поле - это не имя экземпляра ParentClass/ChildClass, а имя конца атрибута/ассоциации. Я редактирую свой ответ, чтобы улучшить представление диаграммы - person bruno; 25.11.2020
comment
Тоже узнал кое-что новое :-) - person qwerty_so; 25.11.2020
comment
@bruno Поправьте меня, если я ошибаюсь, здесь поле — это имя поля ChildClass в Foo, если бы этот объект ChildClass был передан, например, конструктором и имел ссылку, мы бы написали его имя перед: ChildClass? В основном вы помещаете имя поля рядом со ссылкой со стрелкой и имя перед двоеточием, если оно имеет ссылку во внешней области? - person Axel Carré; 25.11.2020
comment
@dylanbatio сначала вы можете назвать экземпляры по своему усмотрению, независимо от того, как они управляются в исходном коде, если он существует. Имя экземпляра записывается перед ':' в прямоугольнике, представляющем экземпляр. Учитывая представление ассоциации, это похоже на диаграмму классов, см. § 9.8.5 на странице 129 formal/2017-12-05 - person bruno; 25.11.2020