Verschiedene. Ein Beispiel für die gemeinsame Verwendung von Delphi und Rational Rose

Wenn die Kletterrose der königlichen Schönheit Elf blüht, ist jeder atemberaubend. Wie eine märchenhafte Besessenheit erscheinen die geöffneten Blütenstände in einer wunderschönen Lichtwolke, von weitem schneeweiß und nah mit einer angenehmen Zitronenfrische. Diese dauerhafte Pracht erfreut die ganze Saison über und weckt romantische Gedanken. Die Hand greift nach der Blume, aber nicht um sie zu pflücken, sondern nur um die überirdische Schöpfung zu berühren und den betörenden Duft einzuatmen.

Ein Elf kann nicht ohne Liebe leben, aber es ist auch unmöglich, ihn nicht zu lieben

Kletterrose "Elf" gezüchtet Deutsches Unternehmen Tantau (Serie Nostalgic Roses) im Jahr 2000 und ist eine moderne Gartenrose der Large-Flowered Climber (LCI).

Züchter haben eine Pflanze mit einer exquisiten Kombination aus eleganter Silhouette und sanfter nostalgischer Romantik geschaffen. Hier stimmt der Name selbst mit seinem überein Aussehen, als käme er aus einem Märchenland.

Beschreibung

Der Busch ist kräftig (bis 280 cm hoch, seltener bis 250 cm) und aufrecht. Klettertriebe erreichen manchmal drei Meter.

Blumen - großer Durchmesser bis 14 cm, dicht gefüllt. Jedes Blumenglas fasst überraschenderweise bis zu 57 Blütenblätter. Ihre einzigartige Farbe von edlem Elfenbein an den Rändern geht sanft in ein blasses Grün mit Zitronenstich über. Vielleicht ist das Aroma deshalb originell - zart, leicht fruchtig, betörend und verführerisch.

Unter günstigen Bedingungen wirft während der Massenblüte ein Stiel gleichzeitig bis zu fünf Blüten in einem Schirmblütenstand aus.

Die Blätter sind groß, hellgrün. In der Reflexion des glänzenden Laubs putzt sich die Sonne gerne.

Agrartechnik

  1. Bedingungen. Kletterrose "Elf" braucht warme sonnige Plätze. Der Boden sollte fruchtbar und leicht, leicht sauer oder neutral sein. Die Hauptsache ist, dass es die Feuchtigkeit gut speichert. Wie alle Verwandten braucht sie regelmäßige Fütterung (z. B. Pferdemist) und einen Unterschlupf für den Winter.
  2. Landung. Im Frühjahr wird der Sämling vor dem Pflanzen einen Tag lang in Wasser eingeweicht. Während dieser Zeit hat das Wurzelsystem Zeit, Feuchtigkeit aufzunehmen. Dann werden die schwachen Triebe der Pflanze abgeschnitten und das starke Accutane bleibt übrig. Beschädigte und lange Wurzeln werden geschnitten.
  3. Nachhaltigkeit. Sorte "Elf" ist ziemlich frostbeständig und schafft es sogar, Laub zu behalten. Bei sehr niedrigen Temperaturen ist jedoch ein Einfrieren möglich. Leidet nicht an echtem Mehltau und schwarzem Fleck. Aber die Blumen mögen keinen Regen und keine Beschattung.
  4. Die Unterstützung. Wenn die Rose entlang einer dünnen, unauffälligen Stütze geführt wird, erzeugen kräftige Seitentriebe das Bild eines hoch aufragenden Baums mit vielen prächtigen Knospen.

"Elf" sieht in einem romantischen Garten in Form von Bögen perfekt aus, schmückt Wände und Pavillons. Zitronencremige Kaskaden beugen sich malerisch unter dem Gewicht großer Blumen, deren Blütenblätter von einem erfahrenen "Meister" geschnitzt wurden. Diese Rose ist etwas für Verliebte und Stilbewusste. Und wenn Sie an ihrem Fuß Eisenkraut, Katzenminze und Lavendel pflanzen, werden ihre durchbrochenen Blätter und luftigen, üppigen Blütenstände die Schönheit einer Kletterrose wunderschön umrahmen und ergänzen.

Eine Pflanze in üppiger Blüte, wie fabelhafte Elfenfrauen, sind voller lebendiger Emotionen. Rose "Elf" kann wandelbar und kapriziös sein, gleichzeitig ist sie voller Charme, der Fähigkeit, die Welt mit ihrer Schönheit zu verzaubern und zu verändern. Der Fabelbusch bringt nostalgische Noten in unseren Alltag und ist so schön.

Gärtner auf der ganzen Welt lieben Rosen und züchten sie in einer Vielzahl von Klimazonen.Eine Art Revolution in der Welt der Rosen wurde durch das Aufkommen einer neuen Gartengruppe von Buschrosen ausgelöst - Strauchrosen. Obwohl bei unseren Verhältnissen fast alle noch einen Winterschutz benötigen, sind heute Strauchrosen am vielseitigsten und unprätentiösesten.

Sträucher schrubben

Narben sind sehr vielfältig. Dies sind wilde Arten und ihre Hybriden sowie moderne Rosen komplexer Herkunft, deren Blüten den Blüten von Hybrid-Teerosen und Rosen der Beetrose ähneln.

Rosa Rugosa und ihre Hybriden

Eine der wertvollsten Parkrosen ist die Faltige Rose oder Rugosa-Rose, auch Japanische Rose genannt. Die ursprüngliche Art ist in unserem Land in den Regionen des Fernen Ostens sowie in Nordchina, Korea und Japan verbreitet. Es gibt sie in zwei Formen: eine mit weißen Blüten, die andere mit dunkelrosa oder rot.

Blüten 5 bis 10 cm im Durchmesser, stark duftend, in Blütenständen von 3-6 Blüten oder einzeln. Die Blüten der Hybridsorten von Rugosa sind weiß bis dunkelrot, es gibt auch gelbe, sie unterscheiden sich auch in Größe und Doppeltheit. Die Blätter sind groß, hart und faltig. Die Triebe sind dicht mit Dornen und Borsten besetzt. Die Büsche sind breit, dicht, erreichen eine Höhe von 1-2 m, geben kräftige Triebe mit aufrechten Trieben. Das Wurzelsystem ist mächtig, oberflächlich. Die Blüte ist reichlich, ab Ende Mai lang, in schwächerer Form kann sie wiederholt werden. Aufgrund dieser Eigenschaft haben die Büsche gleichzeitig Früchte und Blumen. Formen und Sorten mit gefüllten Blüten sind dazu besonders in der Lage, was dekorativ wertvoll ist. Die Früchte sind leuchtend orangerot, groß (2-2,5 cm), sehr dekorativ. Rosa rugosa ist eine sehr winterharte (benötigt keinen Unterstand) und krankheitsresistente Art.

Die meisten Rugosa-Hybriden benötigen auch keinen Unterschlupf für den Winter. Aber einige Sorten) unterscheiden sich nicht in der Winterhärte. Ihre blütentragenden Triebe erscheinen an den überwinterten Obertrieben des Vorjahres. Ohne Schutz für den Winter oder eine tiefe Schneedecke bleiben nur die unteren Knospen erhalten, die nicht in der Lage sind, zu blühen. Es ist nicht einfach, kräftige und dicke Triebe zu Boden zu biegen. Daher ist es notwendig, bei der Auswahl einer Sorte auf die allgemeine Widerstandsfähigkeit, Vielfalt und Fülle der Blüte und Krankheitsresistenz zu achten.

Rosa rugosa und ihre Hybriden werden für kleine Gruppen- und Einzelpflanzungen, Hecken verwendet. Diese Rosen eignen sich hervorragend als Hecken, insbesondere solche, die das Grundstück in separate Teile unterteilen. Die Früchte eignen sich zur Herstellung von Marmeladen und Kompotten.

Moyesi-Rosenhybriden

Das Verbreitungsgebiet des Vorfahren dieser Gruppe ist Westchina. Hybriden werden durch Kreuzung der ursprünglichen Art mit Rosen verschiedener Gruppen erhalten. Die Blüten sind rot, rosa, mittelgroß (5-6 cm), nicht gefüllt oder halbgefüllt, in Blütenständen. Blätter bestehen aus 7-13 ovalen Blättchen. Die Büsche sind hoch - bis zu 2-2,5 m, weitläufig, mit rotbraunen Trieben. Die Blüte ist ab Juni reichlich, die wiederholte Blüte ist schwächer. Die Früchte sind flaschenförmig, groß (5 cm lang), dunkelorangerot. Moyesi-Rosenhybriden sind dekorativ für die Landschaftsgärtnerei. Sie brauchen leichte Deckung, ohne die Triebe zu Boden zu biegen.

