Buskrosor för din trädgård. Ett exempel på att använda Delphi och Rational Rose tillsammans

Odlare över hela världen älskar rosor och odlar dem i en mängd olika klimat. En ny grupp trädgårdsbuskar - buskrosor - har gjort en slags revolution i rosornas värld. Även om nästan alla av dem fortfarande kräver skydd för vintern under våra förhållanden, är det idag buskrosor som är de mest mångsidiga och opretentiösa.

Buskbuskar

Buskar är mycket heterogena. Dessa är vilda arter och deras hybrider och moderna rosor av komplext ursprung, vars blommor liknar blommor hybridte rosor och rosor av floribundagruppen.

Rose rugosa och dess hybrider

En av de mest värdefulla parkrosorna är den skrynkliga rosen, eller rugosa -rosen, även kallad japansk ros. Den ursprungliga arten är utbredd i vårt land i regionerna i Fjärran Östern, liksom i norra Kina, Korea och Japan. Den finns i två former: en med vita blommor, den andra med mörkrosa eller röda blommor.

Blommor från 5 till 10 cm i diameter, mycket doftande, i blomställningar av 3-6 blommor eller ensamma. Blommorna i hybridsorter av rugosa är från vitt till mörkrött, det finns också gula blommor, de skiljer sig också i storlek och dubbelhet. Bladen är stora, hårda, skrynkliga. Skott är tätt täckta med taggar och borst. Buskar är breda, täta, når en höjd av 1-2 m, ger en stark tillväxt med upprätta skott. Rotsystemet är kraftfullt och ytligt. Riklig blomning, från slutet av maj, långvarig, i en svagare form kan upprepas. Tack vare denna funktion finns det frukt och blommor på buskarna samtidigt. Former och sorter med dubbla blommor är särskilt kapabla till detta, vilket är dekorativt värdefullt. Frukterna är ljusa, orange-röda, stora (2-2,5 cm), mycket dekorativa. Rose rugosa är en mycket vinterhärdig (kräver inget skydd) och sjukdomsresistent art.

De flesta rugosa -hybrider kräver inte skydd för vintern. Men vissa sorter) skiljer sig inte åt i vinterhårdhet. Deras blommande skott visas på de övervintrade övre skotten från föregående år. Utan skydd för vintern eller djupt snötäcke återstår bara de nedre knopparna, som inte kan ge blomning. Det är inte lätt att böja kraftfulla och tjocka skott till marken. Därför är det nödvändigt att uppmärksamma den allmänna uthålligheten, upprepningen och överflödet av blomning och sjukdomsresistens när du väljer en sort.

Rugosa ros och dess hybrider används för små grupper och enskilda planteringar, häckar. Dessa rosor gör underbara häckar, särskilt de som delar området i separata delar. Frukterna är lämpliga för att göra sylt och kompott.

Moesi roshybrider

Distributionsområdet för förfader till denna grupp är västra Kina. Hybrider erhålls genom att korsa den ursprungliga arten med rosor från olika grupper. Blommorna är röda, rosa, medelstora (5-6 cm), icke-dubbla eller halv-dubbla, i blomställningar. Bladen består av 7-13 ovala broschyrer. Buskarna är höga-upp till 2-2,5 m, sprider sig, med rödbruna skott. Riklig blomning från juni; återblommande är svagare. Frukterna är flaskformade, stora (5 cm långa), mörkorange-röda. Moesi roshybrider är dekorativa för trädgårdsskötsel. De behöver ett lätt lock utan att böja skotten till marken.

Cordes roshybrider

Dessa rosor namngavs efter deras författare - den berömda tyska upphovsmannen V. Cordes. De flesta av dessa rosor härrör från Max Graf (en spontan hybrid av rynkad ros och vihura ros). Som ett resultat av dess korsningar med sorter från andra grupper bildades en sortgrupp av hybrider av Cordes -rosen. Det bör noteras att nya trädgårdsgrupper inte skapas utan särskilda skäl, och Cordes rosor har hedrats för sin uthållighet i kombination med attraktivitet.

Ganska stora (7-8 cm i diameter) blommor i rosor i denna grupp kännetecknas av en mängd olika färger och former, från halvdubbla till tätt dubbla, ibland doftande, samlade i små blomställningar. Alla sorter har vackra mörkgröna, blanka blad. Buskarna är kraftiga (1,5-2 m), ofta med piskliknande skott. Riklig blomning från juni till sen höst. Frukterna är äggformade. Alla sorter är ganska vinterhärdiga och sjukdomsresistenta. Ändå, under förhållandena i centrala Ryssland, kräver de skydd för vintern. De kan odlas även i halvskugga.
Denna grupp av rosor används i grupp- och enstaka planteringar för vertikal trädgårdsskötsel. De kan användas för att dekorera lusthus, terrasser, pergolor, valv, speciella galler och andra stöd för att dela trädgårdsutrymmet, skapa rekreationsområden, för att dekorera uthus.

Dessa rosor kan inte linda runt stödet, så de måste bindas till det, bildas från tidig vår efter beskärning, så att de omedelbart växer i rätt riktning. Under hela växtsäsongen styrs huvudgrenarna längs stödet och är noggrant bundna till det.

Buskar

Scrubs (även kallad moderna parkrosor) inkluderar alla sorter som inte kan ingå med säkerhet i andra trädgårdsgrupper.

  • Spektakulärt utseende. Blommande är rikligt, långsiktigt (från juni till hösten), repetitivt. Nästan alla sorter blommar upprepade gånger, men det finns också enstaka blommande sorter.
  • Arom. Det finns mer doftande rosor bland scrubs än bland hybridte -rosor.
  • Volym. Många sorter sticker ut för sin kraft och kraft (upp till 2 m). Buskar av vissa sorter är så graciösa att deras flexibla grenar kräver lite stöd, som snart stängs med blommor.
  • Sjukdomsresistens och hög vinterhärdighet.

De kräver bara ljusskydd för vintern.

  • Anspråkslöshet. Varje trädgårdsmästare kan odla en buske.
  • Utbredd användning inom landskapsarkitektur.
  • Buskar kan odlas både i enstaka planteringar och i små grupper (3-5 buskar).

Plantering i små grupper ger effekten av en stor blommande roskula, alla oegentligheter i en buske döljs av grannar. Avståndet mellan buskarna kan vara från 50 cm till mer än 2 m, beroende på buskens bredd. Det är omöjligt att ge en allmän rekommendation för att plantera scrubs, eftersom de är mycket olika i storleken på busken. I genomsnitt planteras 2 till 3 buskar per 1 m2. I stora buskrosor är den nakna delen av busken ibland synlig, och sedan kan den döljas av de underdimensionerade rosorna som ligger framför dem.

En vacker enda buske på gräsmattan ser spektakulär ut. För rollen som "solist" välj en växt med vacker form buske och riklig blomning, med en behaglig doft. Du kan plantera den var som helst: vid ingången till huset, på gräsmattan, i mitten av rabatten. Många buskrosor av både det gamla och moderna sortimentet är bra för enstaka planteringar. Det viktigaste är att växten är i harmoni med det omgivande landskapet.

Nostalgiska buskar

De så kallade engelska rosorna, skapade av briten David Austin, tillhör också gruppen av scrubs. Under många år har denna uppfödare arbetat med ett program för att skapa rosor som liknar gamla arter, men har en modern blommafärg och förmågan att blomma igen. Engelska rosor erhålls genom att korsa franska, damast, Bourbon och andra rosor med moderna sorter av hybridte rosor och floribunda rosor. D. Austins rosor dök upp under 1900 -talets sista kvartal. Deras blommor är tätt dubbla, i olika färger: blek aprikos, djup gul, mörk röd, pionformad, mycket doftande och ser nostalgisk gammaldags ut. Buskarna är kompakta, välformade, återblommar. Många sorter är sjukdomsresistenta. Fördelen med D. Austin är att han återigen ingjutit i världen en kärlek till blommans gamla former ( länge sedan bägare rosor av hybridte -typen ansågs vara idealiska), liksom till buskens volymetriska struktur.

De mest populära sorterna av denna grupp är Abraham Darby, Graham Thomas. Till stor del tack vare engelska rosor lärde sig trädgårdsmästare om gruppen skrubbar. Klimatet i mittzonen är lite hårt för dem. Därför måste deras skott för vintern täckas noggrant.

Rosor från det franska företaget Meilland i Romantica-serien utmärks också av sin stabilitet, rikliga återblommande, en mängd olika nyanser, korrugerade kronblad och charmen hos gamla rosor. Det är sant att bara ett fåtal sorter från denna grupp tillhör gruppen scrubs, till exempel Collette, Les Quatre Saisons, Yellow Romantika, Lovely Meilland. Alla sorter kännetecknas inte bara av sin skönhet och semi-antika utseende, utan också av deras stabilitet. De är drömmen om vilken romantisk trädgård som helst. Det tyska företaget Rosen Tantau har också odlat moderna nostalgiska rosor i många år. Alla sorter är testade för sjukdomsresistens och frostbeständighet i hårda klimat. Nya sorter av nostalgiska rosenskrubb: Belvedere, First Lady, Gartentraume, Grafin von Hardenberg, Mariatherese, Pasella.

