Megosztás:


Modellek, osztályok és kapcsolatok ismertetése

A tartományspecifikus nyelvet (DSL) a DSL-definíciós fájl határozza meg, valamint az esetlegesen írható egyéni programkódot. A DSL-megoldás legtöbb programkódja ebből a fájlból jön létre.

Ez a témakör a DSL-definíció központi funkcióit ismerteti.

A DSL-definíció

Amikor megnyitja Dsl\DslDefinition.dsl, a Visual Studio ablaka az alábbi képhez hasonlít.

dsl tervező

A DSL-definíció legfontosabb információi megjelennek a DSL-definíciós diagramon. A DslDefinition.dsl részét képező további információk a DSL Explorerben jelennek meg, amelyek általában a diagram oldalán jelennek meg. A leggyakoribb feladatok diagramjával és a DSL Explorerrel is dolgozhat a speciálisabb testreszabások érdekében.

A DSL-definíciós diagram a modellelemeket definiáló tartományosztályokat és a modellelemek közötti kapcsolatokat meghatározó kapcsolatokat mutatja be. A modellelemek felhasználónak való megjelenítéséhez használt alakzatokat és összekötőket is megjeleníti.

DSL tervező úszósávval

Amikor kiválaszt egy elemet a DSL-definícióban, akár a diagramon, akár a DSL Explorerben, a Tulajdonságok ablakban megjelennek az ezzel kapcsolatos információk. A DSL-részletek ablakban további információk is megjelenhetnek.

A modellek a DSL-ek példányai

A modell a felhasználó által létrehozott DSL-példány. A modell olyan modellelemeket tartalmaz, amelyek a definiált tartományosztályok példányai, valamint az elemek közötti kapcsolatok, amelyek a definiált tartománykapcsolatok példányai. A modellek alakzatokkal és összekötőkkel is rendelkezhetnek, amelyek a modell elemeit és hivatkozásait jelenítik meg egy diagramon. A DSL-definíció tartalmazza az alakzatosztályokat, az összekötőosztályokat és a diagram osztályát.

A DSL-definíciót tartománymodellnek is nevezik. A DSL-definíció vagy tartománymodell a tartományspecifikus nyelv tervezési idő szerinti ábrázolása, míg a modell a tartományspecifikus nyelv futásidejű példánya.

A tartományosztályok modellelemeket definiálnak

A tartományosztályok a tartomány különböző elemeinek létrehozására szolgálnak, a tartománykapcsolatok pedig az elemek közötti kapcsolatok. Ezek azok az elemek és hivatkozások tervezési idő szerinti ábrázolása, amelyeket a modelljeik létrehozásakor a tervezőspecifikus nyelv felhasználói fognak példányosíteni.

Ez az ábra egy olyan modellt mutat be, amelyet egy DSL zenetár felhasználója hozott létre. A zenei albumokat olyan dobozok jelölik, amelyek dallistákat tartalmaznak. A művészeket kerek sarkú dobozok képviselik, és azokhoz az albumokhoz kapcsolódnak, amelyekhez hozzájárultak.

A létrehozott DSL példánymodellje

A DSL-definíció két szempontot választ el egymástól. A modellelemek megjelenése a modelldiagramon alakzatosztályok és összekötőosztályok használatával van meghatározva. A modellben tárolt információk tartományosztályok és tartománykapcsolatok használatával lesznek definiálva.

Az alábbi ábrán a zenetár DSL-definíciójában szereplő tartományosztályok és kapcsolatok láthatók.

Beágyazási és referenciakapcsolatok

Az ábrán négy tartományosztály látható: Zene, Album, Előadó és Dal. A tartományosztályok olyan tartománytulajdonságokat határoznak meg, mint a Név, a Cím stb. A példánymodellben ezeknek a tulajdonságoknak az értékei megjelennek a diagramon.

Az osztályok között tartománykapcsolatok vannak: MusicHasAlbums, MusicHasArtists, AlbumbHasSongs és ArtistAppearedOnAlbums. A kapcsolatok több relációval rendelkeznek, például 1..1, 0..*. Például minden dalnak pontosan egy albumhoz kell kapcsolódnia az AlbumHasSongs kapcsolaton keresztül. Minden album tetszőleges számú dallal rendelkezhet.

A DSL-definíciós diagram átrendezése

Figyelje meg, hogy egy tartományosztály többször is megjelenhet a DSL-definíciós diagramon, ahogy az Album is ebben a képen. Mindig van egy fő nézet, és lehetnek referencianézetek .

A DSL-definíciós diagram átrendezéséhez a következő lépéseket teheti:

  • A fő- és hivatkozásnézetek felcserélése a Fa idehozása és a Fa felosztása parancsokkal. A parancsok megtekintéséhez kattintson a jobb gombbal egyetlen tartományosztályra.

  • A ctrl+Fel és a Ctrl+Le billentyűkombinációval rendelje újra a tartományosztályokat és az alakzatosztályokat.

  • Az egyes alakzatok jobb felső sarkában található ikonnal összecsukhatja vagy kibonthatja az osztályokat.

  • A fa egyes részeinek összecsukásához kattintson a tartományosztály alján található mínuszjelre (-).