Cordes-Rosen-Hybriden

Diese Rosen wurden nach ihrem Autor, dem berühmten deutschen Urheber V. Kordes, benannt. Die meisten dieser Rosen werden aus der Sorte Max Graf (eine spontane Hybride aus Faltiger Rose und Rose Wihura) gewonnen. Als Ergebnis ihrer Kreuzungen mit Sorten aus anderen Gruppen wurde eine Sortengruppe von Cordes-Rose-Hybriden gebildet. Es sollte beachtet werden, dass neue Gartengruppen nicht ohne besonderen Grund geschaffen werden und Kordes-Rosen für ihre Widerstandsfähigkeit in Kombination mit Attraktivität so geehrt wurden.

Ziemlich große (7-8 cm Durchmesser) Rosenblüten dieser Gruppe zeichnen sich durch eine Vielzahl von Farben und Formen aus, von halbgefüllt bis dicht gefüllt, manchmal duftend, gesammelt in kleinen Blütenständen. Alle Sorten haben schöne dunkelgrüne, glänzende Blätter. Die Sträucher sind starkwüchsig (1,5-2 m), oft mit peitschenartigen Trieben. Die Blüte ist reichlich von Juni bis in den Spätherbst. Die Früchte sind eiförmig. Alle Sorten sind recht winterhart und krankheitsresistent. Trotzdem benötigen sie unter den Bedingungen Zentralrusslands Schutz für den Winter. Sie können sogar im Halbschatten angebaut werden.
Diese Rosengruppe wird in Gruppen- und Einzelpflanzungen für die vertikale Gartenarbeit verwendet. Sie können Pavillons, Terrassen, Pergolen, Bögen, spezielle Gitter und andere Stützen dekorieren, um den Gartenraum zu unterteilen, Erholungsgebiete zu schaffen und Nebengebäude zu dekorieren.

Diese Rosen können sich nicht um eine Stütze wickeln, daher müssen sie daran gebunden werden und sich ab dem frühen Frühling nach dem Beschneiden bilden, damit sie sofort in die richtige Richtung wachsen. Während der gesamten Vegetationsperiode werden die Hauptzweige entlang der Stütze geführt und sorgfältig daran gebunden.

Sträucher

Zu den Shrabs (sie werden auch moderne Parkrosen genannt) zählen alle Sorten, die nicht getrost in andere Gartengruppen eingeordnet werden können.

  • Wirkungsvoller Auftritt. Die Blüte ist reichlich, lang (von Juni bis Herbst) und wiederholt sich. Fast alle Sorten blühen wieder, aber es gibt einfach blühende Sorten.
  • Aroma. Unter Peelings gibt es mehr duftende Rosen als unter Hybrid-Teerosen.
  • Volumen. Viele Sorten zeichnen sich durch Kraft und Wuchsstärke aus (Reichweite 2 m). Die Sträucher einiger Sorten sind so anmutig, dass ihre biegsamen Zweige wenig Halt benötigen, der bald mit Blüten bedeckt ist.
  • Krankheitsresistenz und hohe Winterhärte.

Für den Winter benötigen sie nur leichten Schutz.

  • Anspruchslosigkeit. Jeder Gärtner kann ein Gestrüpp anbauen.
  • Weit verbreitet im Landschaftsbau.
  • Sträucher können sowohl in Einzelpflanzungen als auch in kleinen Gruppen (jeweils 3-5 Sträucher) angebaut werden.

Das Pflanzen in kleinen Gruppen wirkt wie ein großer blühender Rosenball, alle Unregelmäßigkeiten eines Busches werden von benachbarten verdeckt. Der Abstand zwischen den Sträuchern kann je nach Breite der Sträucher 50 cm bis über 2 m betragen. Unmöglich zu geben allgemeine Empfehlung auf das Pflanzen von Shrabs, weil sie in der Größe des Busches sehr unterschiedlich sind. Im Durchschnitt werden 2 bis 3 Büsche pro 1 m2 gepflanzt. Bei großen Strauchrosen ist manchmal der kahle Teil des Busches sichtbar und kann dann von vor ihnen befindlichen zu kleinen Rosen verdeckt werden.

Ein schöner einzelner Busch auf dem Rasen sieht beeindruckend aus. Für die Rolle des "Solisten" wählen sie eine Pflanze mit schöner Buschform und üppiger Blüte, mit einem angenehmen Aroma. Sie können es überall pflanzen: am Hauseingang, auf dem Rasen, in der Mitte des Blumenbeets. Für Einzelpflanzungen eignen sich viele Strauchrosen, sowohl alte als auch moderne. Die Hauptsache ist, dass die Anlage in Harmonie mit der umgebenden Landschaft steht.

Nostalgische Peelings

Auch die sogenannten Englischen Rosen, kreiert von dem Briten David Austin, gehören zur Gruppe der Gestrüpp. Seit vielen Jahren arbeitet dieser Züchter an einem Programm zur Züchtung von Rosen, die alten Sorten ähneln, aber mit moderner Blütenfarbe und der Fähigkeit, wieder aufzublühen. Englische Rosen werden durch Kreuzung von französischen, Damaszener-, Bourbon- und anderen Rosen mit modernen Sorten von Hybrid-Teerosen und Beetrosen gewonnen. Roses D. Austin erschien im letzten Viertel des zwanzigsten Jahrhunderts. Ihre Blüten sind dicht gefüllt, in einer Vielzahl von Farben: blass apricot, tief gelb, dunkel rot, pfingstrosenförmig, sehr duftend und sehen nostalgisch altmodisch aus. Die Büsche sind kompakt, gut in Form und blühen wieder. Viele Sorten sind krankheitsresistent. Das Verdienst von D. Austin ist, dass er der Welt wieder die Liebe zu den alten Formen der Blume eingeflößt hat ( lange Zeit Kelchrosen des Tee-Hybridtyps galten als ideal) sowie der volumetrischen Struktur des Busches.

Die beliebtesten Sorten dieser Gruppe sind Abraham Darby, Graham Thomas. Größtenteils dank englischer Rosen erfuhren Gärtner von der Scrub-Gruppe. Das Klima der Mittelzone ist für sie etwas rau. Daher müssen ihre Triebe für den Winter sorgfältig abgedeckt werden.

Rosen der französischen Firma Meilland aus der Romantica-Serie zeichnen sich auch durch ihre Widerstandsfähigkeit, reichlich wiederholte Blüte, eine Vielzahl von Farbtönen, gewellte Blütenblätter und den Charme alter Rosen aus. Zwar gehören nur wenige Sorten aus dieser Gruppe zur Scrub-Gruppe, zum Beispiel Collette, Les Quatre Saisons, Yellow Romantika, Lovely Meilland. Alle Sorten unterscheiden sich nicht nur in Schönheit und Antikoptik, sondern auch in der Nachhaltigkeit. Sie sind der Traum eines jeden romantischen Gartens. Auch das deutsche Unternehmen Rosen Tantau züchtet seit vielen Jahren moderne Nostalgierosen. Alle Sorten werden auf Krankheitsresistenz und Frostresistenz in rauem Klima getestet. Neue Sorten nostalgischer Strauchrosen: Belvedere, First Lady, Gartentraume, Grafin von Hardenberg, Mariatherese, Pasella.

Rosen der Serie Canadian Explorer Roses (Charles Albanel, David Thompson, Henry Hudson, Jens Munk, Martin Frobicher), benannt nach prominenten kanadischen Entdeckern, zeichnen sich vor allem durch eine hohe Winterhärte aus. Rose Cordesia und Rose Rugosa waren am Ursprung vieler Sorten dieser Serie beteiligt.

Merkmale der Pflege

Unterschlupf für den Winter

Obwohl die Winterhärte moderner Strauchrosen höher ist als die von Hybrid-Tee- und Beetrosen, müssen sie für den Winter abgedeckt werden, und der Unterstand selbst kann aufgrund des Volumens der Sträucher schwieriger sein.
Nachblühende Strauchrosen-Sträucher können während der Vegetationsperiode eine Höhe von 1,5 m oder mehr erreichen. Ende Oktober erfolgt der Herbstschnitt - um 1/3 der Trieblänge.