Roses of the Canadian Explorer Roses -serien (Charles Albanel, David Thompson, Henry Hudson, Jens Munk, Martin Frobicher), uppkallad efter enastående kanadensiska upptäcktsresande, kännetecknas främst av sin höga vinterhärdighet. Många sorter av denna serie härrörde från cordesia -rosen och rugosa -rosen.

Vårdfunktioner

Skydd för vintern

Även om vinterhårdheten hos moderna buskrosor är högre än för hybridte och floribunda rosor, måste de täckas för vintern, och själva skyddet kan vara svårare på grund av buskens volym.
Återblommande buskrosor kan nå 1,5 m eller mer i höjd under växtsäsongen. I slutet av oktober utförs höstbeskärning - med 1/3 av skottens längd.

höga skrubbskott bör försökas böja till marken. Buskar kan grävas på ena sidan och läggas genom att fästa dem på marken. De böjda grenarna läggs på ett lager grangrenar, annars kan den tinade jorden under rosens skydd ruttna. Toppen är också täckt med grangrenar eller något isoleringsmaterial. Du kan använda jord för att fixera isoleringsmaterialet ovanpå.

Massivt snötäcke kan ge pålitligt skydd för buskar som har passerat de normala härdningsstegen. Under ett snöskikt på 50-70 cm sjunker temperaturen inte under 4-5 ° frost vid en utomhustemperatur på 25-30 ° C. Men eftersom tiden för snöfall och tjockleken på snötäcket inte är konstant, du måste använda ytterligare skyddsmetoder: grangrenar, ekplåt, fiberduk.

Beskärning

Buskar är mycket omfattande och kräver lite beskärning. Dessa rosor är rädda för stark och jämn beskärning. Deras vilande knoppar vaknar längre än till exempel hybridte -rosor. Med en kort sommar, dessutom inte alltid tillräckligt varm, blir denna funktion avgörande. Med lång beskärning är blomningen rikligare, eftersom andra ordningens skott från de övre knopparna utvecklas mer intensivt.

3-5 av de starkaste nya basalskotten finns kvar på buskarna och 6-8 eller fler välutvecklade knoppar finns kvar på dem. Syftet med den årliga beskärningen är att förkorta skotten med en fjärdedel eller en halv, de laterala med två tredjedelar. Om skotthöjden når 120 cm, förkorta dem med 30-40 cm, om längden på sidoskottet är 30 cm, förkorta den med 10 cm. Det är nödvändigt att lämna tillräckligt starka, jämnt fördelade skott.

För närvarande Delphiär en av de mest populära mjukvaruprodukterna för att skapa informationssystem... På grundval av detta skapas både små program och företagsövergripande system. Varför är denna produkt så attraktiv ur utvecklarens synvinkel? Först och främst är det naturligtvis en utmärkt visuell programmeringsmiljö - förståelig, lätt att lära sig och kräver ofta inte kunskap från en professionell utvecklare (som, som du vet, bit för bit ackumuleras under många år och decennier och är otroligt dyr). I Delphi -miljön kan du skapa ganska komplexa mjukvarusystem praktiskt taget från grunden genom att skriva ett minimum av kod. Samtidigt, språket Objekt Pascal, som programmet är skrivet på, är bekant för många (åtminstone i vårt land) och studeras för närvarande i juniorkurser i de flesta inhemska tekniska universitet.

Allt är dock inte så enkelt. Om du kan begränsa dig till den visuella programmeringsmiljön för att skapa små mjukvarusystem för dina egna behov, sedan skapa alla tillräckligt kritiska för kvaliteten programvara(Programvara) kräver ett fundamentalt annorlunda tillvägagångssätt, åtminstone - användning i utvecklingen av en livscykelmodell PÅ, med alla följande krav för att dokumentera processen.

Grunden för system i denna klass är närvaron av en grundläggande arkitektur, som är oförändrad under hela livscykeln för utveckling och drift av systemet och vars huvudelement fastställs i de tidiga stadierna av design. Grundarkitekturen skapas vanligtvis med hjälp av en serie modeller som återspeglar huvudpunkterna relaterade till systemets struktur och dess funktioner. Förlåt onsdag Delphi för att lösa sådana problem är inte tillämpligt.

Men tillbaka till fördelarna med Delphi. Om vi ​​släpper den visuella programmeringsmiljön, vad blir då kvar? Objektmodell. Och denna fördel med Delphi är attraktiv ur systemkonstruktörens synvinkel. Det är objektmodellen (hur konstig det än kan tyckas för någon) som i stor utsträckning avgör framgången för den visuella programmeringsmiljön. Delphi-objektmodellen täcker ett brett spektrum av uppgifter, vilket ger en högnivå men ändå extremt flexibel, med liten eller ingen begränsning, för att organisera användargränssnitt, operativsystems resurshantering, databasmanipulation, stöd för öppna systemstandarder och stöd för populär teknik (inklusive CORBA och KOM), skiktad arkitektur och slutligen Internet-intranät- teknologi.

Den grundläggande arkitekturen kan använda element i Delphi-objektmodellen (varför återskapa allt ovan), komplettera den med de nödvändiga komponenterna som återspeglar applikationsspecificiteten för ett visst system.

Vi använder en produkt för systemdesign Rationell ros företag Rational Software Corp.oration... Denna produkt har alla nödvändiga egenskaper för att skapa den grundläggande arkitekturen för ett system i vilken skala som helst. Om du har tillräcklig programmeringserfarenhet i Delphi -miljön, tycker vi att användningen av Rational Rose och Delphi tillsammans, inom en enda teknisk process, är lämplig.

Syftet med denna artikel är att överväga den gemensamma användningen av Rational Rose och Delphi och exakt (naturligtvis enligt vår mening) ange platsen för varje produkt i utvecklingsprocessen. Vi hoppas att detta kommer att göra det möjligt för utvecklare att bilda sig en uppfattning om tillämpningen av en sådan teknik för sina egna behov och spara tid att studera detaljerna.

Vad vi vill ha från Rational Rose och Delphi

Metodik vi följer när vi utvecklar är en metod för mjukvaruutveckling Rationell enhetlig process av Rational Software Corporation. Ur en teknisk synvinkel inkluderar metoden följande steg (naturligtvis inom varje iteration): domänmodellering, definiering av systemkrav, analys och design, implementering (kodning och offline -felsökning), testning och implementering. Tabellen nedan visar vad vi förväntar oss att få med Rational Rose och Delphi vid varje steg.

Använda Rational Rose och Delphi i olika stadier av mjukvaruutveckling

Skede Vad vi förväntar oss av Rose Vad vi förväntar oss av Delphi
Domänmodellering Modelleringen av ämnesområdet utförs, ämnesområdet beskrivs "som det är" -
Fastställande av systemkrav Funktionella krav för systemet, krav för systemgränssnittet bestäms Prototyp användargränssnitt
Analys och design Grundläggande arkitekturkomponenter definieras, data modelleras, systemkomponenter utformas i detalj Delar av Delphi -objektmodellen ingår i den underliggande arkitekturen. Ger en-till-en-korrespondens mellan Rose-klassdiagramelement och Delphi-komponentelement
Genomförande Klassdiagram implementeras som mjukvarumoduler, komponentdiagram och placeringsdiagram utvecklas Programkoden är implementerad, projektet matchas unikt i Rose och Delphi. Kod som dokumenterar i Delphi återspeglas i Rose
Testning Modellerna är i stort sett oförändrade. Testfall utvecklas för att testa systemfunktioner Ändringar görs i programkoden. Kodändringar återspeglas i Delphi -koden
Genomförande Placeringsdiagram är grunden för mjukvaruimplementering. Modeller kan tillhandahålla aktuell dokumentation på systemnivå -

Som du kan se från tabellen kan den huvudsakliga interaktionen mellan Rose och Delphi inträffa under systemkravets definition, analys och design och implementering. Huvudmodellerna som används i dessa skeden är: systemfunktionsmodell, gränssnittsmodell, datamodell, modellmodell för specifikationer för programvarumoduler.

En mellanprogram som kallas en kodgenerator används för att tillhandahålla kommunikation mellan Delphi och Rose. Det bör noteras att uppgiften för denna programvara strikt taget inte är begränsad till att bara generera kod.

