2016-08-28 3 views
0

(0) Wenn eine Klasse Foo ein Feld vom Typ enthält Predicate<Bar> oder etwas ähnliches, was würde Foo ‚s Beziehung mit Bar sein?UML Beziehungen mit Generika und Nullable-Feldern

class Foo { 
    Predicate<Bar> validator; 
} 


(1) Wenn eine Klasse Foo einen generischen Container enthält, von Bar (nicht unbedingt eine Liste könnte eine Schachtel einen Bar sein), was Foo ist Beziehung s‘mit Bar?

class Foo { 
    SomethingThatHasA<Bar> barContainer; 
} 


(2) Wenn eine Klasse Foo ein NULL festlegbaren Mitglied Typ hat Bar, hat Foo lediglich eine Abhängigkeit haben, auf, haben eine Verbindung mit, oder ist eine Zusammensetzung aus Bar?

class Foo { 
    Bar bar; // may be null 
} 


(3) (Dies könnte mehr Sinn in C machen ++ als anderswo) Wenn eine Klasse Foo normalerweise von einem Bar Objekt zusammengesetzt sein (dh nicht ohne Bar lebt), aber darf Haben Sie einen Standardkonstruktor, der alle seine Felder als eine Art leerer Schieferzustand ausschaltet/annulliert, der keine Verwendung hat, bis er später ausgefüllt wird. Würde Foo noch eine Zusammensetzungsbeziehung mit Bar haben?

class Foo { 
    private: 
    Bar* bar; // or possibly just a non-pointer Bar 
    public: 
    Foo() : bar(nullptr) {} 
    Foo(/* whatever */) : bar(/* something */) {} 
}; 
+0

In 'Klasse Foo {Bar bar;}' 'bar' kann nicht' null' sein. Meinst du "Klasse Foo {Bar * bar;}" oder fehle ich etwas? – user463035818

+0

@ tobi303 Täter ist das Sprach-Tag-Spamming. In Java und C# 'Bar' kann' null' stehen. –

+0

Entschuldigung, nur das Szenario in (3) ist in C++ –

Antwort

0

(0) keine - Foo wissen nur Instanzen von Bar durch Validator zu validieren.

(3) Ja. Foo -s mit ungültigen Bar s sind in der Untoten Kategorie (weil ... dh kann nicht ohne einen Balken leben)

1

(0) und (1): Eine UML-Abhängigkeit wäre hier angebracht: ein gestrichelter Pfeil zeigt von Foo nach Bar.

(2) Mindestens eine Assoziation. Wenn die Bedeutung von Foo und Bar so ist, dass Bar als ein Teil von Foo betrachtet werden kann, dann können Sie eine Aggregation (offene Raute) verwenden, zum Beispiel im Falle eines Autos und einer Maschine. Wenn Instanzen von Bars, auf die sich Foos bezieht, nicht länger leben als ihre Foos, dann können Sie eine Komposition (gefüllter Diamant) verwenden, auch wenn nicht jeder Foo einen Balken hat und auch nicht jeder Balken in einem Foo enthalten ist .

(3) Ja