Hohe Shrab-Triebe sollten versucht werden, sich zum Boden zu beugen. Büsche können auf einer Seite ausgegraben und abgelegt und am Boden festgesteckt werden. Gebogene Äste werden auf eine Lage Fichtenzweige gelegt, sonst können Rosen in der aufgetauten Erde unter Dach verfaulen. Von oben sind sie auch mit Fichtenzweigen oder Dämmmaterial bedeckt. Um das Isoliermaterial oben zu befestigen, können Sie die Erde verwenden.

Eine starke Schneedecke kann ein zuverlässiger Schutz für Büsche sein, die die Härtungsstadien normal durchlaufen haben. Unter einer Schneeschicht von 50-70 cm sinkt die Temperatur nicht unter 4-5 ° unter Null, wenn die Außentemperatur 25-30 ° C beträgt. Da jedoch der Zeitpunkt des Schneefalls und die Dicke der Schneedecke nicht konstant sind , müssen zusätzliche Schutzmethoden angewendet werden: Fichtenzweige, Eichenlaub, Vliesstoff.

Beschneidung

Sträucher haben ein starkes Volumenwachstum und erfordern wenig Schnitt. Diese Rosen haben Angst vor starkem und sogar mittlerem Schnitt. Schlafende Knospen wachen länger auf als beispielsweise Teerosen-Hybriden. Bei einem kurzen Sommer, der außerdem nicht immer warm genug ist, wird diese Funktion unerlässlich. Bei langem Rückschnitt ist die Blüte üppiger, da sich die Triebe der 2. Ordnung aus den oberen Knospen intensiver entwickeln.

3-5 der stärksten neuen Basaltriebe bleiben an den Büschen übrig, und 6-8 oder mehr gut entwickelte Knospen verbleiben darauf. Das Ziel des jährlichen Rückschnitts ist es, die Triebe um ein Viertel oder die Hälfte, Seitentriebe um zwei Drittel zu kürzen. Wenn die Triebhöhe 120 cm erreicht, kürzen Sie sie um 30-40 cm, wenn die Länge des Seitentriebs 30 cm beträgt, kürzen Sie sie um 10 cm. Es ist notwendig, ausreichend starke Triebe mit gleichmäßigem Abstand zu lassen.

Rational Software ist seit mehreren Jahren führend bei Design-, Entwicklungs-, Test- und Wartungstools. Software. Das Hauptprodukt der Rational-Reihe ist das Tool Rational Rose CASE. Rational Rose unterstützt visuelles objektorientiertes Modellieren (UML), unterstützt Codegenerierung und Reverse Engineering (Erstellen eines Modells aus Programmcode) für viele Programmiersprachen, ermöglicht Ihnen, ein Objektmodell eines entwickelten Softwaresystems zu erstellen, Spezifikationen für Klassen und Objekte zu definieren , Attribute und Operationen (weitere Einzelheiten siehe . "Programmer" Nr. 2, 3, 5/6 für 2001).

Da Rational Rose über alle notwendigen Eigenschaften verfügt, um die Architektur eines Systems beliebiger Größenordnung zu entwerfen, entsteht die Idee, Rose mit einem so leistungsfähigen und beliebten Programmiersystem wie Delphi zu verwenden. Rational Rose wird nicht standardmäßig mit Delphi geliefert, aber Rational Software unterhält ein Programm zur Unterstützung von Bridges (Links) von Drittanbietern zwischen Rose und anderen Entwicklungstools. Als Teil dieses Programms hat Ensemble Systems das Bridge-Programm Rose Delphi Link (RDL) entwickelt, das Rational Rose und Delphi verbindet. Die Hauptfunktionen von RDL sind Codegenerierung und Reverse Engineering. Zu beachten ist, dass der generierte RDL-Code nicht die Implementierung der Funktionalität enthält! Es werden nur deklarative Elemente generiert: Definitionen von Klassen, Schnittstellen, Datensätzen, Typen, Sichtbarkeitsanweisungen usw.


Abbildung 1. RDL-Menüelement

Bevor ich mit der Betrachtung von Rose Delphi Link fortfahre, möchte ich Sie an die Hauptphasen der Arbeit in der Rational Rose-Umgebung erinnern. Typischerweise wird der folgende Ansatz verwendet:

  1. Ermitteln der Anforderungen an das System und Aufbau eines Modells für das Zusammenspiel der Systemelemente (Use Case Diagram und Collaboration Diagram). Verwenden Sie das Sequenzdiagramm, um den Anwendungsfall aufzuschlüsseln. Diese Diagramme zeigen die an Geschäftsprozessen beteiligten Domänenobjekte an. Diese Diagramme wirken sich nicht auf den generierten Code aus.
  2. Erstellen eines Hardwaremodells des Systems (Bereitstellungsdiagramm). Dieses Diagramm zeigt das Systemmodell in Hardwareimplementierung. Das Diagramm wirkt sich nicht auf den von RDL generierten Code aus.
  3. Entwicklung Objektmodell Systeme (Definition von Klassen, deren Interaktionen, Attribute, Operationen). Parallel zur Entwicklung eines Klassendiagramms wird in der Regel ein Komponentendiagramm entwickelt, das das Zusammenspiel von im System verwendeten Dateien, Modulen, zusätzlichen Bibliotheken darstellt. Das Komponentendiagramm hat auch keinen Einfluss auf die Codegenerierung.
  4. Generierung von Programmcode.
    Die Codegenerierung wird nur von Klassendiagrammen beeinflusst, daher betrachten wir in diesem Artikel nur Diagramme des Abschnitts „Logische Ansicht“. Merkmale zum Konstruieren anderer Diagramme werden weggelassen. Diese Entwurfsschritte in der Rational Rose-Umgebung werden verwendet, um das Modell zu entwickeln und Code in den verschiedenen Sprachen zu generieren, die von der Rose-Umgebung unterstützt werden. Aber es gibt eine Funktion in Delphi, die die Entwicklung in Delphi deutlich von der Entwicklung in anderen Programmierumgebungen unterscheidet: Programmierung Benutzeroberfläche. Es ist kein Geheimnis, dass in Delphi die Entwicklung der meisten Programme mit dem Design der Benutzeroberfläche beginnt und mit der weiteren Programmierung - ihrer signifikanten Veränderung. Daher ist die Verwendung des Standardansatzes von Rational Rose nicht sehr praktisch. Um dieses Problem zu lösen, bietet Ensemble Systems die folgende Designmethodik an:


Abbildung 2. Entwurfsmethodik mit RDL

Die Hauptidee dieses Ansatzes ist die Verwendung von Reverse Engineering (Round-Trip-Engineering): Alle Änderungen, die auf der Ebene vorgenommen werden Programmcode in Delphi spiegeln sich im in Rose eingebauten Objektmodell wider und umgekehrt, wenn Klassen, Methoden usw. geändert werden. im Rose-Objektmodell wird der Programmcode entsprechend angepasst. Achten Sie auf das Pfeilpaar, das den dritten und vierten Block verbindet. Es sind diese Pfeile, die den Prozess des Reverse Engineering darstellen.
Betrachten Sie das Hauptfenster von Rose Delphi Link (Abb. 3). Die Schnittstelle ist recht einfach, sie enthält:

  • ein Menü mit Befehlen zum Arbeiten mit dem Projekt, zum Einstellen von Optionen und zum Aufrufen von Hilfe;
  • Tafeln, die hierarchische Strukturen von Rose- und Delphi-Modellen in Form von Bäumen darstellen;
  • Schaltfläche zum Aktualisieren von Objektbäumen, Schaltflächen für Reverse Engineering (Update All) und Forward Engineering, d.h. Codegenerierung (Update All->).


Abbildung 3. Hauptfenster von Rose Delphi Link

Das RDL-Hauptfenster ist ein untergeordnetes Element des Rational Rose-Hauptfensters und befindet sich über diesem Fenster, minimiert wie ein untergeordnetes Fenster, was zweifellos sehr praktisch ist.
Vor der Demontage konkretes Beispiel, werfen wir einen genaueren Blick auf die Menüpunkte von Rose Delphi Link.
Datei -> Projekt öffnen – wird verwendet, um das erstellte Delphi-Projekt in RDL zu öffnen. Beim Öffnen eines Projekts werden die Objektbäume des geöffneten Projekts im RDL-Fenster angezeigt.
Datei -> Neues Projekt - Wenn Sie diesen Menüpunkt auswählen, bietet RDL an, ein leeres Delphi-Projekt zu erstellen. Die in diesem Fall erstellte Projektdatei enthält nur die deklarativen Elemente, die für ein minimales Delphi-Programm benötigt werden (Programm, Anfang, Ende). Ein neues Projekt sollte erstellt werden, wenn das Programm keine grafische Benutzeroberfläche enthält, z. B. eine dynamische Bibliothek. Richtig, in diesem Fall muss eine Anpassung am generierten Code vorgenommen werden - Programm durch Bibliothek ersetzen. Über das Kontextmenü können Sie Module (Unit) und weitere Verzeichnisse für Module anlegen. Auch so erstellte Module enthalten nur eine minimale Implementierung (Uses, Interface, Implementation, End). Nachdem das Modul erstellt wurde, wird während der nachfolgenden Codegenerierung eine neue Moduldeklaration zum uses-Abschnitt der Projektdatei hinzugefügt.
Die Menüpunkte Ansicht und Hilfe sind Standard und müssen in diesem Artikel nicht beschrieben werden.