Innan vi går vidare till beskrivningen av en specifik kodgenerator, låt oss lista vad den enligt oss bör ge:

  • kunna konvertera Rational Rose -klasser till klassdefinitionskod på målspråket (i det här fallet Delphi ) ... I detta fall bör beskrivningen som är associerad med en specifik klass placeras på lämplig plats i programkoden;
  • stödja språkspecifika stereotyper för klassdiagram (t.ex. stereotyp enhet, gränssnitt eller fast egendom med lämpliga definitioner: specifikt paket - Delphi -modul , class - Delphi -gränssnitt, attribut - egenskap för Delphi -komponent);
  • ha ett beskrivet, uppenbart och entydigt sätt att mappa ett klassdiagram till Delphi -kod. I detta fall måste skärmen vara anpassningsbar;
  • kunna importera själva Delphi -objektmodellen (helst för olika versioner bibliotek VCL);
  • stödja kodgenerering för att skapa Delphi -klasser;
  • kunna visa typiska typer av relationer mellan klasser korrekt (åtminstone generalisering, aggregering och sammansättning);
  • kunna visa anslutningens kardinalitet i programkoden;
  • baserat på Rose Component Diagram, skapa ett Delphi -projekt som innehåller det som krävs programvarumoduler (framåtutveckling);
  • baserat på det färdiga Delphi -projektet, bygg ett Rose -komponentschema som i form av komponenter innehåller alla moduler i Delphi -projektet och relaterade klasser som erhållits från Delphi till följd av omvänd konstruktion ( omvänd konstruktion)... Diagram ska vara kompakta och okomplicerade.
  • säkerställa automatisk avstämning av Rose och Delphi -modellen efter att ha gjort ändringar i koden för Delphi -moduler ( tur och retur teknik);
  • efter att ha ändrat Rose-modellen och genererat koden igen, förstör inte fragmenten som skrivits i Delphi-miljön;
  • förutom att generera kod, ha ett sätt att visa ett så viktigt Delphi -element som former;
  • arbeta med riktiga projekt (hundratals klasser och moduler) med acceptabel prestanda.

Delphi -kodgenerator från Ensemble Systems, Inc.

Företag Ensemble Systems, Inc.är för närvarande en av de ledande leverantörerna av kompletterande komponenter (tillägg) för Rational Rose . Dessa komponenter stöder kodgenerering för ett brett utbud av populära programmeringssystem, inklusive Delphi. Låt oss överväga arbetet med Delphi -kodgeneratorn i Rational Rose -miljön.

Efter installation av Delphi -komponenten från Ensemble Systems, Inc. i Rational Rose -miljön visas ett nytt menyalternativ i avsnittet Verktyg (Figur 1).

Kodgeneratorn kallas Rose Delphi Link (RDL). Hur man använder RDL , vi kommer att beskriva i planen när vi kommer att överväga specifikt exempel... För tillfället kommer vi att fokusera på huvuddragen i RDL, utan en förståelse för vilken RDL knappast kan användas effektivt.

Observera först att koden som genereras av RDL är innehåller inte implementering (för en objektmodell är detta vanligtvis metodens kropp). När modellen uppdateras från Delphi -kod (omvänd konstruktion eller tur och retur), laddar modellen inte Delphi -kod för metodkroppar. Förändringar i modellen gäller endast deklarativa element: definitioner av klasser, gränssnitt, typer, poster etc. Men när koden genereras på nytt från Rose förblir metodkropparna i Delphi också oförändrade och endast deklarativa elementen ändras. Därför är det omöjligt att "förstöra" programkoden när den genereras om. RDL använder Egenskaper för kodgenerering (CG P) är en uppsättning specialtabeller som är associerade med varje element i Rational Rose-modeller och innehåller Delphi-specifik information som används för kodgenerering. En uppsättning av dessa tabeller (Fig. 2) är tillgänglig från huvudmenyn (post Verktyg / Alternativ, bokmärke Delphi).

För att CGP för Delphi ska vara tillgänglig från specifikationen måste du ange fältvärdet Standardspråk = Delphi i bokmärket Notation menyalternativ Verktyg / Alternativ. För att förenkla arbetet i menysektionen Verktyg / ensemble Verktyg ett bokmärke visas också Delphi Property Editor där du kan ställa in egenskaperna för det valda modellelementet. Observera att användningen av CGP är typisk för alla kodgeneratorer från Ensemble Systems, Inc. och för Rational Rose i allmänhet. När du använder Delphi Property Editor kan du visa koden för motsvarande modellelement (till exempel en klass) utan att utföra kodgenerering, vilket ofta är mycket bekvämt.

Låt oss nu titta på hur RDL kartlägger designmönster till kod.

1. Klassarv och implementering av gränssnitt

Konverterat till kod:

Typ SampleClass1 = class (BaseClass, SampleInterface) (...) slutet;

2. Associativa kopplingar till roller och olika kardinalitet i anslutningen

Konverterat till kod:

Typ SampleClass3 = class private ArrayRole1: array of SupplierClass2; ArrayRole2: array av SupplierClass5; ArrayRole3: array av SupplierClass3; ArrayRole4: TItems; slutet;

Observera att matriser (antingen fast längd eller dynamisk) används för att representera roller med en annan länkkardinalitet än 1. SampleRange -konstanten i exemplet måste definieras i Array_Range -egenskapen för ArrayRole -rollen. Observera att för roll 4 definierar koden inte en array, utan TItems -typen, som ska representera en samling.

Konverterat till kod:

SampleClass1 = klass Public A: SampleClass2; B: SampleClass3; C: array av SampleClass4; D: array av SampleClass5; slutet;

Man bör komma ihåg att vi inte fann någon signifikant skillnad i koden för aggregering och komposition, och den resulterande koden är mycket lik koden för det vanliga associerade förhållandet med roller.

4. Stereotyper för typiska element i Delphi -programkoden

RDL har flera stereotyper för att representera typiska element i Delphi -programkod: pekare, matriser, filer, klassreferenser etc. Enligt vår mening är dessa element dock inte särskilt användbara vid design på hög nivå av objektmodellen.

I slutet av den korta beskrivningen av RDL -funktioner noterar vi följande. Ett viktigt designelement är dokumentationen i specifikationen för motsvarande modellelement. RDL gör det möjligt att skicka det till programkoden. Så, för operationer (metoder i Delphi -klassen), värdet på fältet dokumentation i specifikationen infogas i koden före metoddefinitionen. Omvänt kan kommentarer i Delphi -kod konverteras till dokumentationsfält i Rose Model Element Specification.

Vad RDL inte kan göra

Vi har tidigare definierat vad vi tycker att Delphi -kodgeneratorn ska ge. I allmänhet täcker RDL alla listade funktioner, med kanske ett undantag - det tillåter dig inte att skapa formulär... Kan du tänka dig en Delphimiljö utan former? Vi kan inte heller. Huvudparadigmet för visuell programmering i Delphi -miljön består i att ställa in värdena för motsvarande egenskaper (värden för klassattributen) och att skriva koden för händelsehanterare. Och i detta, tyvärr, är RDL inte vår hjälpare. Men är detta verkligen en så allvarlig begränsning? Det kan finnas olika åsikter här.

Ett sätt att skapa en applikation är att designa ett användargränssnitt i Delphi -miljön (var är det snabbare och enklare?) Och omvandla programkoden till en Rational Rose -modell. Trots att formerna är ganska besvärliga kan de "kammas", men det viktigaste är visa inte obetydliga detaljer i dem... I Rational Rose är själva objektmodellen, datamodellen, komponentmodellen utformade, det vill säga arkitektoniskt viktiga element. I kombination med systemets användargränssnittsmodell bildar de en sådan systemstruktur som kan spåras av konfigurationshanteringsverktyg, ingår i dokumentationen, enkelt analyseras för grundläggande fel och är grunden för funktionell testning, det vill säga den kan användas på alla stadier av livscykeln ( J C) mjukvaruutveckling. Samtidigt säkerställer RDL fullständig konsistens av modeller och programkod under hela programvarans livscykel. Vi försöker följa detta tillvägagångssätt.

Ett exempel på att använda Delphi och Rational Rose tillsammans

Tyvärr är det knappast möjligt att demonstrera ett fullvärdigt exempel på en verklig tillämpning inom ramen för en liten artikel. Detta krävs dock inte. Vid den punkt i artikeln, där vi beskrev vad vi förväntar oss av Rose och Delphi vid varje utvecklingsstadium, noterade vi att det är viktigt för oss under designen att skapa en grundläggande arkitektur, i detta fall - med inkludering av element i Delphi -objektmodell. Det är här vi kommer att visa RDL: s möjligheter.

Som exempel har vi valt ett fragment av ett system som visar indikatorer på patientens tillstånd för den behandlande läkaren. De funktionella kraven för systemet presenteras i form av ett diagram (fig. 3).

Diagrammet visar tre aktiva objekt: administratör, enhet, läkare. Vi kommer inte att överväga funktionerna i systemet som är associerat med enheten. När det gäller enheten är det viktigt för oss att indikatorn erhålls vid en viss frekvens och att systemet tillhandahåller ett gränssnitt för att lagra den i databasen. Alla systemets återstående funktioner är associerade med användargränssnittet och säkerställer lagring av information i databasen eller dess val.

Systemet är baserat på följande arkitektoniska lösningar:

  • användargränssnitt ( GUI) systemet är byggt på grundval av Delphi -objektmodellen;
  • gränssnittet med DBMS är byggt på grundval av Delphi -objektmodellen;
  • ett relations -DBMS används som ett DBMS.

