Ich glaube, ich verstehe Ihre Frage, obwohl, wie die Kommentatoren, Ihnen zu erklären versuchen, haben Sie es nicht klar gefragt. Ich glaube, Sie fragen, welche Art von Assoziation Sie zwischen Ihren Klassen verwenden sollten.
Die Zusammensetzungsassoziation, wie Sie teilweise zu verstehen scheinen, bedeutet, dass die Lebensdauer eines Objekts in einer Zusammensetzungsbeziehung von dem Objekt abhängt, von dem es ein Teil ist.
Ihr erstes Diagramm besagt also, dass Ihr Zug aus Haltestellen besteht und dass es daher, wenn es keinen Zug gäbe, keine Haltestellen mehr geben würde. Das ist offensichtlich nicht wahr; andere Züge könnten an den gleichen Haltestellen anhalten. Außerdem wird Ihr Zug wahrscheinlich mit einem "Route" -Objekt assoziiert, das eine Zusammenfassung von mehreren Stopps darstellt. Ich überlasse es Ihnen, die Details zu klären.
Ihr nächstes Diagramm besagt, dass ein Zug (zumindest teilweise) aus Fahrgästen besteht, so dass, wenn der Zug zerstört wird, keine Fahrgäste mehr vorhanden sind. Aber ein Passagier kann die Züge wechseln und weiterhin ein Passagier sein, so dass Sie keine Beziehung zwischen Zug und Passagier haben. Der Passagier fährt Züge, der Zug kann oder darf keine Passagiere haben, also haben Sie eine einfache Assoziation (kein Diamant jeglicher Art).
Schließlich sagt Ihr letztes Diagramm, dass die verfügbaren Routen aus Städten bestehen. Das ist plausibel. Es gibt jedoch auch das Problem, dass eine bestimmte Stadt Mitglied verschiedener Routen sein kann. Wenn dem so ist, kann es besser sein zu sagen, dass eine gegebene Stadt eine Anzahl von damit verbundenen Routen "hat". In diesem Fall würde am Ende der Stadt ein weißer Diamant stehen. Natürlich, wenn Sie das tun, müssen Sie Ihr distance_between
Attribut überdenken. Es wäre am besten, eine Klasse distance
zu erstellen, die selbst zwei und nur zwei Stadtobjekten zugeordnet ist.
Erhalten Sie ein Diagramm? weil das nicht klar ist. – granier
So neu erhalten wir das Schema und eine Frage, aber was ist Ihr Kontext und der Zweck des Schemas? Ohne sie könnte es sehr gut oder sehr schlecht sein. Übrigens sind alle Attribute öffentlich: das ist nicht üblich. – granier
Alle Attribute sind öffentlich, weil ich diese Klassen in passagier_train Klasse verwende (um Zugang zu allen Feldern der Klassen zu bekommen) –