Jetzt werden wir die obige Entwurfsmethodik verwenden und ein Programm und ein entsprechendes Rose-Modell entwickeln. Nehmen wir zum Beispiel ein Programm, das zwei numerische Arrays der Größe 5 mal 5 füllt zufällige Zahlen, sowie einige zu realisieren mathematische Funktionen für ihre Bearbeitung. Das Programm muss folgende Funktionen ausführen:

  • Füllen Sie Arrays mit Zufallszahlen von 1 bis 10;
  • Berechnen Sie die Summe der Elemente jedes Arrays;
  • Bestimmen Sie das arithmetische Mittel der Elemente;
  • Arrays löschen (mit Nullen initialisieren).

Beginnen wir mit der Entwicklung einer Benutzeroberfläche in Delphi. Durch einfache Aktionen mit der Maus habe ich ein solches Programm bekommen, das noch keine Aktionen ausführt (Abb. 4).


Abbildung 4. Schnittstelle des entwickelten Programms

Lassen Sie uns dieses Projekt mit den Standardmodulnamen von Delphi speichern, ein neues Rational Rose-Projekt öffnen und Delphi Rose Link starten. Wählen Sie den Menüpunkt Projekt öffnen und öffnen Sie das soeben gespeicherte Projekt in Delphi. Die Objektbäume des Rose-Modells und des Delphi-Projekts werden im RDL-Fenster angezeigt (Abb. 5).


Abbildung 5. In RDL geöffnetes Delphi-Projekt

Der linke Objektbaum sind die Objekte des Rose-Modells, der rechte Baum sind die im Delphi-Quellcode deklarierten Objekte. Beachten Sie die roten Ausrufezeichen links neben den Symbolen, die Objekte darstellen. Sie zeigen die Unterschiede zwischen dem Delphi-Code und dem Rose-Modell auf. Jetzt werden alle Icons überprüft, da das Modell noch gar nicht in Rose existiert.
Der nächste Schritt besteht darin, das Rose-Modell aus dem Quellcode zu generieren. Um mit der Generierung zu beginnen, müssen Sie auf die Schaltfläche Alle aktualisieren klicken. Wenn die Generierung erfolgreich ist, verschwinden die Ausrufezeichen an den Objekten, was bedeutet, dass das Rose-Modell für jedes Objekt dem Delphi-Quellcode entspricht. Um den Verlauf der generierten Meldungen anzuzeigen, wählen Sie den Menüpunkt Ansicht -> Meldungen. Das sich öffnende Fenster zeigt ein ziemlich detailliertes Protokoll der RDL-Meldungen, die während der Modell- oder Quellcodegenerierung ausgegeben werden.
Reduzieren Sie den Rose Delphi Link und wählen Sie den Logical View-Zweig im Rose Object Browser. Wir sehen zwei Pakete, die erscheinen:<>Unit1, das das Code-Objektmodell aus dem Modul Unit1.pas enthält, und External References, das Delphi-Objekte enthält, die in Modulen außerhalb des aktuellen Projekts deklariert sind (VCL-Bibliotheksobjekte).
Öffnen wir nun das Klassendiagramm, das dem Unit1-Modul in der Rose-Umgebung entspricht (Logical View -> Unit1 -> Overview). In seiner ursprünglichen Form zeigt das Diagramm ein leicht verwirrendes Objektmodell, das wir durch eine sorgfältige Anordnung der Objekte entsprechend ihrer Hierarchie in Ordnung bringen werden (Abb. 6).


Abbildung 6. Objektmodell des Unit1-Moduls

Wenn die Schnittstelle des entwickelten Programms recht komplex ist und mehr als ein Dutzend Elemente umfasst, erweist sich das Objektmodell als etwas überladen. Um das Modell zu entladen, können Sie einige nicht wesentliche Elemente aus dem Modell entfernen. Sie brauchen nur Elemente aus dem Diagramm zu entfernen, da sie in diesem Fall nur optisch entfernt werden. Beim Löschen aus dem Browser werden Objekte dauerhaft gelöscht, was eine Änderung des generierten RDL-Codes zur Folge hat.
Kommen wir nun zum nächsten Schritt: Entwicklung eines Objektmodells, das die oben angegebene Programmfunktionalität implementiert. Wir werden Klassen, ihre Attribute und Methoden in einem separaten Modul implementieren, im Hauptmodul werden wir Instanzen von Klassen erstellen und in den Button-Click-Event-Handler werden wir Aufrufe an die Methoden dieser Klassen schreiben.

Lassen Sie uns ein neues Modul erstellen. Dies kann in Delphi, in Rose und in RDL erfolgen, aber für die Reinheit des Experiments werden wir alles nur in RDL erstellen. Aktivieren Sie in Rose das RDL-Fenster und klicken Sie mit der rechten Maustaste auf das Wurzelelement im Objektbaum des Rose-Modells – in unserem Fall ist es Model1.mdl. BEI Kontextmenü Wählen Sie Neu -> Einheit. Das Fenster des Komponenteneditors wird geöffnet (Abbildung 7). Auf der Registerkarte Allgemein wird der Name des Moduls (Unit2) angezeigt und ein Kommentar zum zu erstellenden Modul, der bei der Codegenerierung als Kommentar in das Modul eingefügt wird. Auf der Registerkarte Detail wird der Typ (Art) der Komponente und der Pfad zur Quelldatei angezeigt. Auf der Registerkarte Codevorschau können Sie den Code sehen, der von RDL für dieses Modul generiert wird. Durch Deaktivieren des Schalters „Code-/Modellaktualisierungen zulassen“ werden die Codegenerierung und Modellaktualisierungen für das ausgewählte Element deaktiviert.


Abbildung 7. Komponenteneditor

Nach dem Drücken der Schaltfläche Ok sehen wir, dass im RDL-Fenster ein Symbol angezeigt wird, das auf ein neues Modul hinweist, und daneben Ausrufezeichen, was darauf hinweist, dass das Rose-Modell und der Delphi-Code nicht synchron sind. Aktualisieren Sie den Delphi-Code, indem Sie auf die Schaltfläche Alle aktualisieren -> klicken. Jetzt müssen wir zu Delphi wechseln. Wir sehen eine Fensterwarnung, dass das Modul geändert wurde (Abb. 8). Um das aktualisierte Modul herunterzuladen, klicken Sie auf Ok.


Abbildung 8. Delphi-Meldung zur Änderung der Projektdatei

Öffnen wir nun das Modul Unit2.pas, das wir gerade generiert haben. Sie können sich vergewissern, dass die Codegenerierung erfolgreich war – alle notwendigen Schlüsselwörter sind deklariert, ein Kommentar wird eingefügt. Der nächste Schritt besteht darin, die Klassen und ihre Methoden in diesem Modul zu modellieren. Gehen wir zu Rose und aktivieren das RDL-Fenster. Zeigen Sie im Objektbaum das Kontextmenü auf dem Objekt Unit2 an und wählen Sie Neu -> Klasse. Das Klasseneditorfenster wird angezeigt (Abbildung 9). Auf der Registerkarte Allgemein müssen Sie den Klassennamen (Name), die Ansicht (Kind), die Sichtbarkeit (Visibility) und einen Kommentar zur Klasse (Documentation) angeben. In unserem Fall heißt die Klasse TMassiv, der Gültigkeitsbereich dafür ist Public.


Abbildung 9. Klasseneditor

Um alle Methoden und Attribute der Klasse anzulegen, verwenden wir den Menüpunkt Neu im Kontextmenü der Klasse im RDL-Objektbaum. Die Attribut- und Methodeneditoren sind im Grunde die gleichen wie der Klasseneditor, daher werden wir die Erstellungsdetails weglassen. Lassen Sie uns die folgenden Attribute und Methoden erstellen (alle Methoden mit Sichtbarkeitsdirektiven sind Public, Attribut M hat die Sichtbarkeit Private):
M: Array von Integer; Prozedur Init; // Array-Initialisierungsprozedur FillArray; // Füllen des Arrays mit Zufallszahlen procedure CalcSum; // Berechnung der Summe der Array-Elemente procedure CalcSr; // Berechne den Durchschnittswert der Array-Elemente function GetElement(X, Y: integer): Integer; // Abrufen eines Array-Elements (x,y) Lassen Sie uns auch eine Methode für die Klasse TForm1 erstellen, die die TMemo-Komponenten auf dem Formular mit Elementen aus Arrays füllt:

