2012-03-26 6 views
2

Bietet eine Programmiersprache so etwas?Was bedeutet es in UML, dass Instanz mehr als 1 Klassifikator realisieren könnte?

Wo könnte dies verwendet werden?

Zum Beispiel:

enter image description here

beachten Sie, dass somethingStrange ist keine Klasse, die eine Instanz (seine unterstrichen), und dies ist ein Objektdiagramm

Spec (Abschnitt 7.3.22) sagt:

Eine Instanzspezifikation wird mit der gleichen Notation wie ihr Klassifizierer dargestellt, aber anstelle des Klassifizierernamens erscheint eine unterstrichene Verkettung des Instanznamens (falls vorhanden), ein Doppelpunkt (':') und die Klasse ifier Name oder Namen.

Die Konvention zum Anzeigen mehrerer Klassifikatoren besteht darin, ihre Namen durch Kommas zu trennen.

Also ich bin mit "mehreren Klassifikatoren" fest.

+0

das ist keine UML-Notation –

+1

ich kann kein Bild anhängen, sieht das besser aus? http://dl.dropbox.com/u/45912725/cat-o-panzer.png – reimai

+1

Ich habe das Bild für Sie angehängt –

Antwort

0

Jede Sprache mit extensionaler statt intensionaler Typisierung erlaubt solche Konstrukte. In RDF können zwei Quellen beispielsweise Behauptungen über eine Web-Ressource erheben, die völlig widersprüchlich sind, oder in einer "Entartentyp" -Sprache könnte ein Objekt alle Eigenschaften von zwei ansonsten nicht verwandten Typen aufweisen.

Erweiterte Sprachen klassifizieren Objekte nach ihren Eigenschaften - wenn es Zinken hat, ist es eine Gabel, wenn es einen Griff und eine Schüssel hat, ist es ein Löffel, wenn es beide Zinken und eine Schüssel hat, ist es eine Gabel und ein Löffel. Der Unterschied zwischen solchen Sprachen und klassenorientierten intensionalen Sprachen wie C++/Java/C#, auf die UML häufiger angewendet wird, besteht darin, dass Sie keine spork-Klasse benötigen, um Dinge zu definieren, die sowohl Löffel als auch Gabeln sind - ob Dinge, die zu einem Klassifikator gehören, werden dadurch definiert, ob sie die Anforderungen des Klassifikators erfüllen.

0

Es ist ein Dependency. Abhängigkeit ist eine schwächere Form der Beziehung, die anzeigt, dass eine Klasse von einer anderen abhängt, weil sie sie zu einem bestimmten Zeitpunkt verwendet. Eine Klasse hängt von einer anderen ab, wenn letztere eine Parametervariable oder eine lokale Variable einer Methode der ersteren ist. Dies unterscheidet sich von einer Assoziation, bei der ein Attribut des ersteren eine Instanz des letzteren ist.

Mit anderen Worten: Ihre somethingStance Klasse verwenden sowohl Cat und Panzer

Die darunter nur ein Beispiel dafür, wie es aus wie

Public class SomethingStrange{ 
    public Cat CatDependency{get;set;} 
    public Panzer PanzerDependency{get;set;} 

} 
+0

Nun, Realisation ist eine Form der Abhängigkeit, aber ich kann immer noch nicht verstehen, warum InstanceSpecification Fähigkeit hat um mehr als einen Klassifikator darzustellen. Spec sagt: "Wenn mehrere Klassifikatoren angegeben werden, wird die Instanz von allen von ihnen klassifiziert ." Im Code Generatioin was würde passieren? – reimai

+0

es ist keine Generalisierung und wir sprechen hier nicht von Mehrfachvererbung. SomeThingClass wird wahrscheinlich Cat oder Panzer oder beide zu einem bestimmten Zeitpunkt verwenden SomethingStangerClass ist kein Subtyp von Cat oder Panzer –

+0

Ich denke, wir müssen zuerst herausfinden, ob das Diagramm richtig ist, es stimmt nicht genau mit der Frage .. – ShiDoiSi

0

aussehen könnte, dass die Mehrfachvererbung ist, wenn Sie sich beziehen Klassen (mit Ausnahme, dass Sie für die Verallgemeinerung feste Kanten verwenden sollten), nothing wrong with that;)

Beachten Sie, dass eine Schnittstelle auch ein Klassifizierer ist, also auch die Text Ihrer Frage braucht ein wenig Verfeinerung - nichts falsch daran, schließlich mehr als eine Schnittstelle zu verallgemeinern.

+0

wie Sie sagten, es sollte feste Kanten haben sonst ist eine "Beziehung" –

+0

@MassimilianoPeluso zwischen Klassifikatoren, ein offenes Dreieck mit einer gestrichelten Linie ist eine Schnittstelle Realisierung. –

0

UML erlaubt es einem Objekt gleichzeitig eine Instanz mehrerer verschiedener Klassen zu sein (auch wenn sie nicht miteinander verwandt sind).Die Tatsache, dass dies nicht die normale Konvention ist und nicht von Programmiersprachen unterstützt wird, ist ein anderes Thema. UML versucht, so weit wie möglich zu sein, auch wenn bestimmte Technologien nur eine Teilmenge davon implementieren können.