Справка по UML Принципы проектирования C # - PullRequest
2 голосов
/ 02 июня 2011

У меня проблема с пониманием UML ниже:

UML Image

В частности, какова связь между PersistentSet и ThirdPartyPersistentSet? Какая связь между PersistentObject и ThirdPartyPersistentSet?

Обратите внимание, что UML взят из гибких принципов, шаблонов и практик в C # Мартин С. Роберт, Мартин Мика 2006. Глава 10

Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 03 июня 2011

В частности, какова связь между PersistentSet и ThirdPartyPersistentSet?

Твердый алмаз <|> -----> равен Composition ("имеет"), где "части" разрушаются, когда "целое" является,На изображении ниже, если вы уничтожаете автомобиль, вы уничтожаете карбюратор.

Пустой алмаз <> -----> равен Aggregation («имеет»), где«части» могут не разрушаться, когда «целое» есть.На изображении ниже, если вы уничтожаете пруд, вы не обязательно уничтожаете уток (они переходят в другой пруд, если они умные).

Композиция http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/AggregationAndComposition.svg/220px-AggregationAndComposition.svg.png

Какова связь между PersistentObject и ThirdPartyPersistentSet?

Это отношение зависимости.См. Мой ответ здесь для получения дополнительной информации.

Итак, когда отношение зависимости меняется на отношение ассоциации при использовании передачи параметров?

Если высохраните параметр локально, затем он изменится с отношения зависимости на отношение ассоциации.Если вы используете параметр только локально, он остается зависимым.

C # Пример кода:

// Association 
public class ThirdPartyPersistentSet
{
    private PersistentObject _object;
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        _object = obj; // Store it to a local variable.
        // Now ThirdPartyPersistentSet 'knows' about
        // the PersistentObject.
    }
}

// Dependency
public class ThirdPartyPersistentSet
{
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        obj.GetSomething(); // Do something with obj,
        // but do not store it to a local variable.
        // You only 'use' it and ThirdPartyPersistentSet
        // does not 'know' about it.
    }
}
1 голос
/ 02 июня 2011

Отношение между PersistentSet и ThirdPartyPersistentSet является Aggregation, что означает, что PersistentSet содержит один или несколько экземпляров ThridPartyPersistenSet. Это «слабое» отношение, означающее, что экземпляры ThirdPartyPersistentSet могут существовать вне PersistentSet.

Отношение между PersistentObject и ThirdPartyPersistentSet является зависимостью, означающей, что в основном ThirdPartyPersistentSet нужен PersistentObject для выполнения своей работы.

Итак, чтобы перевести это в код, ваш PersistentSet будет содержать что-то вроде этого:

public class PersistentSet
{
    public List<ThirdPartyPersistentSet> Items { get; }
    ...
}

И ваш ThirdPartyPersistentSet будет выглядеть примерно так:

public class ThirdPartyPersistentSet
{
    private PersistentObject _object;
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        _object = obj;
    }
    ...
}
0 голосов
/ 02 июня 2011

В частности, какова связь между PersistentSet и ThirdPartyPersistentSet?

http://en.wikipedia.org/wiki/Class_diagram#Aggregation

Какая связь между PersistentObject и ThirdPartyPersistentSet?

http://en.wikipedia.org/wiki/Class_diagram#Dependency

0 голосов
/ 02 июня 2011

Черный ромб представляет состав , сдерживание (как при наличии поля типа, указанного стрелкой): PersistentSet сущности содержат ThirdPartyPersistentSet сущности Когда PersistenSet уничтожается, все содержащиеся объекты ThirdPartyPersistenSetтакже может быть уничтожено.

Пунктирная линия представляет зависимость , как в вызове функции, которая имеет параметр типа, указанного стрелкой): ThirdPartyPersistentSet зависит от PersistentObject

Посмотрите на запись в Википедии для более подробной информации

0 голосов
/ 02 июня 2011

В частности, какова связь между PersistentSet и ThirdPartyPersistentSet?

PersistentSet имеет много-много ThirdPartyPersistentSets

Чтотакое отношение между PersistentObject и ThirdPartyPersistentSet?

ThirdPartyPersistentSet зависит от (использует -a) PersistentObject

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

...