Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: How to BOLD(t) your problem

  Alt 5. Sep 2003, 19:29
Let's do the logical design

Projekt mal wieder speichern!

Bis hier sind die Schritte für jedes Bold-Projekt gleich bzw. ähnlich, abhängig zum Beispiel von der Art der Datenspeicherung. Aber nun zum eigentlich Projekt und seiner Logik. Dazu starten wir den Bold UML-Editor. Der versteckt sich hinter dem Doppelklick auf die TBoldModel (bldModel) Komponente.

In der aktuellsten Version von Bold sind die Kontextmenüs flexibler, als in den Vorgängerversionen. Von daher kann man fast an jeder Stelle jeden Menüpunkt erreichen und sollte der gewählte Punkt im aktuellen Kontext "keinen Sinn machen", sucht Bold die nächste sinnvolle Position, um die Abfrage auszuführen.



In der Grafik habe ich bereits die ersten drei Punkte unserer Aufgaben markiert. Wenn Ihr Euch ein wenig im Editor umgeschaut habt, dann geht jetzt auf die Root-Node (1) und wählt damit das aktuelle Projekt-Modell aus. Geben wir dem mal einen "vernünftigen" Namen (2) "BoldContacts". Im Feld Model Root Class (3) geben wir der Basis-Klasse unseres Models auch einen Namen "ContactsModelRoot". Anschließend noch die Node der Basis-Klasse (4) auswählen und im erscheinenden Dialog (rechte Seite) den gleichen Namen (5) angeben, den wir auch bei (3) angegeben haben.



Ähnlich wie in Delphi alle Klassen von TObject abgeleitet werden, müssen in einem Bold-Modell alle Klassen von einer Basisklasse oder deren abgeleiteten Klassen abgeleitet werden. Unterschied ist, daß diese Klasse frei benannt werden kann. Diese Klasse ist letztendlich, wenn das Projekt vollständig kompiliert ist, natürlich auch von TObject abgeleitet.

Unsere Klassen

Unterhalb der Node Logical View erstellen wir jetzt die drei benötigten Klassen für unser Model. Dazu müsst Ihr einfach mit der rechten Maustaste auf die Node Logical View klicken und den Menüpunkt New Class auswählen. In der ersten UML-Grafik haben wir dafür festgelegt, daß wir die folgenden Klassen benötigen.
  • Contact (unsere Basisklasse für Kontaktdaten)
  • Company (zusätzlich erforderliche Informationen für Firmendaten)
  • Person (zusätzlich erforderliche Informationen für Personendaten)

Nachdem wir die Klassen angelegt haben, müssen wir noch die Vererbung definieren. Dazu muss für die Node (Klasse) Contact bei der Eigenschaft Superclass die Klasse ContactsModelRoot ausgewählt werden. Für die Nodes (Klassen) Company und Person muss an gleicher Stelle die Klasse Contact ausgewählt werden. Zusätzlich speichern wir für die Klasse Contact, daß diese abstract ist. Das resultiert darin, daß später kein Kontakt angelegt werden kann, der nicht entweder vom Typ Company oder vom Typ Person ist, was sollte das auch für ein Kontakt sein. Ihr Kühlschrank?



Ein Kontakt sollte auch Daten haben

Das bringt uns jetzt zum nächsten Punkt. Wir haben unsere Klassen und diese Klassen können auch genutzt werden. Allerdings sind diese in deren jetzigen Zustand wohl eher nutzlos, da keine Klasse bis jetzt genauere Daten speichert. Nehmen wir dieses mal in Angriff Fangen wir mit der Klasse Contact, welche die Basis der anderen Kontaktdaten-Klassen ist. Klicken wir dazu mit der rechten Maustaste auf die Node der Klasse Contact und legen die folgenden Eigenschaften/Attribute an:
  • emailAddress
  • faxNumber
  • phoneNumber
  • postalAddress
Der Einfachheit zuliebe belassen wir die Defaultdatentypen und -einstellungen (String, 255 Zeichen). Für die Eigenschaften/Attribute emailAddress, faxNumber, phoneNumber, postalAddress markieren wir noch die Checkbox Allow null, da nicht jeder alle Informationen zu bieten hat.

Der Klasse Company geben wir jetzt noch die folgenden Eigenschaften/Attribute billingAddress, welche auch leer sein darf (Allow null markieren) und companyName.

Der Klasse Person geben wir jetzt noch die folgenden Eigenschaften/Attribute firstName und lastName. Beides sind Pflichtangaben (auch wenn es den Nutzer ärgern sollte )



Aber wer arbeitet wo?

Die Logik ist fast fertig. Wir müssen Bold nur noch "erklären", daß die Klasse Company eine 0:n-Beziehung zur Klasse Person (0:1-Beziehung) hat. Dazu klicken wir mit der rechten Maustaste wieder auf die Node Logical View und wählen den Menüpunkt New Association aus.



Anschließend stellt uns der Bold UML-Editor die neue Association bereit. Diese benennen wir gleich in "Employment" um.



Mit Hilfe dieser Assoziation können wir jetzt die logische Verbindung zwischen der Klasse Company und der Klasse Person herstellen. Dazu benennen wir das erste "Ende der Assoziation" in "worksFor" (Name) um. Bei Multiplicity wählen wir "0..1" aus und abschließend wählen wir für Class die Klasse "Company" aus. Das sollte uns direkt zu dem zweiten Ende der Beziehung (Assoziation) bringen. Dort tragen wir für den Namen "employs" ein, für Multiplicity den Wert "0..*" und für Class die Klasse "Person". Zusätzlich muss in der Verbindung für Klasse Company sichergestellt werden, daß das Häkchen bei der Checkbox Embed entfernt ist. Dadurch veranlassen wir, daß die Beziehung "Person <--> Company" auf seiten der Klasse Person gespeichert wird.



Hinweis: Es kann immer nur ein Ende einer Beziehung diese Speichern. für n:m-Beziehungen muss eine extra Klasse erstellt werden, welche zu jedem der Enden eine 0/1:n-Beziehung hat.

Damit habe wir die Verbindung zwischen Angestellten einer Firma zur Firma definiert, wie eingangs am UML-Modell (Grafik) beschrieben.

Spätestens jetzt sollte alles mal wieder gespeichert werden!

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat