Hallo allerseits, Hallo Alois,
ich glaube, einen inhaltlichen Fehler im Buch entdeckt zu haben (bin allerdings nicht hundertprozentig sicher):
Kapitel 3.5, OCL-Befehlsübersicht, Kollektionen-Vergleichs- bzw. Mengen-Operatoren (Seite 137):
difference: "Auswahl der Elemente aus ParamList, die in der Basisliste nicht vorhanden sind"
Meines Wissens und meiner Erfahrung nach ist "difference" in ECO die Umsetzung des originalen OCL-Minus-Operators (einfach "-"), siehe beispielsweise im Buch "The Object Constraint Language Second Edition" von Jos Warmer und Anneke Kleppe (englische Ausgabe), Seite 144.
Ich habe nämlich vorhin mit dem OclPsHandle experimentiert und wollte nicht nur NEUE Einträge in die DataGrid bringen, sondern daraus auch Einträge löschen. Dies habe ich durch folgende Expression umgesetzt:
(self->union(vNewOnes))->difference(vDeletedOnes)
während die Alternative laut ECO-Buch
vDeletedOnes->difference(self->union(vNewOnes))
erst gar keine Zeilen anzeigt, mithin also nicht das gewünschte Ergebnis erzeugt.
Allerdings bin ich noch zu unbedarft im Umgang mit OCL, insofern würde ich diese Erkenntnis gerne hier zur Disposition und Debatte stellen.
Viele Grüße,
Erik
ich glaube, einen inhaltlichen Fehler im Buch entdeckt zu haben (bin allerdings nicht hundertprozentig sicher):
Kapitel 3.5, OCL-Befehlsübersicht, Kollektionen-Vergleichs- bzw. Mengen-Operatoren (Seite 137):
difference: "Auswahl der Elemente aus ParamList, die in der Basisliste nicht vorhanden sind"
Meines Wissens und meiner Erfahrung nach ist "difference" in ECO die Umsetzung des originalen OCL-Minus-Operators (einfach "-"), siehe beispielsweise im Buch "The Object Constraint Language Second Edition" von Jos Warmer und Anneke Kleppe (englische Ausgabe), Seite 144.
Ich habe nämlich vorhin mit dem OclPsHandle experimentiert und wollte nicht nur NEUE Einträge in die DataGrid bringen, sondern daraus auch Einträge löschen. Dies habe ich durch folgende Expression umgesetzt:
(self->union(vNewOnes))->difference(vDeletedOnes)
während die Alternative laut ECO-Buch
vDeletedOnes->difference(self->union(vNewOnes))
erst gar keine Zeilen anzeigt, mithin also nicht das gewünschte Ergebnis erzeugt.
Allerdings bin ich noch zu unbedarft im Umgang mit OCL, insofern würde ich diese Erkenntnis gerne hier zur Disposition und Debatte stellen.
Viele Grüße,
Erik