Örökség

A tartományosztályok örökléssel határozhatók meg. Öröklési származtatás létrehozásához kattintson az Öröklés eszközre, kattintson a származtatott osztályra, majd az alaposztályra. A modellelem rendelkezik a saját tartományosztályán definiált összes tulajdonsággal, valamint az alaposztálytól örökölt összes tulajdonsággal. A kapcsolatokban is örökli a szerepköreit.

Az öröklés kapcsolatok, alakzatok és összekötők között is használható. Az öröklés azonos csoporton belül kell, hogy maradjon. Az alakzatok nem örökölhetők tartományosztályból.

Tartománykapcsolatok

A modellelemek kapcsolatok alapján kapcsolhatók össze. A hivatkozások mindig binárisak; pontosan két elemet kapcsolnak össze. Bármely elemnek azonban számos hivatkozása lehet más objektumokhoz, és akár több hivatkozás is lehet ugyanazon elempár között.

Ahogyan különböző elemosztályokat is definiálhat, a hivatkozások különböző osztályait is definiálhatja. A hivatkozás osztályát tartománykapcsolatnak nevezzük. A tartománykapcsolat határozza meg, hogy a példányai milyen elemosztályokhoz csatlakozhatnak. A kapcsolat minden végét szerepkörnek nevezzük, a tartománykapcsolat pedig a két szerepkör nevét, valamint magát a kapcsolatot határozza meg.

Kétféle tartománykapcsolat létezik: beágyazási kapcsolatok és referenciakapcsolatok. A DSL-definíciós diagramon a beágyazási kapcsolatok minden szerepkörben egy-egy vonallal rendelkeznek, a referenciakapcsolatok pedig szaggatott vonalakkal rendelkeznek.

Kapcsolatok beágyazása

A modell minden eleme– a gyökér kivételével – egy beágyazási hivatkozás célja. Ezért a teljes modell a hivatkozások beágyazásának egyetlen fáját alkotja. A beágyazási kapcsolatok az elszigetelést vagy a tulajdonjogot jelölik. Két ilyen módon kapcsolódó modellelem neve szülő és gyermek. A gyermekről azt mondják, hogy a szülőbe van ágyazva.

A beágyazási hivatkozások általában nem jelennek meg kifejezetten összekötőként egy diagramon. Ehelyett általában elszigeteléssel jelölik őket. A modell gyökerét a diagram jelöli, a benne beágyazott elemek pedig alakzatként jelennek meg a diagramon.

A példában a Music gyökérosztály az Album osztállyal rendelkezik egy MusicHasAlbums nevű beágyazási kapcsolaton keresztül, amely egy AlbumHasSongs nevű beágyazással rendelkezik a Song osztályhoz. A dalok elemekként jelennek meg az egyes albumok listájában. A Zene osztály rendelkezik egy MusicHasArtists beágyazással a Művész osztályhoz, amelynek példányai alakzatként is megjelennek a diagramon.

Alapértelmezés szerint a beágyazott elemek automatikusan törlődnek a szüleik törlésekor.

Amikor egy modellt XML formátumban mentünk el fájlba, a beágyazott elemek a szülőelemeikbe helyezkednek el, hacsak nem testre szabtuk a szerializálást.

Megjegyzés:

A beágyazás nem ugyanaz, mint az öröklés. A beágyazási kapcsolatban lévő gyermekek nem öröklik a szülő tulajdonságait. A beágyazás a modellelemek közötti kapcsolat típusa. Az öröklés az osztályok közötti kapcsolat, és nem hoz létre kapcsolatokat a modellelemek között.

Beágyazási szabályok

A példánymodell minden elemének pontosan egy beágyazási hivatkozásnak kell lennie, kivéve a modell gyökerét.

Ezért a gyökérosztály kivételével minden nem absztrakt tartományosztálynak legalább egy beágyazási kapcsolat céljának kell lennie, vagy örökölnie kell egy beágyazást egy alaposztályból. Az osztály lehet két vagy több beágyazás célja, de a példánymodell elemeinek egyszerre csak egy szülője lehet. A cél és a forrás közötti szorzásnak 0...1 vagy 1..1-nek kell lennie.

Az Explorer megjeleníti a beágyazási fát

A DSL-definíció egy explorert is létrehoz, amelyet a felhasználók a modelldiagramjuk mellett látnak.

Generált böngésző a DSL-hez

Az Explorer megjeleníti a modell összes elemét, még azokat is, amelyekhez nem definiált alakzatokat. Az elemeket és a kapcsolatok beágyazását jeleníti meg, a hivatkozási kapcsolatokat azonban nem.

Egy elem tartománytulajdonságainak értékeinek megtekintéséhez a felhasználó kiválaszt egy elemet a modelldiagramon vagy a modellkezelőben, és megnyitja a Tulajdonságok ablakot. Megjeleníti az összes tartománytulajdonságt, beleértve azokat is, amelyek nem jelennek meg a diagramon. A példában minden dal címmel és műfajsal is rendelkezik, de csak a Cím értéke jelenik meg a diagramon.