När vi utformar systemet måste vi definiera: klasser för att representera användargränssnittet ( gränsklasser); styrklasser som implementerar systemets logik ( kontrollklasser); entitetsklasser för att visa informationslagringsstrukturen ( entitetsklasser).

De entitetsklasser som vi har utformat visas i fig. 4.

Från objektmodellen för entitetsklasser erhöll vi en fysisk datamodell för ett relationellt DBMS och gav dess generering för ett specifikt DBMS. Detaljerna om hur detta kan göras i Rational Rose -miljön utelämnas här.

Eftersom vi planerar att bygga ett GUI baserat på Delphi -objektmodellen är det rimligt att anta att gränsklasserna ) kan erhållas genom att prototypera användargränssnittet i Delphi -miljön. Klasser användargränssnitt (gränsklasser ) projiceras för den form som visas i fig. fem.

I klassdiagrammet tog vi bort attributen och operationerna för alla klasser i Delphi -objektmodellen: eftersom det finns flera dussin av dessa attribut och operationer i varje klass skulle diagrammet i detta fall bli enormt. Diagrammet visar tydligt exakt vilka klasser i Delphi -objektmodellen som används för att representera elementen i användargränssnittet och vad de exakt representerar. Uteslut omedelbart från modellvyn TGroupBox och TLabel som arkitektoniskt obetydliga element. Klassdiagrammet för tabellredigeringsformuläret visas i fig. åtta.

Förutom huvudfönstret behöver vi också ett gränssnitt (GUI) för att underhålla en databas med patienter, typer av indikatorer och måttenheter. Vi planerar att använda för detta ett vanligt tabellredigeringsformulär baserat på standard Delphi -komponenter. Låt oss rita denna form i Delphi och konvertera den till en Rational Rose -modell (Figur 9).

Alla andra skärmformulär som använder arvsmekanismen kommer från formuläret för redigeringstabellen. Ett exempel på hur en referens av observationstyper kommer att se ut visas i fig. 10.

Så med utseende användargränssnitt har vi helt bestämt oss, och nu kan vi fokusera på att implementera applikationens logik. För enkelhets skull (men det är inte nödvändigt att ta det som en vanlig praxis!), Kommer vi att använda den redan befintliga gränssnittsklassen som kontrollklassen TMainForm.

TMainForm -klassen bör innehålla:

  • navigering mellan skärmar, hantering av knapptryckningar för att visa andra former;
  • fylla i listrutor, patienter, indikatorer, måttenheter;
  • automatisk beräkning av måttenheten efter typ av indikator;
  • patientval efter kortnummer;
  • val av kortnummer för patienten;
  • beräkning och visning av indikatorns sista värde.

Låt oss skapa operationer i Rational Rose -miljön för att implementera funktionerna i TMainForm -klassen som beskrivs ovan (fig. 11).

Funktioner i TMainForm -klassen bör delas in i två grupper: beräkningar och reaktioner på händelser. Operationer som slutar med Klick eller Förändra, såväl som FormShow- reaktioner på händelser, resten är beräkningar.

Verksamheten måste implementera följande:

  • FillPatientLis t - fylla i listrutan över patienter;
  • FillMeasureList- fylla i listrutan över måttenheter;
  • FillObservList- fylla i rullgardinsmenyn med observationstyper;
  • CalcObservVal- beräkning av det senast observerade värdet;
  • ChPatientByCard- söka efter en patient med kortnummer;
  • ChCardByPatient- söka efter kortnumret för patienten;
  • ChMeasureByObserv- returnera måttenheten för den angivna typen av observation;
  • CardValChange- reaktion på att ändra kortnumret;
  • PatientChComboChange- reaktion på valet av en ny patient i listan;
  • ObservTypeComboChange- reaktion på valet av typ av observation;
  • GetValueButtonClick- reaktion på att trycka på knappen för att beräkna värdet;
  • PatientDictClick- reaktion på att trycka på patientknappen;
  • ObservTypeDictClick- reaktion på att trycka på knappen Observationstyper;
  • MeasureDictClick- reaktion på att trycka på knappen Måttenheter;
  • FormShow- bearbetning när formuläret först visas på skärmen.

Och det sista som behövs för att slutföra designen är kontrollklasser för att genomföra interaktion med databasen. Utan dem är det omöjligt att fylla databasen och inte heller genomföra beräkningsoperationerna för TMainForm -kontrollklassen. Som i fallet med gränssnittsklasser kommer vi att använda miljön Delphi att designa en kontrollklass för att interagera med en databas - TDataModule1, och sedan utför vi modellmatchning. Den nya modulen för interaktion med databasen visas i fig. 12.

Objektbaserad QueryPatient, QueyObType, FrågaMått och PatientDataSource, ObTypeDataSource, MeasureDataSource arbetet med en databas över patienter, observationstyper och måttenheter implementeras - på ett standard sätt för Delphi, baserat på användning av ett par klassobjekt TQuery, TDatakälla och deras interaktion med GUI -klasser. ObservDataSource används för att komma åt information om gjorda observationer. För att beskriva interaktionen mellan kontrollklasser TDataModule1 och TMainForm du bör skapa flera interaktionsdiagram relaterade till utförandet av de nödvändiga frågorna till databasen (med tanke på artikelns begränsade storlek utelämnar vi dessa diagram).

Observera att under processen att lägga till nya moduler och klasser till systemet och matchande modeller fick vi automatiskt en komponentmodell av systemet (fig. 13).

Så, låt oss sammanfatta. Som ett resultat av att använda Rational Rose och Delphi tillsammans fick vi:

  • gränssnitts- och managementklasser organiserade i paket;
  • komponentmodell av systemet.

Entitetsklasserna och dynamikdiagrammen är utformade i Rational Rose. I framtiden ger Rational Rose -modeller oss en grund för att dokumentera projektet, för att spåra dess status och organisation. funktionstest... Projektet som tas emot i Delphi är i sin tur grunden för genomförandet av implementeringen. I implementeringsprocessen förenas projektet regelbundet i Delphi med modellen Rational Rose baserad på tekniken rundresa, som gör att du kan hålla modellerna uppdaterade och smidigt genomföra deras utveckling i enlighet med de ändrade kraven för systemet.

Slutsats

Sammanfattningsvis vill vi uppmärksamma stadierna där, enligt vår mening, det gemensamma användandet av Delphi och Rational Rose är mest ändamålsenligt ur teknisk synvinkel.

för det första , detta är prototypen av användargränssnittet. Snabb skapelse formulär i Delphi -miljön låter dig också snabbt få en modell av gränssnittsklasser i Rose, för att på grundval av dessa markera de grundläggande arkitektoniska punkterna (till exempel vanligt beteende, typiska GUI -element, redundans), och också att jämföra gränssnittsklasser med funktionella krav på systemet.

För det andra är skapandet av kontrollklasser i Rational Rose -modeller, följt av kodgenerering i Delphi. Kontrollklasser representeras tydligare i Rational Rose -miljön med hjälp av UML (i Delphi kan de vara "suddiga" bland de betydande i volymgränssnittsklasserna).

Till sist, tredje , detta är steget i implementeringen av programkoden där modellen kan ändras i samband med implementeringsfrågor. Periodiskt godkännande av modeller i detta skede gör det möjligt för utvecklaren att se till att de grundläggande arkitektoniska lösningarna inte har genomgått betydande förändringar, samt att ha uppdaterade modeller som speglar det faktiska utvecklingsläget.

ComputerPress 4 "2001

När den kungliga skönheten i klätterrosen "Elf" blommar är alla hisnande. Som en fantastisk besatthet visas de öppnade blomställningarna i ett vackert ljust moln, snövit på avstånd och nära med en behaglig citronfräschör. Denna bestående prakt gläder hela säsongen och inspirerar romantiska tankar. Handen sträcker ut handen till blomman, men inte för att plocka den, utan bara för att röra vid det jordiska skapandet och andas in en fascinerande doft.

En tomte kan inte leva utan kärlek, men det är också omöjligt att inte älska honom.

Klätterros "Elf" föddes av det tyska företaget Tantau (serien "Nostalgiska rosor") år 2000 och är en modern trädgårdsros Storblommig klättrare (LCI).

Uppfödarna har skapat en växt med en sofistikerad kombination av en elegant silhuett och mild nostalgisk romantik. Här är namnet i sig i överensstämmelse med sitt utseende, som om det hade härrört från ett fantastiskt land.

Beskrivning

Busken är kraftig (upp till 280 cm hög, sällan upp till 250) och upprätt. Klättrande skott når ibland tre meter.

Blommor - stora i diameter upp till 14 cm, tätt dubbla. Varje blomglas innehåller upp till 57 kronblad på ett fantastiskt sätt. Deras unika färg av ädel elfenben längs kanterna, passerar smidigt till basen i en ljusgrön med en citronfärg. Kanske är det därför aromen är original - delikat, lätt fruktig, förtrollande och lockande.

Under gynnsamma förhållanden under massblomning kastar en peduncle samtidigt upp till fem blommor i ett paraply blomställning.

