2015-10-17 4 views
5

Gemäß der UML-Spezifikation können wir eine Abhängigkeit zwischen zwei Klassen mittels <<Create>> oder <<Instantiate>> Stereotypen bezeichnen."Erstellen" vs "Instantiate" Abhängigkeit in UML

Wissen Sie, was die Unterschiede zwischen diesen Stereotypen sind?

Es steht geschrieben in UML-Spezifikation 2.5 (Kap 22.3 Standard-Stereotypen.):

  1. Für <<Create>>

    Eine Nutzung Abhängigkeit bezeichnet, dass der Client-Klassifikator Instanzen des Anbieters Klassifikator erzeugt

  2. Für <<Instantiate>>

    Eine Nutzung Abhängigkeit unter Klassifizierer angibt, dass Operationen auf dem Client-Instanzen des Lieferanten erstellen

+1

Ich würde nicht alle UML-Definitionen auf eine Goldbilanz setzen. Für mich klingen beide Definitionen sehr ähnlich. Aus meinem Verständnis <> ähnelt (Gottes) Schöpfung, so etwas Neues. <> ist dagegen mehr wie eine Klonoperation. YMMV –

Antwort

1

Ich bemerkte, dass < < erstellen >> Klischee kann auch nicht nur auf „Verwendung angewandt werden "Abhängigkeit aber auch " BehavioralFeature "(siehe Abschnitt 22.2 in UML-Spezifikation).

In UML "BehavioralFeature" entspricht bestimmte Methoden in einer Klasse oder Schnittstelle.

Wenn wir daher in einer Klasse bestimmte Methode markieren mit < < erstellen >> oder < < Zerstören >> meinen wir, dass es schafft/zerstört eine Instanzen dieser Klasse.

Wir können eine parallel machen eine Methode mit < < erstellen >> und Markieren eines Nutzungs Dependency mit < < >> Erstellen zwischen Markierung.

Wenn wir eine Nutzungs Abhängigkeit mit < < markieren erstellen >> dann bedeutet dies, dass bestimmte Methode in einer Client-Klasse eine Instanz einer Lieferanten-Klasse erstellt. Daher erstellen wir eine Instanz des Lieferanten im Körper unserer Kundenklasse. Kunde und Lieferant sind hier stark gekoppelt.

Auf der anderen Seite, wenn wir eine Nutzungs Dependency mit < < Instantiate >> dann Client-Klasse delegiert die Schaffung von Lieferanten an die anderen Objekte markieren. Somit schafft er indirekt Lieferant. In diesem Fall sind Client und Lieferant lose gekoppelt. Zum Beispiel geschieht dies, wenn wir Lieferant über eine der Erzeugungsmuster erstellen: Object Pool, Prototype, Fabrikmethode usw.

Hinweis:

Im Großen und Ganzen ist es nicht ganz klar die Unterschiede aus der spec . Hoffe in zukünftigen Versionen davon (mehr als 2.5 Version) haben wir mehr klare Definitionen.

+0

Ist dies Ihre Interpretation dieser Dinge oder haben Sie eine Quelle, die diese Ansicht bestätigt? –

+0

Dies ist meine eigene Analyse auf der Grundlage von UML-Spezifikation – Vitaly

2

Michael Jesse Chonoles Ja, «create» wird für Sequenzdiagramme verwendet. Es ist ein Stereotyp in einer Nachricht. "Erstellen" ist auch ein Stereotyp für ein Verhaltensmerkmal in einem Klassifizierer, das angibt, dass es sich um einen Konstruktor von Instanzen dieses Klassifizierers handelt (oder um das Äquivalent für nicht objektorientierte Elemente).

Wenn «Create» für eine Abhängigkeit verwendet wird, scheint es nicht viel anders als «Instantiate». Persönlich verwende ich die Abhängigkeit «Instantiate» .wenn ich eine wahre objektorientierte Instanziierung durch Aufrufen des Konstruktors bedeute (so würde ich das Modell in Code übersetzen). Ich würde «Create» verwenden, wenn es sich um eine andere Art von Kreation handelt, entweder um indirekte, konzeptuelle oder nicht-objektorientierte Funktionen.

Hier sind einige Beispiele. Ich würde «Create» verwenden, um MS Word zu sagen -> «Create» ein Dokument, ein Modellierer «Create» ein Modell. Obwohl ich dies normalerweise nicht im Detail modelliere, würde ich «Create» verwenden, um auf eine Komponente «Create» einen neuen Datenbankeintrag, den Datenbankmanager «Create» eine neue Datenbank, einen Programmierer «Create» eine neue App anzuzeigen. Oder erstelle ein neues Element in einem (nicht-oo) Array. Dies kann passieren, ohne dass ein herkömmlicher objektorientierter Konstruktor aufgerufen wird, und können nicht direkt in Code konvertiert werden.

Andererseits, wenn ich eine Heiratsoperation an einer Person hätte, würde sie wahrscheinlich das Assoziationsklassenobjekt der Ehe "instanziieren".

Da die meisten meiner Modelle konzeptionell sind, neige ich in der Praxis dazu, «create» zu verwenden. Aber selbst dann kommt es nicht oft vor.

+0

Siehe auch hier: https://www.linkedin.com/grp/post/143183-6061637312238927877 –