Referenciakapcsolatok

A hivatkozási kapcsolat bármilyen olyan kapcsolatot jelöl, amely nem beágyazható.

A referenciakapcsolatok általában alakzatok közötti összekötőként jelennek meg egy diagramon.

A modell XML-reprezentációjában a két elem közötti hivatkozási hivatkozás monikerek használatával jelenik meg. Vagyis a monikerek olyan nevek, amelyek egyedileg azonosítják a modell egyes elemeit. Az egyes modellelemek XML-csomópontja tartalmaz egy csomópontot, amely meghatározza a kapcsolat nevét és a másik elem monikerét.

Szerepkörök

Minden tartománykapcsolat két szerepkörrel, egy forrásszerepkörrel és egy célszerepkörrel rendelkezik.

Az alábbi képen a Publisher tartományosztály és a PublisherCatalog tartománykapcsolat közötti sor a forrásszerepkör. A célzott szerepkör a tartománykapcsolatot az Album tartományosztályhoz kötő vonal.

Szerepkörök és tulajdonságok.

A kapcsolathoz társított nevek különösen fontosak a modellen áthaladó programkód írásakor. A DSL-megoldás létrehozásakor például a létrehozott Publisher osztálynak van egy albumgyűjteményt tartalmazó tulajdonságkatalógusa. Az Album osztály rendelkezik egy Publisher nevű tulajdonsággal, amely a Publisher osztály egyetlen példánya.

Amikor kapcsolatot hoz létre egy DSL-definícióban, a tulajdonság- és kapcsolatnevek alapértelmezett értékeket kapnak. Azonban módosíthatja őket.

Sokféleségek

A szorzások megadják, hogy hány elem rendelkezhet ugyanazzal a szerepkörrel egy tartománykapcsolatban. A példában a katalógusszerepkör nulla-a-többhöz (0...*) szorzási beállítása azt határozza meg, hogy a Publisher tartományosztályának bármely példánya annyi PublisherCatalog kapcsolati hivatkozással rendelkezhet, amennyit meg szeretne adni.

Konfigurálja egy szerepkör szorzását a diagram beírásával vagy a MultiplicityTulajdonságok ablak tulajdonságának módosításával. Az alábbi táblázat a tulajdonság beállításait ismerteti.

Multiplicitás típusa Description
0..* (Nullától többig) A tartományosztály minden példánya rendelkezhet a kapcsolat több példányával, vagy a kapcsolat egyetlen példányával sem.
0..1 (Nullától egyig) A tartományosztály minden példánya legfeljebb egy kapcsolattal rendelkezhet, vagy egyáltalán nem rendelkezhet kapcsolattal.
1..1 (Egy) A tartományosztály minden példánya rendelkezhet a kapcsolat egy-egy példányával. A kapcsolatnak egynél több példánya nem hozható létre a szerepkörosztály egyik példányából sem. Ha az ellenőrzés engedélyezve van, érvényesítési hiba jelenik meg, ha a szerepkörosztály bármely példánya nem rendelkezik kapcsolatpéldánysal.
1..* (Egy a többhöz) A szerepkörhöz tartozó osztály minden példányának, amely ilyen multiplicitással rendelkezik, több példánya is lehet a kapcsolatnak, és minden példánynak legalább egy kapcsolatban kell lennie. Ha az ellenőrzés engedélyezve van, érvényesítési hiba jelenik meg, ha a szerepkörosztály bármely példánya nem rendelkezik kapcsolatpéldánysal.

Tartománykapcsolatok osztályokként

Az Áruházban hivatkozás jelenik meg a LinkElement példányaként, amely a ModelElement származtatott osztálya. Ezeket a tulajdonságokat a tartománykapcsolatok tartománymodell-diagramjában határozhatja meg.

Azt is megteheti, hogy a kapcsolatot más kapcsolatok forrása vagy céljaként is használhatja. A tartománymodell-diagramon kattintson a jobb gombbal a tartománykapcsolatra, majd kattintson a Megjelenítés osztályként parancsra. Megjelenik egy további osztálydoboz. Ezután kapcsolatokat is csatlakoztathat hozzá.

A kapcsolatot részben örökléssel is definiálhatja, ahogyan a tartományosztályokkal is. Válassza ki a származtatott kapcsolatot, és állítsa be az Alapkapcsolatot a Tulajdonságok ablakban.

A származtatott kapcsolatok az alapkapcsolatra specializálódnak. A hivatkozott tartományosztályokat az alapkapcsolat által összekapcsolt osztályokból kell származtatnia, vagy azokkal azonosnak kell lennie. Amikor egy modellben létrejön a származtatott kapcsolat hivatkozása, az a származtatott és az alapkapcsolatok példánya is. A programkódban a hivatkozás ellentétes végére navigálhat az alap vagy a származtatott osztály által létrehozott tulajdonságok használatával.