GetProcedureArray;

Es gibt eine Besonderheit beim Erstellen von Methoden mit Parametern. Zuerst wird die Methode wie gewohnt angelegt, dann wird im RDL-Objektbaum im Kontextmenü auf der Methode, für die ein Parameter angegeben werden soll, der Punkt Neu -> Parameter ausgewählt und der Parametername, its Art und Kommentar dazu werden angezeigt. Achten Sie nach dem Anlegen der Klasse auf das Klassendiagramm für das Modul Unit2 in Rose – unsere Klasse wird gemäß der UML-Spezifikation angezeigt (Abb. 10).


Abbildung 10. Klassendiagramm mit der erstellten Klasse

Die Klasse wurde also bisher ohne Implementierung erstellt bzw. ihre Hülle. Jetzt werden wir im Hauptmodul Unit1 zwei Instanzen dieser Klasse erstellen. Deklarieren wir sie als M1 und M2 im Abschnitt Public der Klasse TForm1. Dies erfolgt durch Auswahl der notwendigen Einträge im Kontextmenü des Objektbaums und Angabe der Parameter im Attribut-Editor. Das modifizierte Diagramm, in dem die deklarierten Instanzen der Klasse in der Klasse TForm1 gezeigt werden, ist in Abb. 2 dargestellt. elf.


Abbildung 11. Im öffentlichen Abschnitt der Klasse TForm1 deklarierte Klasseninstanzen

Das Modell ist also gebaut, und jetzt müssen wir den endgültigen Code generieren. Klicken Sie im RDL-Fenster auf Aktualisieren, Alle aktualisieren -> und wechseln Sie zur Delphi-Umgebung. Jetzt müssen wir den Code schreiben, der die Funktionalität implementiert, und das Programm kompilieren. Wenn Sie Methoden mit Code füllen, müssen Sie manchmal lokale oder globale Variablen hinzufügen. Dies kann in RDL erfolgen, aber es ist besser, diese Variablen im Code zu implementieren und dann das Rose-Modell aus dem Delphi-Quellcode zu aktualisieren (Update All). Wenn einige Elemente im Modell gelöscht wurden und sie bereits im Code implementiert sind, wird dieser Code zwischen den Compiler-Direktiven ($IFDEF DELETED) und ($ENDIF) eingeschlossen. Nachdem wir den gesamten Quellcode in Delphi implementiert haben, kehren wir zu RDL zurück und führen ein erneutes Reverse Engineering durch, indem wir auf Refresh and Update All klicken. Die Klasse TForm1 hat sich geändert - Methoden sind darin erschienen - Event-Handler für Schaltflächen (Abb. 12). In unserem Fall ist dies die endgültige Version des Klassendiagramms und des gesamten Modells als Ganzes.


Abbildung 12. Endgültiges Klassendiagramm für das Unit1-Modul

Finale Quelle Programme und das eingebaute Rose-Modell können .

In diesem Beispiel haben wir die vom Rose Delphi Link-Entwickler vorgeschlagene Anwendungsentwicklungsmethodik befolgt und als Ergebnis ein Objektmodell des Systems erhalten. Alle Klassen und Diagramme, die die Systemaktivität beschreiben, wurden in Rational Rose mit dem Programm Rose Delphi Link entworfen. Lassen Sie uns also die Hauptvorteile der gemeinsamen Verwendung von RDL und Rational Rose hervorheben:

  • schnell und bequeme Erstellung Prototyp der Benutzeroberfläche;
  • die Fähigkeit, ein detailliertes Modell von Schnittstellenklassen zu erhalten und auf seiner Grundlage die grundlegenden architektonischen Merkmale des Systems hervorzuheben;
  • die Fähigkeit, Klassen mit funktionalen Anforderungen für das System abzugleichen;
  • die Möglichkeit, Steuerklassen in Rational Rose-Modellen mit anschließender Codegenerierung in Delphi zu erstellen;
  • volle Unterstützung Lebenszyklus Softwaresystem in der Entwicklung, wenn Sie andere Rational-Produkte verwenden.

Dadurch wird sichergestellt, dass das Rose-Modell und der Delphi-Code mit einem regelmäßigen Abgleich auf der Grundlage der Reverse-Engineering-Technologie konsistent sind, wodurch der Entwickler sicherstellen kann, dass sich die architektonischen Lösungen nicht wesentlich geändert haben, und auch über aktuelle dokumentierte Modelle verfügt, die die widerspiegeln aktueller Entwicklungsstand des Projekts.

Literatur:

  1. Vendrov A.M. Entwicklung von Software für Wirtschaftsinformationssysteme. - M.: Finanzen und Statistik, 2000
  2. Trofimov S.A. CASE-Technologien: praktische Arbeit in Rational Rose - "BINOM Publishing", 2001
  3. Butch G., Rambo D., Jacobson A. UML-Sprache. Bedienungsanleitung: Pro. aus dem Englischen. - M.

Derzeit Delphi ist eines der beliebtesten Softwareprodukte zur Erstellung von Informationssystemen. Auf seiner Grundlage werden sowohl kleine Programme als auch Systeme im Unternehmensmaßstab erstellt. Warum ist dieses Produkt aus Entwicklersicht so attraktiv? Zunächst einmal ist das natürlich eine tolle visuelle Programmierumgebung - verständlich, leicht zu erlernen und erfordert oft nicht das Wissen eines professionellen Entwicklers (das sich ja bekanntlich über viele Jahre und Jahrzehnte nach und nach ansammelt und unglaublich teuer). In der Delphi-Umgebung können Sie ziemlich komplexe Softwaresysteme fast von Grund auf neu erstellen, indem Sie ein Minimum an Code schreiben. Gleichzeitig die Sprache Objekt Pascal, auf dem das Programm geschrieben ist, ist vielen (zumindest in unserem Land) bekannt und wird derzeit in Juniorkursen an den meisten inländischen technischen Universitäten studiert.

Allerdings ist nicht alles so einfach. Wenn klein zu erstellen Softwaresysteme für den eigenen Bedarf kann man sich auf die visuelle Programmierumgebung beschränken, dann ist für die Erstellung von Software, die ausreichend kritisch für die Qualität von Software (SW) ist, ein grundlegend anderer Ansatz erforderlich, zumindest unter Verwendung eines Lebenszyklusmodells bei der Entwicklung AN, mit allen sich daraus ergebenden Anforderungen zur Dokumentation des Prozesses.

Wesentlich für Systeme dieser Klasse ist das Vorhandensein einer Grundarchitektur, die über den gesamten Lebenszyklus der Entwicklung und des Betriebs des Systems unverändert bleibt und deren Hauptelemente in den frühen Stadien des Designs festgelegt werden. Die grundlegende Architektur wird normalerweise unter Verwendung einer Reihe von Modellen erstellt, die die Hauptpunkte in Bezug auf die Struktur des Systems und seine Funktionen widerspiegeln. Entschuldigung, Mittwoch Delphi nicht auf solche Probleme anwendbar.

Aber zurück zu den Vorteilen von Delphi. Wenn wir die visuelle Programmierumgebung verwerfen, was bleibt dann? Objektmodell. Und dieser Vorteil von Delphi ist aus Sicht des Systemdesigners attraktiv. Es ist das Objektmodell (egal wie seltsam es jemandem erscheinen mag), das maßgeblich den Erfolg der visuellen Programmierumgebung bestimmt. Das Delphi-Objektmodell deckt eine breite Palette von Aufgaben ab und bietet hochrangige, aber äußerst flexible, fast uneingeschränkte Werkzeuge zum Organisieren der Benutzeroberfläche, zum Verwalten von Betriebssystemressourcen, zum Bearbeiten von Datenbanken, zum Unterstützen offener Systemstandards sowie zum Unterstützen gängiger Technologien (einschließlich CORBA und KOM), Schichtarchitektur und schließlich Internet-Intranet- Technologie.

Die Basisarchitektur kann Elemente des Delphi-Objektmodells verwenden (warum alle oben genannten neu erstellen) und es mit den erforderlichen Komponenten ergänzen, die die Anwendungsspezifika eines bestimmten Systems widerspiegeln.

