bugfix> uml > 投稿

次のクラスがあります。

そして、OCLで次の制約を表現したいと思います。

preのすべての文字列には、(「not」と1つの「」)を含めるか、「」を含めないでください。

出来ますか?どうやって書くことができますか? ありがとうございました!!

追伸''と書くことで、空白を意味します。

回答 1 件
  • 正式な英語を使用してかなり良い仕事をしたので、OCLへの音訳が簡単になりました。しかし、List<>を使用しました  UMLやOCLの機能ではないので、その操作を提供することなく、誰が知っていますか?したがって、何らかの形のコレクション、おそらくシーケンスを使用すると仮定します。 (UMLでは、1より大きいuopperバウンドを指定することにより、自動的にコレクションを取得します。)

    理想的には次のように音訳できます:

    pre->forAll(s |
      (s.contains('not') and (s.count(' ') = 1)) or (s.count(' ') = 0))
    
    

    しかし、標準のOCLにはString :: contains()またはString ::: count()がないため、少し努力する必要があります。 Eclipse OCLにはString :: tokenize()、String:lastIndexOf()およびString :: matches()があり、いずれも使用できます。しかし、標準OCLでは、おそらくcharacters()を使用して、それぞれが1文字を含む文字列のシーケンスを作成する必要があります。

    For s.contains('not') use s.indexOf('not') >= 0
    For s.count(' ') use s.characters->count(' ')
    
    

    そしてs.characters->の評価を避けるために 貧弱なOCLツールでcount( '')を2回、let変数を導入します。

あなたの答え