Bladen är stora, ljusgröna. I reflektionen av glansigt lövverk, gillar solen att preen.

Agroteknik

  1. Betingelser. Klätterros "Elf" behöver varma soliga platser. Marken ska vara bördig och lätt, lätt sur eller neutral. Huvudsaken är att den behåller fukten väl. Som alla släktingar behöver hon regelbunden utfodring (t ex hästgödsel) och skydd för vintern.
  2. Landning. På våren, före plantering, blötläggs plantan i vatten i en dag. Under denna tid kommer rotsystemet att ha tid att mättas med fukt. Sedan skärs plantans svaga skott bort och de starka lämnas och köper generisk accutan. Skadade och långa rötter trimmas.
  3. Stabilitet. "Elf" -sorten är ganska frostbeständig och lyckas till och med bevara lövverk. Men vid mycket låga temperaturer är frysning möjlig. Det blir inte sjukt med mjöldagg och svart fläck. Men blommor gillar inte regn och skugga.
  4. Stöd. Om rosen riktas längs ett tunt oansenligt stöd, kommer de kraftfulla sidoskotten att skapa bilden av ett flytande träd med många magnifika knoppar.

"Elf" ser perfekt ut i en romantisk trädgård i form av valv, dekorerar väggar och lusthus. Citron-krämiga kaskader kommer pittoreskt att böja sig under tyngden av stora blommor, vars kronblad huggen av en skicklig "mästare". Denna ros är för förälskade romantiker och de som har en extraordinär stilkänsla. Och om verbena, kattmynta, lavendel planteras vid dess fot, så kommer deras känsliga löv och luftiga, frodiga blomställningar att vackert inrama och komplettera skönheten i klätterrosen.

Växten är i frodig blomning, som fantastiska älvkvinnor, full av livfulla känslor. Rose "Elf" kan vara föränderlig och nyckfull, samtidigt är den full av charm, förmågan att förtrolla och förändra världen med sin skönhet. Den fantastiska busken ger en nostalgisk touch till vårt vardagsliv, och det är så vackert.


Materialet publicerades i mars
nummer av tidningen "Programmerare" för 2002

Företag

Rationell programvara har varit ledande inom skapandet av verktyg för att designa, utveckla, testa och underhålla programvara i flera år. Huvudprodukten i serien Rational är verktyget Rational Rose CASE. Rationell ros stöder visuell objektorienterad modellering ( UML ), stöder kodgenerering och reverse engineering (bygga en modell från programkod) för många programmeringsspråk, låter dig bygga en objektmodell av den utvecklade mjukvarusystem, definiera specifikationer för klasser, objekt, attribut och operationer (för mer information se "Programmerare" nr 2, 3, 5/6 för 2001). Rationell ros har alla nödvändiga egenskaper för utformningen av arkitekturen i ett system av vilken skala som helst, tanken på att använda Reste sig med ett så kraftfullt och populärt programmeringssystem som Delphi ... Standard leverans Rationell ros det går inte att arbeta med Delphi men rationell programvara kör ett program för att stödja tredjeparts bridge-mjukvaruleverantörer ( Länkar) mellan Rose och andra utvecklingsverktyg. Under detta program, företaget Ensemblesystem ett broprogram utvecklades Rose Delphi Link (RDL) som länkar Rational Rose och Delphi ... Huvud funktioner RDL - kodgenerering och omvänd teknik. Det bör komma ihåg att den genererade RDL koden innehåller inte implementeringen av funktionaliteten! Endast deklarativa element genereras: definitioner av klasser, gränssnitt, poster, typer, synlighetsdirektiv etc.

Distributionssats