Wir verwenden Produkte für das Systemdesign Rationale Rose Firmen Rational Software Corp.Orientierung. Dieses Produkt verfügt über alle notwendigen Eigenschaften, um die grundlegende Architektur eines Systems beliebiger Größenordnung zu erstellen. Bei ausreichender Programmiererfahrung im Delphi-Umfeld erscheint uns die gemeinsame Nutzung von Rational Rose und Delphi im Rahmen eines einzigen technologischen Prozesses sinnvoll.

Der Zweck dieses Artikels besteht darin, zu untersuchen, wie Rational Rose und Delphi zusammenarbeiten, und (unserer Meinung nach natürlich) genau aufzuzeigen, wo jedes Produkt in den Entwicklungsprozess passt. Wir hoffen, dass dies den Entwicklern ermöglicht, sich eine Meinung über die Anwendbarkeit einer solchen Technologie für ihre eigenen Bedürfnisse zu bilden und Zeit beim Studium der Details zu sparen.

Was wir von Rational Rose und Delphi erwarten

Die Methodik, der wir bei der Entwicklung folgen AN, ist eine Softwareentwicklungsmethodik Rationeller einheitlicher Prozess Rational Software Corporation. Aus technologischer Sicht umfasst die Methodik die folgenden Phasen (natürlich innerhalb jeder Iteration): Domänenmodellierung, Definition der Systemanforderungen, Analyse und Design, Implementierung (Codierung und Offline-Debugging), Test und Implementierung. Die folgende Tabelle zeigt, was wir mit Rational Rose und Delphi in jeder Phase erreichen möchten.

Verwendung von Rational Rose und Delphi in verschiedenen Phasen der Softwareentwicklung

Bühne Was erwarten wir von Rose? Was erwarten wir von Delphi
Domänenmodellierung Die Modellierung des Fachgebiets erfolgt, das Fachgebiet wird „as is“ beschrieben -
Ermitteln der Systemvoraussetzungen Funktionale Anforderungen an das System, Anforderungen an die Systemschnittstelle werden ermittelt Ein Prototyp der Benutzeroberfläche wird erstellt
Analyse und Gestaltung Die Grundkomponenten der Architektur werden definiert, die Daten modelliert, die Systemkomponenten detailliert entworfen Elemente des Delphi-Objektmodells sind in der Basisarchitektur enthalten. Stellt eine Eins-zu-Eins-Entsprechung zwischen Rose-Klassendiagrammelementen und Delphi-Komponentenelementen bereit
Implementierung Klassendiagramme werden als Softwaremodule implementiert, Komponentendiagramme und Platzierungsdiagramme entwickelt Der Programmcode ist implementiert, eine Eins-zu-eins-Übereinstimmung des Projekts in Rose und Delphi ist vorgesehen. Die Codedokumentation in Delphi spiegelt sich in Rose wider
Testen Die Modelle bleiben nahezu unverändert. Testfälle werden entwickelt, um Systemfunktionen zu testen Änderungen werden am Programmcode vorgenommen. Änderungen im Programmcode werden im Delphi-Code wiedergegeben
Implementierung Platzierungsdiagramme sind die Grundlage für die Softwareimplementierung. Basierend auf den Modellen kann eine aktuelle Dokumentation auf Systemebene abgerufen werden -

Wie Sie der Tabelle entnehmen können, kann die Hauptinteraktion zwischen Rose und Delphi während der Phasen der Definition, Analyse und des Entwurfs und der Implementierung der Systemanforderungen stattfinden. Die Hauptmodelle, die in diesen Phasen verwendet werden, sind: Systemfunktionsmodell, Schnittstellenmodell, Datenmodell, Programmmodul-Spezifikationsmodell.

Um die Kommunikation zwischen Delphi und Rose zu ermöglichen, wird eine Middleware namens Codegenerator verwendet. Anzumerken ist, dass sich die Aufgaben dieser Software streng genommen nicht auf die Codegenerierung beschränken.

Bevor wir mit der Beschreibung eines bestimmten Codegenerators fortfahren, listen wir auf, was er unserer Meinung nach bieten sollte:

  • in der Lage sein, Rational Rose-Klassen in Klassendefinitionscode in der Zielsprache (in diesem Fall Delphi ) . In diesem Fall muss die einer bestimmten Klasse zugeordnete Beschreibung an der entsprechenden Stelle im Programmcode platziert werden;
  • Unterstützung für Klassendiagramm-Stereotypen, die bestimmten Merkmalen der Sprache zugeordnet sind (z. B. das Stereotyp Einheit, Schnittstelle oder Eigentum mit entsprechenden Definitionen: spezifisches Paket - Delphi-Modul , Klasse - Delphi-Schnittstelle, Attribut - Eigenschaft für Delphi-Komponente);
  • haben eine beschriebene, offensichtliche und eindeutige Möglichkeit, ein Klassendiagramm auf Delphi-Code abzubilden. In diesem Fall muss die Anzeige anpassbar sein;
  • in der Lage sein, das eigentliche Delphi-Objektmodell (vorzugsweise für verschiedene Versionen Bibliotheken VCL);
  • Unterstützung der Codegenerierung zum Erstellen von Delphi-Klassen;
  • typische Arten von Beziehungen zwischen Klassen korrekt darstellen können (zumindest Generalisierung, Aggregation und Zusammensetzung);
  • in der Lage sein, die Kardinalität der Verbindung im Programmcode anzuzeigen;
  • Erstellen Sie basierend auf dem Rose-Komponentendiagramm ein Delphi-Projekt, das die erforderlichen Softwaremodule enthält ( vorausschauendes Engineering);
  • Erstellen Sie auf der Grundlage des fertigen Delphi-Projekts ein Rose-Komponentendiagramm, das als Komponenten alle Module des Delphi-Projekts und zugehörige Klassen enthält, die von Delphi als Ergebnis des Reverse Engineering erhalten wurden ( Reverse-Engineering). Diagramme sollten kompakt und selbsterklärend sein;
  • bieten einen automatischen Abgleich des Rose- und Delphi-Modells, nachdem Sie Änderungen am Code von Delphi-Modulen vorgenommen haben ( Round-Trip-Engineering);
  • Nachdem Sie Änderungen am Rose-Modell vorgenommen und den Code neu generiert haben, zerstören Sie nicht die Fragmente, die in der Delphi-Umgebung geschrieben wurden.
  • Zusätzlich zum Generieren von Code haben Sie die Möglichkeit, ein so wichtiges Delphi-Element als Formulare anzuzeigen.
  • Arbeit an realen Projekten (Hunderte von Klassen und Modulen) mit akzeptabler Leistung.

Delphi-Codegenerator von Ensemble Systems, Inc.

Gesellschaft Ensemble Systems Inc. ist derzeit einer der führenden Anbieter von Zusatzkomponenten (Add-Ins) für Rationalrose . Diese Komponenten unterstützen die Codegenerierung für eine Vielzahl gängiger Programmiersysteme, einschließlich Delphi. Betrachten wir die Arbeit des Delphi-Codegenerators in der Rational Rose-Umgebung.

Nach der Installation der Delphi-Komponente von Ensemble Systems, Inc. erscheint in der Rational Rose-Umgebung Neuer Gegenstand Menü im Bereich Werkzeuge (Abb. 1).

Der Codegenerator wird aufgerufen Rose-Delphi-Link (RDL). So verwenden Sie RDL , wir werden im Plan beschreiben, wenn wir ein konkretes Beispiel betrachten. Im Moment konzentrieren wir uns auf die Hauptfunktionen von RDL, ohne zu verstehen, dass es kaum möglich ist, RDL effektiv zu nutzen.

Beachten Sie zunächst, dass der von RDL generierte Code enthält keine Implementierung (Bei einem Objektmodell ist dies normalerweise der Methodenrumpf). Wenn das Modell aus Delphi-Code aktualisiert wird (Reverse Engineering oder Roundtrip), lädt das Modell keinen Code, der in der Delphi-Umgebung für Methodenkörper geschrieben wurde. Änderungen im Modell betreffen nur deklarative Elemente: Definitionen von Klassen, Schnittstellen, Typen, Datensätzen usw. Beim Neugenerieren von Code aus Rose bleiben jedoch auch die Rümpfe der Methoden in Delphi unverändert, und nur die deklarativen Elemente ändern sich. Daher ist es unmöglich, den Programmcode während der Regenerierung zu "verderben". Um Modellelemente im RDL-Programmcode anzuzeigen, verwendet es Eigenschaften der Codegenerierung (CG P) ist ein Satz spezieller Tabellen, die jedem Element der Rational Rose-Modelle zugeordnet sind und Delphi-spezifische Informationen enthalten, die für die Codegenerierung verwendet werden. Ein Satz dieser Tabellen (Abb. 2) ist im Hauptmenü verfügbar (Punkt Werkzeug-Optionen, Lesezeichen Delphi).

