From 3905626de0d9db6ee2589b8b931960d3262661c0 Mon Sep 17 00:00:00 2001 From: Gtrouborst <36916421+Gtrouborst@users.noreply.github.com> Date: Wed, 14 Feb 2024 14:00:20 +0100 Subject: [PATCH] #457 edit text --- AfsprakenRegels.md | 315 +++++++++---------------------------------- MetamodelAlgemeen.md | 15 ++- 2 files changed, 71 insertions(+), 259 deletions(-) diff --git a/AfsprakenRegels.md b/AfsprakenRegels.md index 14822ceb..5070308d 100644 --- a/AfsprakenRegels.md +++ b/AfsprakenRegels.md @@ -151,7 +151,7 @@ Gewone datatypen staan op zichzelf en worden niet beschreven in termen van een a Bijvoorbeeld een Bedrag, dat bestaat uit een hoeveelheid en een muntsoort. Het aantal zelf is nietszeggend, tenzij ook aangegeven wordt welke muntsoort het betreft. Elk data-element in een Gestructureerd datatype heeft zelf ook weer een datatype (in zeer bijzondere gevallen kan een data-element zelf ook weer een Gestructureerd datatype zijn). -### Gestructureerd datatype representeren als één gegevenselement +#### Gestructureerd datatype representeren als één gegevenselement Soms is er de behoefte om een combinatie van gegevens samengesteld te representeren, in één gegevenselement. Dit speelt specifiek bij gestructureerde @@ -433,60 +433,29 @@ objecttypen. Dit kan in uw eigen extensie toegevoegd worden. ## Constraint toepassen -Deze paragraaf gaat dieper in op hoe een Constraint toegepast wordt. Twee constraints die gedefinieerd zijn op hetzelfde modelelement mogen niet dezelfde naam hebben. - -Een Constraint wordt beschreven met een: -- Naam (UML-constraint name): een naam c.q. label, vaak in steekwoorden. -- Specificatie in tekst (UML-Constraint Notes, type invariant): een uitgebreide heldere -beschrijving van de constraint in gewone tekst. - -en optioneel: -- Specificatie formeel (UML-Constraint Notes, type OCL): formele -specificatie in de Object Constraint Language. De formele specificatie bevat dus -de uitgebreide heldere beschrijving van de constraint in gewone tekst EN de -formele specificatie in OCL. - -In Enterprise architect 12.x lijkt het helaas (nog) niet mogelijk om constraints -zoals bedoeld in UML op te nemen, te weten als OpaqueExpression met een -constraint string en een aanduiding van de taal: natuurlijke taal, of OCL (of -een andere zoals Java, maar deze wordt niet toegepast in dit metamodel). EA -werkt met UML Notes en een constraint type. Het is daarnaast niet mogelijk om de -tekst en de OCL in dezelfde constraint op te nemen. Het worden dan twee aparte -constraints, 1 met tekst en 1 met OCL, met verplicht ook een andere naam. -Vandaar onderstaande aanpak: - -Als de modelleur kiest om de constraint alleen in gewone taal te beschrijven, +Deze paragraaf gaat dieper in op hoe een «Constraint» toegepast wordt. Twee constraints die gedefinieerd zijn op hetzelfde modelelement mogen niet dezelfde naam hebben. + +Een `«Constraint»` wordt beschreven met een: +1. **Naam** (`UML-constraint name`): een naam c.q. label, vaak in steekwoorden. +1. **Specificatie in tekst** (`UML-Constraint Notes`, `type invariant`): een uitgebreide heldere beschrijving van de `«Constraint»` in gewone tekst. +1. [Optioneel] **Specificatie formeel** (`UML-Constraint Notes`, `type OCL`): formele specificatie in de [[[OCL]]] (OCL). De formele specificatie bevat dus de uitgebreide heldere beschrijving van de constraint in (a.) _gewone tekst_ én (b.) de _formele specificatie in OCL_. + +In Enterprise architect `12.x` lijkt het helaas (nog) niet mogelijk om constraints zoals bedoeld in UML op te nemen, te weten als `OpaqueExpression` met een `constraint string` en een aanduiding van de taal: natuurlijke taal, of OCL (of een andere zoals Java, maar deze wordt niet toegepast in dit metamodel). EA werkt met `UML Notes` en een `constraint type`. + +Het is daarnaast niet mogelijk om de tekst en de OCL in dezelfde constraint op te nemen. Het worden dan twee aparte constraints: één met tekst en één met OCL, met verplicht ook een andere naam. Vandaar onderstaande aanpak.Als de modelleur kiest om de `«Constraint»` alleen in gewone taal te beschrijven, dan als volgt: -- Naam (UML-constraint name): een naam c.q. label, vaak in +- **Naam** (`UML-constraint name`): een naam c.q. label, vaak in steekwoorden. -- Specificatie in tekst (UML-Constraint Notes, type invariant): -een uitgebreide heldere beschrijving van de constraint in gewone tekst. - -Als de modelleur kiest om de constraint niet alleen in gewone taal te -beschrijven, maar ook in een formele taal (OCL), dan als volgt: -- Naam (UML-constraint name): een naam c.q. label, vaak in steekwoorden. -- Specificatie formeel (UML-Constraint Notes, type OCL): formele specificatie in de object -constraint language (OCL). De uitgebreide heldere beschrijving van de constraint -in gewone tekst wordt opgenomen als commentaar, tussen /\* \*/. - -**Aanbeveling**: als een eigenschap van één UML-attribute, of één UML-association -met een patroon (zie patroon) of een lengte (zie metadata aspect) of een -kardinaliteit van een relatiesoort vastgelegd kan worden, gebruik dan deze en -geen UML-constraint. Als er sprake is van een eigenschap die over meerdere -informatiemodelelementen heen gaat, dan is er altijd sprake van een regel die we -modelleren met een UML-constraint. - -**Aanbeveling**: wees terughoudend met het gebruik van constraints in het -informatiemodel wanneer de kans reëel is dat het model hierdoor gaat wijzigen of -als het niet direct over de semantiek, structuur of syntax van de te registreren -gegevens gaat. Dit is bijvoorbeeld het geval wanneer er regels bestaan rondom -informatie die elke paar jaar kan wijzigen, of die per toepassingsgebied (net) -anders toegepast moet worden. Bijvoorbeeld: wanneer een persoon 65 jaar of ouder -is, mag deze geen uitkering aanvragen. Wanneer er veel van zulke constraints in -het informatiemodel worden opgenomen, zal dit leiden tot een ongewenste dynamiek -waardoor er (te) vaak nieuwe versies moeten worden uitgebracht. De aanbeveling -is om de specificatie van dergelijke constraints buiten het informatiemodel te -specificeren, bijvoorbeeld als validatieregel. +- **Specificatie in tekst** (`UML-Constraint Notes`, `type invariant`): +een uitgebreide heldere beschrijving van de `«Constraint»` in gewone tekst. + +Als de modelleur kiest om de `«Constraint»` niet alleen in gewone taal te beschrijven, maar ook in een formele taal (OCL), dan als volgt: +- **Naam** (`UML-constraint name`): een naam c.q. label, vaak in steekwoorden. +- **Specificatie formeel** (`UML-Constraint Notes`, `type OCL`): formele specificatie in de [[[OCL]]] (OCL). De uitgebreide heldere beschrijving van de `«Constraint»` in gewone tekst wordt opgenomen als commentaar, tussen `/* */`. + +**Aanbeveling**: als een eigenschap van één `«UML-attribute`, of één `«UML-association»` met een «Patroon» of een «Lengte» of een «Kardinaliteit» van een «Relatiesoort» vastgelegd kan worden, gebruik die dan en geen `«UML-constraint»`. Als er sprake is van een eigenschap die over meerdere informatiemodelelementen heen gaat, dan is er altijd sprake van een regel die we modelleren met een `«UML-constraint»`. + +**Aanbeveling**: wees terughoudend met het gebruik van constraints in het informatiemodel wanneer de kans reëel is dat het model hierdoor gaat wijzigen of als het niet direct over de _semantiek_, _structuur_ of _syntax_ van de te registreren gegevens gaat. Dit is bijvoorbeeld het geval wanneer er regels bestaan rondom informatie die elke paar jaar kan wijzigen, of die per toepassingsgebied (net) anders toegepast moet worden. Bijvoorbeeld: wanneer een persoon 65 jaar of ouder is, mag deze geen uitkering aanvragen. Wanneer er veel van zulke constraints in het informatiemodel worden opgenomen, zal dit leiden tot een ongewenste dynamiek waardoor er (te) vaak nieuwe versies moeten worden uitgebracht. De aanbeveling is om de specificatie van dergelijke constraints buiten het informatiemodel te specificeren, bijvoorbeeld als _validatieregel_. ## Historie @@ -609,13 +578,7 @@ De conventie hiervoor wordt opgenomen in de eigen extensie. Bijvoorbeeld: ## Afleidbare gegevens -In een informatiemodel kan de behoefte bestaan om afgeleide gegevens op te -nemen: dit zijn gegevens die afleidbaar zijn uit andere attribuut- en/of -relatiesoorten binnen het informatiemodel. Dit lijkt op redundantie. Toch hebben -we deze gegevens daar opgenomen waar er ten eerste vraag is naar het afgeleide -gegeven en ten tweede het gegeven niet eenvoudig af te leiden is (er moet sprake -zijn van enige mate van complexiteit). Dit wordt in UML weergegeven via -isDerived. Zie ook Attribuutsoort, §2.4.2 – is afleidbaar. +In een informatiemodel kan de behoefte bestaan om afgeleide gegevens op te nemen: dit zijn gegevens die afleidbaar zijn uit andere attribuut- en/of relatiesoorten binnen het informatiemodel. Dit lijkt op redundantie. Toch hebben we deze gegevens daar opgenomen waar er ten eerste vraag is naar het afgeleide gegeven en ten tweede het gegeven niet eenvoudig af te leiden is (er moet sprake zijn van enige mate van complexiteit). Dit wordt in UML weergegeven via `isDerived`. Zie ook [[[#attribuutsoort-0]]] en [[[#metagegeven-indicatie-afleidbaar]]].