UML help C# Design Principles

2020-02-29 23:49发布

I have a problem understanding an UML below:

UML Image

Specifically, what is the relationship between PersistentSet and ThirdPartyPersistentSet? What is the relationship between PersistentObject and ThirdPartyPersistentSet?

Please note that the UML is from Agile Principles, Patterns, and Practices in C# By Martin C. Robert, Martin Micah 2006. Chapter 10

Thanks in advance!

5条回答
聊天终结者
2楼-- · 2020-03-01 00:15

Specifically, what is the relationship between PersistentSet and ThirdPartyPersistentSet?

PersistentSet has-many ThirdPartyPersistentSets

What is the relationship between PersistentObject and ThirdPartyPersistentSet?

ThirdPartyPersistentSet is dependent on (uses-a) PersistentObject

all of the lines in a uml class diagram indicate dependencies of one sort or another except for the dashed like to a comment (dog-eared box). a solid line with no arrows indicates a two (2) way (bi-directional) dependency.

查看更多
一纸荒年 Trace。
3楼-- · 2020-03-01 00:20

Specifically, what is the relationship between PersistentSet and ThirdPartyPersistentSet?

The solid diamond <|>-----> is Composition ("has a") where the "parts" are destroyed when the "whole" is. In the image below, if you destroy a Car, you destroy the Carburetor.

The empty diamond < >-----> is Aggregation ("has a") where the "parts" might are not destroyed when the "whole" is. In the image below, if you destroy a pond, you don't necessarily destroy the ducks (they move to a different pond if they are smart).

Composition
(source: wikimedia.org)

What is the relationship between PersistentObject and ThirdPartyPersistentSet?

This is a dependency relationship. See my answer here for further information.

So when does a dependency relationship change to an association relationship when using parameter passing?

If you store the parameter locally, then it changes from a dependency relationship, to an association relationship. If you only use the parameter locally, then it stays a dependency.

C# Code example:

// 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.
    }
}
查看更多
兄弟一词,经得起流年.
4楼-- · 2020-03-01 00:23

The black diamond represents composition, containment (as in having a field of the type pointed by the arrow): PersistentSet entities contain ThirdPartyPersistentSet entities When PersistenSet is destroyed, all ThirdPartyPersistenSet objects contained will also be destroyed.

The dashed line represents dependency, as in makes a function call that has a parameter of the type pointed by the arrow): ThirdPartyPersistentSet depends on PersistentObject

Look at the Wikipedia entry for more details

查看更多
唯我独甜
5楼-- · 2020-03-01 00:25

The relationship between PersistentSet and ThirdPartyPersistentSet is an Aggregation, which means the PersistentSet contains one or more ThridPartyPersistenSet instances. This is a "weak" relationship, meaning the instances of ThirdPartyPersistentSet can exist outside of the PersistentSet.

The relationship between PersistentObject and ThirdPartyPersistentSet is a Dependency, meaning basically ThirdPartyPersistentSet needs a PersistentObject to do it's work.

So, to translate this to code, your PersistentSet would contain something like this:

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

And your ThirdPartyPersistentSet would look something like this:

public class ThirdPartyPersistentSet
{
    private PersistentObject _object;
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        _object = obj;
    }
    ...
}
查看更多
Juvenile、少年°
6楼-- · 2020-03-01 00:36

Specifically, what is the relationship between PersistentSet and ThirdPartyPersistentSet?

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

What is the relationship between PersistentObject and ThirdPartyPersistentSet?

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

查看更多
登录 后发表回答