Damit CGP für Delphi aus der Spezifikation verfügbar ist, müssen Sie den Feldwert festlegen Standardsprache = Delphi Lesezeichen Notation Menüpunkt Extras/Optionen. Zur einfacheren Bedienung im Menübereich Werkzeuge/Ensemble Werkzeug Es gibt auch ein Lesezeichen Delphi-Eigenschaftseditor, wo Sie die Eigenschaften des ausgewählten Modellelements festlegen können. Beachten Sie, dass die Verwendung von CGP eine typische Technik für alle Codegeneratoren von Ensemble Systems, Inc. ist. und für Rational Rose im Allgemeinen. Wenn Sie den Delphi-Eigenschafteneditor verwenden, können Sie den Code des entsprechenden Modellelements (z. B. einer Klasse) anzeigen, ohne eine Codegenerierung durchzuführen, was oft sehr praktisch ist.

Sehen wir uns nun an, wie RDL gängige Designpraktiken auf Code abbildet.

1. Von einer Klasse erben und eine Schnittstelle implementieren

In Code umgewandelt:

Type SampleClass1 = class (BaseClass, SampleInterface) (...) end;

2. Assoziative Verknüpfungen mit Rollen und unterschiedlicher Kardinalität der Verknüpfung

In Code umgewandelt:

Typ SampleClass3 = private Klasse ArrayRole1: Array von SupplierClass2; ArrayRole2: Array von SupplierClass5; ArrayRole3: Array von SupplierClass3; ArrayRole4: Artikel; Ende;

Beachten Sie, dass Arrays (entweder mit fester Länge oder dynamisch) verwendet werden, um Rollen mit einer anderen Linkkardinalität als 1 darzustellen. Die SampleRange-Konstante im Beispiel muss in der Array_Range-Eigenschaft für die ArrayRole definiert werden. Beachten Sie, dass Role4 im Code nicht als Array definiert ist, sondern als Typ von TItems, der eine Sammlung darstellen soll.

In Code umgewandelt:

SampleClass1 = Klasse Public A: SampleClass2; B: Musterklasse3; C: Array von SampleClass4; D: Array von SampleClass5; Ende;

Beachten Sie, dass wir keinen signifikanten Unterschied im Code für die Aggregation und Zusammensetzung gefunden haben und der resultierende Code dem Code für die übliche Zuordnung mit Rollen sehr ähnlich ist.

4. Stereotype für typische Elemente des Delphi-Programmcodes

RDL verfügt über mehrere Stereotypen zur Darstellung typischer Elemente von Delphi-Code: Zeiger, Arrays, Dateien, Klassenreferenzen und so weiter. Zugegeben, unserer Meinung nach sind diese Elemente beim Entwurf eines Objektmodells auf hoher Ebene von geringem Nutzen.

Am Ende einer kurzen Beschreibung der Funktionen von RDL stellen wir Folgendes fest. Ein wichtiges Gestaltungselement ist die Dokumentation in der Spezifikation für das entsprechende Modellelement. RDL sorgt für dessen Übergabe an den Programmcode. Also für Operationen (Methoden der Delphi-Klasse) der Wert des Feldes Dokumentation in der Spezifikation wird vor der Methodendefinition in den Code eingefügt. Umgekehrt können Kommentare im Delphi-Code in Dokumentationsfelder in der Rose Model Element Specification umgewandelt werden.

Was RDL nicht kann

Wir haben zuvor definiert, was ein Delphi-Codegenerator unserer Meinung nach leisten sollte. Im Allgemeinen deckt die RDL alle aufgeführten Funktionen ab, mit vielleicht einer Ausnahme - es erlaubt keine Formulare zu erstellen. Können Sie sich eine Delphi-Umgebung ohne Formulare vorstellen? Wir können es auch nicht. Das Hauptparadigma der visuellen Programmierung in der Delphi-Umgebung besteht darin, die Werte der entsprechenden Eigenschaften (Werte von Klassenattributen) zu setzen und den Code für Event-Handler zu schreiben. Und dabei hilft uns RDL leider nicht weiter. Aber ist es wirklich eine so schwerwiegende Einschränkung? Hier mag es unterschiedliche Meinungen geben.

Einer der Wege, eine Anwendung zu erstellen, ist folgender: Die Benutzeroberfläche wird in der Delphi-Umgebung entworfen (und wo geht das am schnellsten und einfachsten?) und der Programmcode wird in ein Rational-Rose-Modell umgewandelt. Obwohl die Formen ziemlich sperrig sind, können sie „gekämmt“ werden, aber die Hauptsache ist keine irrelevanten Details in ihnen anzeigen. In Rational Rose werden das Objektmodell selbst, das Datenmodell, das Komponentenmodell entworfen, d. architektonisch bedeutsame Elemente. In Kombination mit dem System-Benutzerschnittstellenmodell bilden sie eine Systemstruktur, die von Konfigurationsmanagement-Tools nachverfolgt, in die Dokumentation aufgenommen, leicht auf grundlegende Fehler analysiert und die Grundlage für Funktionstests ist, dh in jeder Phase verwendet werden kann des Lebenszyklus ( JC) Software-Entwicklung. Gleichzeitig bietet RDL die vollständige Koordination von Modellen und Programmcode während des gesamten Lebenszyklus der Software. Wir versuchen, diesem Ansatz zu folgen.

Ein Beispiel für die gemeinsame Verwendung von Delphi und Rational Rose

Leider ist es im Rahmen eines kurzen Artikels kaum möglich, ein vollwertiges Beispiel einer realen Anwendung zu demonstrieren. Dies ist jedoch nicht erforderlich. An der Stelle im Artikel, an der wir beschrieben haben, was wir von Rose und Delphi in den einzelnen Entwicklungsstufen erwarten, haben wir darauf hingewiesen, dass es uns beim Entwerfen wichtig ist, in diesem Fall eine grundlegende Architektur zu erstellen - unter Einbeziehung von Elementen aus Delphi Objektmodell. Hier werden wir die Fähigkeiten von RDL demonstrieren.

Als Beispiel haben wir ein Fragment eines Systems gewählt, das dem behandelnden Arzt eine Anzeige von Indikatoren für den Zustand des Patienten bereitstellt. Funktionale Anforderungen an das System werden in Form eines Diagramms dargestellt (Abb. 3).

Das Diagramm zeigt drei aktive Objekte: Administrator, Gerät, Arzt. Die mit dem Gerät verbundenen Systemfunktionen werden wir nicht berücksichtigen. Beim Gerät ist für uns wesentlich, dass der Indikator mit einer gewissen Häufigkeit bezogen wird und das System eine Schnittstelle zur Speicherung in der Datenbank bereitstellt. Alle übrigen Funktionen des Systems beziehen sich auf die Benutzeroberfläche und die Sicherstellung der Speicherung von Informationen in der Datenbank oder deren Auswahl.

Das System basiert auf den folgenden architektonischen Lösungen:

  • Benutzeroberfläche ( GUI) Das System basiert auf dem Delphi-Objektmodell;
  • die Schnittstelle zum DBMS ist auf Basis des Delphi-Objektmodells aufgebaut;
  • Als DBMS wird ein relationales DBMS verwendet.

Beim Entwerfen eines Systems müssen wir Folgendes definieren: Klassen zur Darstellung der Benutzerschnittstelle ( Grenzklassen); Steuerklassen, die die Logik des Systems implementieren ( Klassen kontrollieren); Entitätsklassen zum Anzeigen der Informationsspeicherstruktur ( Entitätsklassen).

Die von uns entworfenen Entitätsklassen sind in Abb. vier .

Aus dem Objektmodell der Entitätsklasse haben wir ein physisches Datenmodell für ein relationales DBMS erhalten und seine Generierung für ein bestimmtes DBMS bereitgestellt. Die Einzelheiten dazu, wie dies in der Rational Rose-Umgebung durchgeführt werden kann, werden hier weggelassen.

Da wir planen, eine GUI auf Basis des Delphi-Objektmodells zu bauen, liegt es nahe, anzunehmen, dass die Klassen zur Darstellung der Benutzeroberfläche (Boundary Classes ) erhalten Sie beim Prototyping der Benutzeroberfläche in der Delphi-Umgebung. Klassen Benutzeroberfläche (Grenzklassen ) werden entworfen für das Formular in Abb. 5 .