Rose Delphi Link kan laddas ner gratis från webbplatsen Rationell programvara (http://ftp.rational.com/public/rose/Links/RoseDelphiLink3Setup.exe ), är storleken cirka 8 MB. Installation RDL standard, orsakar inga svårigheter. Efter installation av programmet i Rational Rose, ett nytt objekt Ensemble Tools ® Rose Delphi Link visas på menyn Verktyg (Fig. 1).

1. RDL -menyalternativ

Innan vi överväger

Rose Delphi Link , låt mig påminna dig om de viktigaste stadierna av arbetet i miljön Rationell ros ... Normalt används följande tillvägagångssätt:
  1. Fastställa systemkrav och bygga en modell för interaktion mellan systemelement (
Använd falldiagram och samarbetsdiagram ). För detaljer Use Case som används av Sequence Diagram ... Dessa diagram visar domänobjekt som är involverade i affärsprocesser. Dessa diagram påverkar inte den genererade koden.
  • Bygga en hårdvarumodell av systemet (
  • Distributionsdiagram ). Detta diagram visar en modell av systemet för hårdvaruimplementering. Diagrammet påverkar inte den genererade koden RDL.
  • Utveckling av en objektmodell av systemet (definition av klasser, deras interaktioner, attribut, operationer). Parallellt med utvecklingen av ett klassdiagram, som regel, ett komponentdiagram (
  • Komponentdiagram ), som visar interaktionen mellan filer, moduler, ytterligare bibliotek som används i systemet. Komponentschema påverkar inte heller kodgenerering.
  • Generering av programkoden.
  • Endast klassdiagram påverkar kodgenerering, så i den här artikeln kommer vi bara att överväga sektionsdiagram.

    Logisk vy ... Funktioner för att konstruera andra diagram utelämnas.

    De listade designstadierna i miljön

    Rationell ros används för modellutveckling och kodgenerering på olika språk som stöds av miljön Reste sig. Men i Delphi det finns en funktion som signifikant skiljer utvecklingen inom Delphi från utveckling i andra programmeringsmiljöer: programmering av användargränssnitt. Det är ingen hemlighet att i Delphi utvecklingen av de flesta programmen börjar just med utformningen av användargränssnittet och med ytterligare programmering - dess betydande förändring. Så använd standardmetoden Rationell ros inte särskilt bekvämt. För att lösa detta problem, företaget Ensemblesystem föreslår följande konstruktionsmetodik:

    Figur 2. Designmetodik med

    RDL

    Huvudidén bakom detta tillvägagångssätt är att använda omvänd teknik (

    Rundtursteknik ): alla ändringar som gjorts på kodnivå i Delphi visas i den inbyggda objektmodellen Reste sig , och vice versa, när man ändrar klasser, metoder etc. i objektmodellen Reste sig , respektive,programkoden korrigeras. Lägg märke till pilarna som förbinder det tredje och fjärde blocket. Dessa pilar representerar omvänd teknik.

    Tänk på huvudfönstret

    Rose Delphi Link (fig. 3). Gränssnittet är ganska enkelt, det innehåller:
    • en meny som innehåller kommandon för att arbeta med ett projekt, inställningsalternativ och ringa hjälp;
    • paneler på vilka hierarkiska modeller av modeller visas i form av träd
    Rose och Delphi;
  • objektträdets uppdateringsknapp, knappar för omvänd teknik (¬
  • Uppdatera alla) och direkt design, dvs. generera kod (Uppdatera All®).

    Figur 3. Allmänt

    Rose Delphi Link -fönster

    Huvudfönster

    RDL är ett barn i huvudfönstret Rationell ros och är ständigt ovanpå detta fönster, minimerar så här precis som ett barnfönster, vilket utan tvekan är mycket bekvämt.

    Innan vi analyserar ett specifikt exempel, låt oss titta närmare på menyalternativen.

    Rose Delphi Link.

    File ® Open Project - tjänar till att öppna RDL skapat projekt Delphi ... När du öppnar ett projekt i ett fönster RDL objektträd i det öppnade projektet visas.

    File ® Nytt projekt- när detta menyalternativ har valts RDL föreslår att du skapar ett tomt Delphi -projekt. Projektfilen som skapades i det här fallet innehåller endast deklarativa element,krävs för ett minimalt program Delphi (program, börja, slut ). Det är värt att skapa ett nytt projekt om programmet inte innehåller ett grafiskt användargränssnitt, till exempel ett dynamiskt bibliotek. Det är sant att i det här fallet måste en justering göras i den genererade koden - för att ersätta den program till bibliotek ... Med hjälp av snabbmenyn kan du skapa moduler ( enhet ) och ytterligare kataloger för moduler. Moduler som skapats på detta sätt innehåller också endast minimal implementering ( användningsområden, gränssnitt, implementering, slut ). Efter att ha skapat modulen, med den efterföljande generationen av koden, i avsnittet användningsområden en ny moduldeklaration läggs till i projektfilen.

    Menyalternativ Se och Hjälpär standard och behöver inte beskrivas i denna artikel.

    Nu kommer vi att använda ovanstående designmetodik och utveckla programmet och motsvarande modell.

    Reste sig ... Låt oss till exempel ta ett program som fyller två numeriska grupper 5 med 5 slumpmässiga nummer, samt implementera några matematiska funktioner för deras bearbetning. Programmet ska utföra följande funktioner:
    • Fyll matriser med slumpmässiga nummer från 1 till 10;
    • Beräkna summan av elementen i varje array;
    • Bestäm elementens aritmetiska medelvärde;
    • Rensa matriser (initiera dem med nollor).

    Låt oss börja med att utveckla användargränssnittet i

    Delphi ... Som ett resultat av enkla åtgärder med musen fick jag ett program som detta, som fortfarande inte utför några åtgärder (fig. 4).

    Figur 4. Gränssnittet för det utvecklade programmet

    Låt oss spara detta projekt med namnen på de föreslagna modulerna

    Delphi som standard, öppna nytt projekt Rational Rose, och lansera Delphi Rose Link ... Låt oss välja ett menyalternativÖppet projekt,och öppna just sparade i Delphi -projekt. I RDL -fönstret modellobjektträd visas Rose och Delphi -projektet (figur 5).

    Figur 5. Projekt

    Delphi Öppnad i RDL

    Objektets vänstra träd är modellobjekt

    Reste sig , det rätta trädet är de objekt som deklareras i källkoden Delphi ... Lägg märke till de röda utropstecknen till vänster om objektikonerna. De markerar skillnaderna mellan koden Delphi och Rose modell ... Nu är alla ikoner markerade, eftersom modellerna i Reste sig existerar inte alls ännu.

    Nästa steg är att generera modellen

    Reste sig enligt källkoden. För att börja generera måste du trycka på knappen ¬Uppdatera alla.Vid framgångsrik generation utropstecken objekt försvinner, vilket innebär att modellen Reste sig för varje objekt motsvarar källkoden Delphi ... Om du vill visa historiken för generationsmeddelanden väljer du menyalternativetVisa ® Meddelanden... En ganska detaljerad meddelandelogg visas i fönstret som öppnas. RDL utmatning när en modell eller källkod genereras. Rose Delphi Link och i objektbläddraren Rose, välj grenen Logisk vy ... Vi ser två paket som har dykt upp:<> Enhet1som innehåller objektmodellen för koden från modulen Unit1.pas och Externa referenser,innehållande föremål Delphi som deklareras i moduler utanför det aktuella projektet (biblioteksobjekt VCL).

    Låt oss nu öppna i miljön

    Reste sig klassdiagrammet som motsvarar modulen Enhet 1 ( Logical View ® Unit1 ® Översikt). I sin ursprungliga form visar diagrammet en lätt invecklad objektmodell, som vi kommer att städa genom att ordentligt ordna objekt enligt deras hierarki (figur 6).

    Figur 6. Modell av modulobjekt

    Enhet 1

    När gränssnittet för programmet som utvecklas är ganska komplext och innehåller mer än ett dussin element, visar objektmodellen sig vara något överbelastad. För att ladda ur modellen kan du ta bort några obetydliga element från modellen. Du behöver bara ta bort element från diagrammet, eftersom de i detta fall endast tas bort visuellt. När objekt raderas från webbläsaren raderas objekt permanent, och detta innebär en ändring av det genererade

    RDL koda.

    Låt oss nu gå vidare till nästa steg: utveckla en objektmodell som implementerar programmets ovanstående funktionalitet. Klasserna, deras attribut och metoder kommer att implementeras i en separat modul, i huvudmodulen skapar vi instanser av klasserna, och i knapptryckningshändelsehanteraren skriver vi samtalen till metoderna för dessa klasser.

    Låt oss skapa en ny modul. Detta kan göras i

    Delphi, Rose och RDL , men för experimentets renhet kommer vi att skapa allt bara i RDL. I Rose aktivera fönstret RDL och högerklicka på rotelementet i modellobjektträdet Reste sig - i vårt fall är det Modell1.mdl ... I innehållsmeny väljaNy ® enhet.Komponentredigeringsfönstret öppnas ( Komponentredigerare ) (fig. 7). I flikenAllmänmodulens namn anges ( Enhet 2), och en kommentar till den skapade modulen, som kommer att infogas i modulen som en kommentar under kodgenerering. I flikenDetaljformen ( snäll ) -komponenten och vägen till källfilen... I flikenFörhandsvisning av koddu kan se koden som kommer att genereras RDL för denna modul. Stäng avTillåt uppdateringar av kod / modellinaktiverar kodgenerering och modelluppdatering för det valda objektet.

    Figur 7. Komponentredigerare

    Efter att ha tryckt på knappen

    Okvi ser det i fönstret RDL det finns en ikon som representerar den nya modulen, och bredvid den Utropstecken signalerar att modellen Rose and Delphi Code inte synkroniserad. Låt oss uppdatera koden Delphi genom att klicka på knappen Uppdatera All®.

    Nu måste du byta till

    Delphi ... Vi ser ett fönster som varnar för att modulen har ändrats (bild 8). Klicka på för att ladda ner den uppdaterade modulenOk.

    Figur 8. Meddelande

    Delphi om att ändra projektfilen

    Låt oss nu öppna modulen vi just skapade

    Unit2.pas ... Du kan se till att kodgenereringen var framgångsrik - allt som behövs nyckelord, en kommentar infogas. Nästa steg är att modellera klasserna och deras metoder i denna modul. Låt oss gå till Reste sig och aktivera fönstret RDL ... Visa snabbmenyn på objektet i objektträdet Enhet 2 och välj objektNy ® klass... Fönstret för klassredigerare visas ( Klassredaktör ) (fig. 9). I flikenAllmändu måste ange klassnamnet ( Namn), Kind, Synlighet ) och klasskommentar ( Dokumentation ). I vårt fall kommer klassen att kallas TMassiv , utrymmet för det är Offentlig.

    Figur 9. Klassredigerare

    För att skapa alla metoder och attribut för klassen använder vi menyalternativet

    Nyi snabbmenyn för klassen i objektträdet RDL ... Attribut- och metodredigerare är i princip desamma som klassredigeraren, så vi hoppar över detaljerna i skapandet. Låt oss skapa följande attribut och metoder (alla metoder med synlighetsdirektiv Offentlig, attribut M har utseendet Privat):

    M: grupp av heltal;

    ; // Initiera matrisen

    procedur FillMassiv

    ; // Fyll matrisen med slumpmässiga nummer

    procedur CalcSum

    ; // Beräkna summan av arrayelementen

    procedur CalcSr

    ; // Beräkna medelvärdet för arrayelementen

    funktion GetElement (X, Y: heltal): Heltal; //

    Skaffa ett arrayelement (x, y)

    Vi kommer också att skapa en metod för klassen

    TForm 1 som fyller komponenterna TMemo finns på formuläret, element från matriser:

    procedur GetMassiv;

    Det finns en egenhet i att skapa metoder med parametrar. Först skapas metoden på vanligt sätt, sedan i objektträdet

    RDL , i snabbmenyn på metoden för vilken du uppmanas att ange en parameter, välj objektetNy ® parameteroch namnet på parametern, dess typ och kommentar till den anges.

    Efter att ha skapat klassen, ta en titt på klassdiagrammet för modulen

    Enhet 2 i Rose - vår klass visas enligt specifikationen UML (Figur 10).

    Figur 10. Klassdiagram med genererad klass

    Så, klassen har skapats, eller snarare dess omslag, hittills utan implementering. Nu i huvudmodulen

    Enhet 1 låt oss skapa två instanser av den här klassen. Låt oss förklara dem som M1 och M2 i den offentliga sektionen i TForm -klassen 1. Detta görs genom att välja de nödvändiga objekten i objektträdets snabbmeny och ange parametrarna i attributredigeraren. Modifierat diagram var i klassen TForm 1 visar deklarerade instanser av klassen, som visas i fig. elva.

    Figur 11. Instanser av en klass som deklareras i ett avsnitt

    allmänhet i klass TForm1

    Så modellen är byggd och nu måste vi generera den slutliga koden. I fönstret

    RDL -klick Uppdatera, uppdatera alla®och gå till onsdag Delphi ... Nu måste vi skriva koden som implementerar funktionaliteten och kompilera programmet. När du fyller i metoder med kod måste du ibland lägga till lokala eller globala variabler. Detta kan göras i RDL men det är bättre att implementera dessa variabler i kod och sedan uppdatera modellen Reste sig med källkod Delphi (¬ Uppdatera alla). Om vissa element har tagits bort i modellen, och de redan är implementerade i koden, är denna kod inkluderad mellan kompilaterdirektiven($ IFDEF DELETED) och ($ ENDIF).

    Efter att ha implementerat all källkod i

    Delphi tillbaka till RDL och omvända den igen genom att trycka påUppdatera och ¬ Uppdatera alla... TForm -klass 1 har ändrats - metoder dök upp i det - händelsehanterare för knappar (bild 12). I vårt fall är detta den slutliga versionen av klassdiagrammet och hela modellen som helhet.

    Figur 12. Den slutliga versionen av klassdiagrammet för modulen

    Enhet 1

    Slutlig källa program och byggd modell

    Reste sig kan laddas ner från tidningens webbplats.

    I det aktuella exemplet följde vi applikationsutvecklingsmetoden som utvecklaren föreslog

    Rose Delphi Link , och som ett resultat fick vi objektmodellen för systemet. Alla klasser och diagram som beskriver systemets aktivitet utformades i Rationell ros använder programmet Rose Delphi Link.

    Så, låt oss markera de främsta fördelarna med att dela

    RDL och Rational Rose:
    • snabb och enkel prototyp av användargränssnittet;
    • möjlighet att få detaljerad modell gränssnittsklasser, och på dess grundval för att lyfta fram de grundläggande arkitektoniska särdragen i systemet;
    • förmågan att matcha klasser med funktionella krav för systemet;
    • möjligheten att skapa kontrollklasser i modeller
    • Rationell ros med den efterföljande generationen av koden i Delphi;
    • fullt stöd för livscykeln för det utvecklade mjukvarusystemet när du använder andra produkter från företaget
    • Rationell.

    Således, med periodisk försoning baserad på omvänd teknik, matchar modellen

    Rose and Delphi Code , vilket gör att utvecklaren kan se till att de arkitektoniska lösningarna inte har genomgått betydande förändringar, samt att ha uppdaterade dokumenterade modeller som återspeglar det faktiska läget för projektutvecklingen.

    Litteratur:

    1. Vendrov A.M. Programvarudesign för ekonomiska informationssystem. - M.: Finans och statistik, 2000
    2. Trofimov S.A.
    3. FALL -teknologi: praktiskt arbete i Rationell ros - ”Förlag BINOM”, 2001
    4. Booch G., Rambeau D., Jacobson A. Language
    5. UML ... Användarmanual: Per. från engelska - M.

    Rational Software har varit ledande inom verktyg för mjukvarudesign, utveckling, testning och underhåll i flera år. Huvudprodukten i Rational -serien är verktyget Rational Rose CASE. Rational Rose stöder visuell objektorienterad modellering (UML), stöder kodgenerering och reverse engineering (bygger en modell från programkod) för många programmeringsspråk, låter dig bygga en objektmodell för det utvecklade mjukvarusystemet, definiera specifikationer för klasser, objekt , attribut och operationer (för mer information, se "Programmerare" nr 2, 3, 5/6 för 2001).

    Eftersom Rational Rose har alla nödvändiga egenskaper för att utforma arkitekturen för ett system i vilken skala som helst, är tanken på att använda Rose med ett så kraftfullt och populärt programmeringssystem som Delphi föreslår själv. Rational Rose kommer inte som standard med Delphi, men Rational Software har ett program för att ge stöd för tredjeparts överbryggande programvara (länkar) mellan Rose och andra utvecklingsverktyg. Som en del av detta program utvecklade Ensemble Systems Rose Delphi Link (RDL) broprogram som förbinder Rational Rose och Delphi. Huvudfunktionerna för RDL är kodgenerering och reverse engineering. Kom ihåg att den genererade RDL -koden inte innehåller implementeringen av funktionaliteten! Endast deklarativa element genereras: definitioner av klasser, gränssnitt, poster, typer, synlighetsdirektiv etc.


    Figur 1. RDL -menyalternativ

    Innan jag går vidare till Rose Delphi Link, låt mig komma ihåg de viktigaste stadierna i arbetet i Rational Rose -miljön. Normalt används följande tillvägagångssätt:

    1. Fastställa systemkrav och bygga en modell för interaktion mellan systemelement (Use Case Diagram och Collaboration Diagram). Sekvensdiagrammet används för att beskriva användningsfallet. Dessa diagram visar domänobjekt som är involverade i affärsprocesser. Dessa diagram påverkar inte den genererade koden.
    2. Bygga en hårdvarumodell av systemet (distributionsdiagram). Detta diagram visar en modell av systemet för hårdvaruimplementering. Diagrammet påverkar inte koden som genereras av RDL.
    3. Utveckling av en objektmodell av systemet (definition av klasser, deras interaktioner, attribut, operationer). Parallellt med utvecklingen av ett klassdiagram utvecklas som regel ett komponentdiagram som visar interaktionen mellan filer, moduler, ytterligare bibliotek som används i systemet. Komponentschema påverkar inte heller kodgenerering.
    4. Generering av programkoden.
      Endast klassdiagram påverkar kodgenerering, så i den här artikeln kommer vi bara att överväga diagram över avsnittet Logisk vy. Funktioner för att konstruera andra diagram utelämnas. Dessa designsteg i Rational Rose -miljön används för att modellera utveckling och kodgenerering på de olika språken som stöds av Rose -miljön. Men Delphi har en funktion som signifikant skiljer utvecklingen i Delphi från utveckling i andra programmeringsmiljöer: programmering av användargränssnitt. Det är ingen hemlighet att utvecklingen av de flesta program i Delphi börjar just med utformningen av användargränssnittet, och med ytterligare programmering, dess betydande förändring. Därför är det inte särskilt bekvämt att använda standardmetoden Rational Rose. För att lösa detta problem erbjuder Ensemble Systems följande designmetodik:


    Figur 2. Designmetodik med RDL

    Huvudidén med detta tillvägagångssätt är att använda rundtursteknik: alla ändringar som görs på kodnivå i Delphi återspeglas i objektmodellen som byggdes i Rose, och vice versa, när klasser, metoder etc. ändras. i Rose -objektmodellen justeras programkoden därefter. Lägg märke till pilarna som förbinder det tredje och fjärde blocket. Dessa pilar representerar omvänd teknik.
    Låt oss överväga huvudfönstret i Rose Delphi Link (Fig. 3). Gränssnittet är ganska enkelt, det innehåller:

    • en meny som innehåller kommandon för att arbeta med ett projekt, inställningsalternativ och ringa hjälp;
    • paneler på vilka hierarkiska strukturer av Rose- och Delphi -modeller visas i form av träd;
    • knapp för uppdatering av objektträd, knappar för reverse engineering (Update All) och forward engineering, d.v.s. kodgenerering (Uppdatera alla->).


    Figur 3. Rose Delphi Link huvudfönster

    Det huvudsakliga RDL -fönstret är ett barn i huvudfönstret i Rational Rose och är ständigt ovanpå detta fönster, minimerat som ett barnfönster, vilket utan tvekan är mycket bekvämt.
    Innan vi analyserar ett specifikt exempel, låt oss ta en närmare titt på menyalternativen Rose Delphi Link.
    Arkiv -> Öppna projekt - tjänar till att öppna det skapade Delphi -projektet i RDL. När ett projekt öppnas visas objektträden för det öppnade projektet i RDL -fönstret.
    Arkiv -> Nytt projekt - när detta menyalternativ väljs erbjuder RDL att skapa ett tomt Delphi -projekt. Projektfilen som skapas i det här fallet innehåller endast deklarativa elementen som krävs för ett minimalt Delphi -program (program, start, slut). Det är värt att skapa ett nytt projekt om programmet inte innehåller ett grafiskt användargränssnitt, till exempel ett dynamiskt bibliotek. Det är sant att i det här fallet måste en justering göras för den genererade koden - för att ersätta programmet med biblioteket. Med hjälp av snabbmenyn kan du skapa enheter och ytterligare kataloger för moduler. Enheterna som skapas på detta sätt innehåller också endast den minimala implementeringen (användningsområden, gränssnitt, implementering, slut). Efter att enheten har skapats, under den efterföljande genereringen av koden, läggs deklarationen för den nya enheten till avsnittet Användningar i projektfilen.
    Menyalternativen Visa och Hjälp är standard och behöver inte beskrivas i denna artikel.

    Nu kommer vi att använda ovanstående designmetodik och utveckla programmet och dess motsvarande Rose -modell. Som ett exempel, låt oss ta ett program som fyller två numeriska matriser med storleken 5 gånger 5 med slumpmässiga tal, och implementerar också några matematiska funktioner för deras bearbetning. Programmet ska utföra följande funktioner:

    • Fyll matriser med slumpmässiga nummer från 1 till 10;
    • Beräkna summan av elementen i varje array;
    • Bestäm elementens aritmetiska medelvärde;
    • Rensa matriser (initiera dem med nollor).

    Låt oss börja med att utveckla användargränssnittet i Delphi. Som ett resultat av enkla åtgärder med musen fick jag ett program som detta, som fortfarande inte utför några åtgärder (fig. 4).


    Figur 4. Gränssnittet för det utvecklade programmet

    Spara detta projekt med standardnamnen i Delphi -modulen, öppna ett nytt Rational Rose -projekt och starta Delphi Rose Link. Välj menyalternativet Öppna projekt och öppna projektet du just sparade i Delphi. RDL -fönstret visar Rose -modellen och Delphi -projektträden (figur 5).


    Figur 5. Delphi -projektet öppnade i RDL

    Objektets vänstra träd är föremål för Rose -modellen, det högra trädet är de objekt som deklareras i Delphi -källkoden. Lägg märke till de röda utropstecknen till vänster om objektikonerna. De representerar skillnaderna mellan Delphi -koden och Rose -modellen. Nu är alla ikoner markerade, eftersom modellen i Rose ännu inte alls finns.
    Nästa steg är att generera Rose -modellen från källkoden. För att börja generera måste du klicka på knappen Uppdatera alla. Om genereringen lyckas försvinner utropstecknen från objekten, vilket innebär att Rose -modellen för varje objekt motsvarar Delphi -källkoden. Om du vill visa historiken för genererade meddelanden väljer du menyalternativet Visa -> Meddelanden. I fönstret som öppnas visas en ganska detaljerad logg över RDL -meddelanden som visas när en modell eller källkod genereras.
    Låt oss komprimera Rose Delphi -länken, och i Rose -objektbläddraren väljer du grenen Logisk vy. Vi ser två paket som har dykt upp:<>Unit1, som innehåller kodobjektmodellen från Unit1.pas och Externa referenser, som innehåller Delphi -objekt som deklareras i moduler utanför det aktuella projektet (VCL -biblioteksobjekt).
    Låt oss nu öppna ett klassdiagram i Rose -miljön som motsvarar Unit1 -modulen (Logisk vy -> Unit1 -> Översikt). I sin ursprungliga form visar diagrammet en lätt invecklad objektmodell, som vi kommer att städa genom att ordentligt ordna objekt enligt deras hierarki (figur 6).


    Figur 6. Objektmodell för Unit1 -modulen

    När gränssnittet för programmet som utvecklas är ganska komplext och innehåller mer än ett dussin element, visar objektmodellen sig vara något överbelastad. För att ladda ur modellen kan du ta bort några obetydliga element från modellen. Du behöver bara ta bort element från diagrammet, eftersom de i detta fall endast tas bort visuellt. När objekt raderas från webbläsaren raderas objekt permanent, och detta innebär en ändring av den genererade RDL -koden.
    Låt oss nu gå vidare till nästa steg: utveckla en objektmodell som implementerar programmets ovanstående funktionalitet. Klasserna, deras attribut och metoder kommer att implementeras i en separat modul, i huvudmodulen skapar vi instanser av klasserna, och i knapptryckningshändelsehanteraren skriver vi samtalen till metoderna för dessa klasser.

    Låt oss skapa en ny modul. Detta kan göras i Delphi, Rose och RDL, men för experimentets renhet kommer vi att skapa allt bara i RDL. I Rose aktiverar du RDL-fönstret och högerklickar på rotelementet i objektmodelträdet Rose-modell-i vårt fall Model1.mdl. I snabbmenyn väljer du Ny -> Enhet. Fönstret Komponentredigerare öppnas (Figur 7). Fliken Allmänt indikerar modulens namn (Unit2) och en kommentar till den skapade modulen, som kommer att infogas i modulen som en kommentar under kodgenerering. Fliken Detalj anger komponentens typ (typ) och sökvägen till källfilen. På fliken Förhandsgranskning av kod kan du se koden som kommer att genereras av RDL för den här modulen. Inaktivering av knappen Tillåt kod / modelluppdateringar förhindrar kodgenerering och modelluppdateringar för det valda objektet.


    Figur 7. Komponentredigerare

    Efter att ha klickat på Ok -knappen ser vi att en ikon visas i RDL -fönstret som anger en ny modul och bredvid ett utropstecken som signalerar att Rose -modellen och Delphi -koden inte är synkroniserade. Låt oss uppdatera Delphi-koden genom att klicka på knappen Uppdatera alla->. Nu måste du byta till Delphi. Vi ser ett fönster som varnar för att modulen har ändrats (bild 8). Klicka på Ok för att ladda den uppdaterade modulen.


    Figur 8. Delphi -meddelande om projektfiländring

    Låt oss nu öppna unit2.pas som vi just skapat. Du kan se till att kodgenereringen var framgångsrik - alla nödvändiga sökord deklareras, en kommentar infogas. Nästa steg är att modellera klasserna och deras metoder i denna modul. Gå till Rose och aktivera RDL -fönstret. I objektträdet, visa snabbmenyn på Unit2 -objektet och välj Nytt -> Klassobjekt. Fönstret Klassredigerare visas (Figur 9). På fliken Allmänt måste du ange klassnamn (namn), typ (typ), synlighet (synlighet) och kommentar till klassen (dokumentation). I vårt fall kommer klassen att kallas TMassiv, utrymmet för den är Public.


    Figur 9. Klassredigerare

    För att skapa alla metoder och attribut för en klass använder vi menyalternativet Ny i klassens snabbmeny i RDL -objektträdet. Attribut- och metodredigerare är i princip desamma som klassredigeraren, så vi hoppar över detaljerna i skapandet. Låt oss skapa följande attribut och metoder (alla metoder med direktiv om offentlig synlighet, M -attributet har privat synlighet):
    M: grupp av heltal; procedur Init; // Initiera arrayproceduren FillMassiv; // Fyll matrisen med proceduren för slumpmässiga nummer CalcSum; // Beräkna summan av arrayelementproceduren CalcSr; // Beräkna medelvärdet för arrayelementfunktionen GetElement (X, Y: heltal): Integer; // Skaffa ett arrayelement (x, y) Låt oss också skapa en metod för TForm1 -klassen, som fyller TMemo -komponenterna i formuläret med element från matriserna:

    Förfarande GetMassiv;

    Det finns en egenhet i att skapa metoder med parametrar. Först skapas metoden på vanligt sätt, sedan, i RDL -objektträdet, i snabbmenyn på metoden för vilken du uppmanas att ange en parameter, välj alternativet Ny -> Parameter och ange namnet på parametern , dess typ och kommentar till den. När du har skapat klassen lägger du märke till klassdiagrammet för Unit2 i Rose - vår klass mappas enligt UML -specifikationen (figur 10).


    Figur 10. Klassdiagram med genererad klass

    Så, klassen har skapats, eller snarare dess omslag, hittills utan implementering. Nu, i huvudenheten Unit1, kommer vi att skapa två instanser av den här klassen. Låt oss förklara dem som M1 och M2 i den offentliga sektionen i TForm1 -klassen. Detta görs genom att välja de nödvändiga objekten i objektträdets snabbmeny och ange parametrarna i attributredigeraren. Det modifierade diagrammet, där deklarerade instanser av klassen visas i TForm1 -klassen, visas i fig. elva.


    Figur 11. Instanser av klassen som deklareras i det offentliga avsnittet i TForm1 -klassen

    Så modellen är byggd och nu måste vi generera den slutliga koden. I RDL-fönstret klickar du på Uppdatera, Uppdatera alla-> och går till Delphi-miljön. Nu måste vi skriva koden som implementerar funktionaliteten och kompilera programmet. När du fyller i metoder med kod måste du ibland lägga till lokala eller globala variabler. Detta kan göras i RDL, men det är bättre att implementera dessa variabler i kod och sedan uppdatera Rose -modellen från Delphi -källkoden (Update All). Om vissa element har tagits bort i modellen, men de redan är implementerade i koden, är denna kod inkluderad mellan kompilaterdirektiven ($ IFDEF DELETED) och ($ ENDIF). Efter att ha implementerat all källkod i Delphi, gå tillbaka till RDL och bakåtkonstruera igen genom att klicka på Uppdatera och uppdatera alla. TForm1 -klassen har ändrats - den har metoder - knapphändelsehanterare (fig. 12). I vårt fall är detta den slutliga versionen av klassdiagrammet och hela modellen som helhet.


    Figur 12. Den slutliga versionen av klassdiagrammet för Unit1 -modulen

    Den slutliga källkoden för programmet och den inbyggda modellen av Rose är tillgänglig.

    I det här exemplet följde vi applikationsutvecklingsmetoden som utvecklaren Rose Delphi Link föreslog, och som ett resultat fick vi systemobjektmodellen. Alla klasser och diagram som beskriver systemets aktivitet utformades i Rational Rose med hjälp av Rose Delphi Link -programmet. Så, låt oss lyfta fram de främsta fördelarna med att använda RDL och Rational Rose tillsammans:

    • snabb och enkel prototyp av användargränssnittet;
    • möjligheten att erhålla en detaljerad modell av gränssnittsklasser och på grundval av att lyfta fram de grundläggande arkitektoniska egenskaperna hos systemet;
    • förmågan att matcha klasser med funktionella krav för systemet;
    • möjligheten att skapa kontrollklasser i Rational Rose -modeller med efterföljande kodgenerering i Delphi;
    • fullt stöd för livscykeln för det utvecklade mjukvarusystemet när du använder andra produkter från det rationella företaget.

    Således säkerställer periodisk försoning baserad på omvänd teknik att Rose-modellen och Delphi-koden är konsekventa, vilket gör att utvecklaren kan se till att de arkitektoniska besluten inte har genomgått betydande förändringar, samt att ha uppdaterade dokumenterade modeller som återspeglar det faktiska utvecklingsläget för projektet.

    Litteratur:

    1. Vendrov A.M. Programvarudesign för ekonomiska informationssystem. - M.: Finans och statistik, 2000
    2. Trofimov S.A. CASE -tekniker: praktiskt arbete i Rational Rose - "BINOM Publishing House", 2001
    3. Booch G., Rambeau D., Jacobson A. The UML. Användarmanual: Per. från engelska - M.
    Dela detta