Im Klassendiagramm haben wir Attribute und Operationen für alle Klassen des Delphi-Objektmodells entfernt: Da es in jeder Klasse mehrere Dutzend dieser Attribute und Operationen gibt, würde das Diagramm in diesem Fall überwältigend werden. Das Diagramm zeigt deutlich, welche Klassen des Delphi-Objektmodells verwendet werden, um Elemente der Benutzeroberfläche darzustellen, und was genau sie darstellen. Von der Darstellung des Modells sollte sofort ausgeschlossen werden TGroupBox und T-Etikett als architektonisch irrelevante Elemente. Das Klassendiagramm für die tabellarische Bearbeitungsmaske ist in Abb. 2 dargestellt. acht .

Neben dem Hauptfenster benötigen wir auch eine Schnittstelle (GUI) zur Pflege einer Datenbank mit Patienten, Arten von Indikatoren und Maßeinheiten. Wir planen, dafür eine Standardform der tabellarischen Bearbeitung auf Basis von Standard-Delphi-Komponenten zu verwenden. Lassen Sie uns diese Form in Delphi zeichnen und in ein Rational Rose-Modell umwandeln (Abb. 9).

Alle anderen Masken, die den Vererbungsmechanismus nutzen, werden aus der tabellarischen Bearbeitungsmaske übernommen. Ein Beispiel dafür, wie das Verzeichnis der Beobachtungstypen aussehen wird, ist in Abb. zehn .

Wir haben uns also vollständig für das Erscheinungsbild der Benutzeroberfläche entschieden und können uns nun auf die Implementierung der Anwendungslogik konzentrieren. Der Einfachheit halber (aber nehmen Sie dies nicht als Standardverfahren!) verwenden wir eine bereits vorhandene Schnittstellenklasse als Kontrollklasse TMainForm.

Die TMainForm-Klasse muss Folgendes bereitstellen:

  • Navigation zwischen Bildschirmen, Handhabung von Tastendruckereignissen, um andere Formulare anzuzeigen;
  • Ausfüllen von Dropdown-Listen, Patienten, Indikatoren, Maßeinheiten;
  • automatische Berechnung der Maßeinheit nach Indikatortyp;
  • Patientenauswahl nach Kartennummer;
  • Auswahl der Kartennummer für den Patienten;
  • Berechnung und Anzeige des letzten Werts des Indikators.

Lassen Sie uns Operationen in der Rational Rose-Umgebung erstellen, um die oben beschriebenen Funktionen der Klasse TMainForm zu implementieren (Abb. 11).

Operationen der TMainForm-Klasse sollten in zwei Gruppen unterteilt werden: Berechnungen und Reaktionen auf Ereignisse. Operationen enden in Klicken oder Rückgeld, und auch Form zeigen- Reaktionen auf Ereignisse, der Rest - Berechnungen.

Operationen müssen Folgendes implementieren:

  • FillPatientLis t - Ausfüllen der Dropdown-Liste der Patienten;
  • FillMeasureList- Ausfüllen der Dropdown-Liste der Maßeinheiten;
  • Beobachtungsliste füllen- Ausfüllen der Dropdown-Liste der Beobachtungstypen;
  • CalcObservVal- Berechnung des zuletzt beobachteten Wertes;
  • ChPatientByCard- Suche nach einem Patienten anhand der Kartennummer;
  • ChCardByPatient- Suche nach der Kartennummer des Patienten;
  • ChMeasureByObserv- die Maßeinheit für den angegebenen Beobachtungstyp zurückgeben;
  • CardValChange- Reaktion auf Änderung der Kartennummer;
  • PatientChComboChange- Reaktion auf die Auswahl eines neuen Patienten in der Liste;
  • ObservTypeComboChange- Reaktion auf die Wahl der Beobachtungsart;
  • GetValueButtonClick- Reaktion auf das Drücken der Schaltfläche zum Berechnen des Wertes;
  • PatientenDiktKlick- Reaktion auf das Drücken der Patiententaste;
  • ObservTypeDictClick- Reaktion auf das Drücken der Schaltfläche Arten von Beobachtungen;
  • MeasureDictClick- Reaktion auf das Drücken der Taste Maßeinheiten;
  • Form zeigen- Verarbeitung, wenn das Formular zum ersten Mal auf dem Bildschirm angezeigt wird.

Und das Letzte, was zur Vervollständigung des Entwurfs benötigt wird, sind die Steuerklassen, um die Interaktion mit der Datenbank zu implementieren. Ohne sie ist weder das Füllen der Datenbank noch die Implementierung der Abrechnungsoperationen der Steuerklasse TMainForm möglich. Wie im Fall von Schnittstellenklassen verwenden wir die Umgebung Delphi um eine Kontrollklasse für die Datenbankinteraktion zu entwerfen - TDataModule1, und führen Sie dann den Modellabgleich durch. Das neue Datenbank-Interaktionsmodul ist in Abb. 2 dargestellt. 12 .

Objektbasiert AbfragePatient, KeyObType, Abfragemaßnahmen und Patientendatenquelle, ObTypeDataSource, MeasureDataSource Die Arbeit mit einer Datenbank von Patienten, Beobachtungstypen und Maßeinheiten wird implementiert - in einer für Delphi standardmäßigen Weise, basierend auf der Verwendung eines Paars von Klassenobjekten TQuery, TDatenquelle und ihre Interaktion mit GUI-Klassen. ObservDataSource verwendet, um auf Informationen über gemachte Beobachtungen zuzugreifen. Um das Zusammenspiel von Kontrollklassen zu beschreiben TDataModule1 und TMainForm Sie sollten mehrere Interaktionsdiagramme erstellen, die sich auf die Ausführung der erforderlichen Abfragen an die Datenbank beziehen (angesichts des begrenzten Umfangs des Artikels lassen wir diese Diagramme weg).

Beachten Sie, dass wir beim Hinzufügen neuer Module und Klassen zum System und beim Anpassen von Modellen automatisch ein Komponentenmodell des Systems erhalten haben (Abb. 13).

Fassen wir also kurz zusammen. Als Ergebnis der gemeinsamen Nutzung von Rational Rose und Delphi haben wir Folgendes erhalten:

  • in Paketen organisierte Schnittstellen- und Steuerungsklassen;
  • Komponentenmodell des Systems.

Entitätsklassen und Dynamikdiagramme werden in Rational Rose entworfen. Rational-Rose-Modelle bieten uns in Zukunft eine Grundlage, um das Projekt zu dokumentieren, den Status zu verfolgen und funktionale Tests zu organisieren. Das in Delphi erhaltene Design ist wiederum die Grundlage für die Durchführung der Implementierung. Während der Implementierung wird das Projekt periodisch in Delphi mit dem auf Technologie basierenden Rational-Rose-Modell abgestimmt Rundfahrt, mit dem Sie die Modelle auf dem neuesten Stand halten und ihre Evolution gemäß den geänderten Anforderungen an das System reibungslos durchführen können.

Fazit

Abschließend wollen wir auf die Phasen eingehen, in denen unserer Meinung nach der kombinierte Einsatz von Delphi und Rational Rose aus technologischer Sicht am sinnvollsten ist.

Erstens , ist die Erstellung einer prototypischen Benutzeroberfläche. Schnelle Erstellung Forms in der Delphi-Umgebung ermöglicht es Ihnen auch, schnell ein Modell von Schnittstellenklassen in Rose zu erhalten, grundlegende Architekturpunkte hervorzuheben (z. B. gemeinsames Verhalten, typische GUI-Elemente, Redundanz) und auch Schnittstellenklassen mit funktionalen Anforderungen für das System zu vergleichen.

Zweitens , ist die Erstellung von Steuerelementklassen in Rational Rose-Modellen, gefolgt von der Codegenerierung in Delphi. Steuerelementklassen werden in der Rational Rose-Umgebung mithilfe von UML visueller dargestellt (in Delphi können sie zwischen den großen Schnittstellenklassen "verwischt" werden).

Und endlich, Drittens , ist die Phase der Codeimplementierung, in der implementierungsbezogene Änderungen am Modell vorgenommen werden können. Durch den regelmäßigen Abgleich der Modelle in dieser Phase kann der Entwickler sicherstellen, dass sich die grundlegenden architektonischen Lösungen nicht wesentlich geändert haben, und über aktuelle Modelle verfügen, die den tatsächlichen Entwicklungsstand widerspiegeln.

Computerpresse 4 "2001